[:D]我有幾個3ds,有沒有網友可以寫個delphi程序來使它旋轉、移動、翻滾呢? |
答題得分者是:jow
|
nicolas
一般會員 發表:39 回覆:40 積分:15 註冊:2004-05-05 發送簡訊給我 |
|
fatming
一般會員 發表:10 回覆:7 積分:3 註冊:2004-09-30 發送簡訊給我 |
|
nicolas
一般會員 發表:39 回覆:40 積分:15 註冊:2004-05-05 發送簡訊給我 |
|
fatming
一般會員 發表:10 回覆:7 積分:3 註冊:2004-09-30 發送簡訊給我 |
|
nicolas
一般會員 發表:39 回覆:40 積分:15 註冊:2004-05-05 發送簡訊給我 |
|
billwillman
一般會員 發表:0 回覆:7 積分:1 註冊:2006-11-06 發送簡訊給我 |
当然可以,我改写了Asphyre3DSOjbect.pas;可以读取材质信息,但还不能读取纹理信息,现在正在改进
下载地址: http://www.afterwarp.net/forum/attachment.php?attachmentid=777&d=1162798551
------
想别人想不到的就是创新 只有想不到,没有做不到 |
billwillman
一般會員 發表:0 回覆:7 積分:1 註冊:2006-11-06 發送簡訊給我 |
|
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
|
SmallBare
一般會員 發表:2 回覆:11 積分:2 註冊:2003-10-20 發送簡訊給我 |
參考看看,使用GLScene元件
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, GLScene, GLVectorFileObjects, GLMisc, GLWin32Viewer, GLTexture, GLObjects, StdCtrls,Math,VectorGeometry; type TForm1 = class(TForm) GLSceneViewer1: TGLSceneViewer; GLScene1: TGLScene; GLMaterialLibrary1: TGLMaterialLibrary; GLCamera1: TGLCamera; GLDummyCube1: TGLDummyCube; GLLightSource1: TGLLightSource; OpenDialog1: TOpenDialog; Button1: TButton; GLFreeForm1: TGLFreeForm; procedure Button1Click(Sender: TObject); procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } Procedure Selected(Var Scr:TGLSceneViewer;X,Y:Integer; Var Obj:TGLBaseSceneObject;Var Vector:TVector); Function MouseWorldPos(var scn:TGLSceneViewer;x, y : Integer) : TVector; end; var Form1: TForm1; PX,PY:Integer; Targets:TGLBaseSceneObject; Last:TVector; implementation uses GLFile3DS; {$R *.dfm} Procedure TForm1.Selected(Var Scr:TGLSceneViewer;X,Y:Integer; Var Obj:TGLBaseSceneObject;Var Vector:TVector); Begin Obj:=GLSceneViewer1.Buffer.GetPickedObject(X,Y); Vector:=MouseWorldPos(Scr,X, Y); End; function TForm1.MouseWorldPos(var scn:TGLSceneViewer;x, y : Integer) : TVector; var v : TVector; begin y:=Scn.Height-y; if Assigned(Targets) then begin SetVector(v, x, y, 0); Scn.Buffer.ScreenVectorIntersectWithPlaneXY(v, Targets.Position.Z, Result); end else SetVector(Result, NullVector); end; procedure TForm1.Button1Click(Sender: TObject); begin If OpenDialog1.Execute Then Begin GLFreeForm1.LoadFromFile(OpenDialog1.FileName); GLCamera1.ZoomAll; End; end; procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin If ssLeft in Shift Then Begin //視點繞物體旋轉 GLCamera1.MoveAroundTarget( (PY-Y) * 0.2,(PX-X) * 0.2 ); PX:=X; PY:=Y; End; If Not Assigned(Targets) Then Exit; If (ssRight In Shift) Then Begin //旋轉單件物體 GLCamera1.RotateObject(Targets,(PX-X)* 0.2,(PX-Y)* 0.2); End; end; procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin //選擇物體 PX:=X; PY:=Y; Selected(GLSceneViewer1,X,Y,Targets,Last); end; procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin //縮放視景 GLCamera1.AdjustDistanceToTarget( Power(1.1, WheelDelta/120) ); end; procedure TForm1.FormCreate(Sender: TObject); begin //有些3DS載入時會出現錯誤,需忽略 GLFreeForm1.IgnoreMissingTextures:=True; end; end. PS.其實這些都還算蠻簡單的,在網路上查就可以找到ㄧ堆Demo,哪像我在找的Cad相關Sample找到哭死 最後得出結論-->圖形學,曲線演算......有點灰心了QQ |
SmallBare
一般會員 發表:2 回覆:11 積分:2 註冊:2003-10-20 發送簡訊給我 |
有找到ㄧ款專門處理3D幾何的函式庫,有興趣的可以研究研究
gts.sourceforge.net |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[Delphi][發表] [發表] 我的 OpenGL 學習用的專案 2 - 使用 GLScene
這裡有我練習的實作... 切換到 Func_50, Func_51. Func_51輸出畫面: 47010b164fe08_Func00051.PNG |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |