線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1575
推到 Plurk!
推到 Facebook!

FireMonkey 載入 obj 圖形

尚未結案
noodlet
一般會員


發表:4
回覆:1
積分:1
註冊:2014-10-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-11-15 21:06:11 IP:218.166.xxx.xxx 訂閱
在編輯程式時可以順便設定 obj 檔案位置,如:
http://docwiki.embarcadero.com/RADStudio/XE7/en/Importing_a_3D_Model_in_a_FireMonkey_Application
但若想建立按鈕讓使用者載入 obj 圖檔那該怎麼做?
在 Users\Public\Documents\RAD Studio\12.0\Samples\FireMonkey\Delphi\ModelViewer
Delphi 範例中,使用 LoadFromFile() 可以載入圖檔,
但在BCB中卻無法如法炮製。

[code delphi]
//範例程式碼
procedure TModel3DTest.spbLoadFromFileClick(Sender: TObject);
var
od : TOpenDialog;
FileName : String;
begin
od := nil;
try
od := TOpenDialog.Create(self);
od.Filter :='3D files|*.obj;*.dae;*.ase';
if od.Execute then
begin
lblStatus.Text := 'Loading... please wait';
Application.ProcessMessages;
FModel3D.Clear; //<--FModel3D為什麼不是拉在介面上的元件?var FModel3D : TModel3D;
FModel3D.RotationAngle.Vector := Vector3D(0,0,0);

DummyX.RotationAngle.Vector := Vector3D(0,0,0);
DummyY.RotationAngle.Vector := Vector3D(0,0,0);

ClearMeshes(FModel3D); //<--這行副程式似乎也需要自己編寫?
FileName := od.FileName;
FModel3D.LoadFromFile(FileName);

lblStatus.Text := 'Ready';
end;
finally
od.Free;
end;
end;

[/code]

------
新手上路
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-11-15 21:57:22 IP:114.32.xxx.xxx 訂閱
你好,看起來你對pascal的語法不熟。一般來說 c++ builder的人比較辛苦,要先學習delphi的語法,才能達到一定的水平。

建議你有時間看一些 delphi的書或網路上的資料。

至於你提的FModel3D,它被宣告成全域變數。然後在 crerate的事件上初始這個物件。所以他沒拉元件上。

ClearMeshes,對,你也要自己轉成 c ,參考delphi的實作來轉。

在對delphi語法不了解前,想要經易的轉換c builder是很難的。這是初學 c builder的痛呀!


===================引 用 noodlet 文 章===================
在編輯程式時可以順便設定 obj 檔案位置,如:
http://docwiki.embarcadero.com/RADStudio/XE7/en/Importing_a_3D_Model_in_a_FireMonkey_Application
但若想建立按鈕讓使用者載入 obj 圖檔那該怎麼做?
在 Users\Public\Documents\RAD Studio\12.0\Samples\FireMonkey\Delphi\ModelViewer
Delphi 範例中,使用 LoadFromFile() 可以載入圖檔,
但在BCB中卻無法如法炮製。

[code delphi]
//範例程式碼
procedure TModel3DTest.spbLoadFromFileClick(Sender: TObject);
var
od : TOpenDialog;
FileName : String;
begin
od := nil;
try
od := TOpenDialog.Create(self);
od.Filter :='3D files|*.obj;*.dae;*.ase';
if od.Execute then
begin
lblStatus.Text := 'Loading... please wait';
Application.ProcessMessages;
FModel3D.Clear; //<--FModel3D為什麼不是拉在介面上的元件?var FModel3D : TModel3D;
FModel3D.RotationAngle.Vector := Vector3D(0,0,0);

DummyX.RotationAngle.Vector := Vector3D(0,0,0);
DummyY.RotationAngle.Vector := Vector3D(0,0,0);

ClearMeshes(FModel3D); //<--這行副程式似乎也需要自己編寫?
FileName := od.FileName;
FModel3D.LoadFromFile(FileName);

lblStatus.Text := 'Ready';
end;
finally
od.Free;
end;
end;

[/code]

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
noodlet
一般會員


發表:4
回覆:1
積分:1
註冊:2014-10-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-11-15 23:01:48 IP:218.166.xxx.xxx 訂閱
首先感謝你的回覆,

比較好奇的一點是 ClearMeshes 按照字面上的意思是把先前的網格清除
而我試過把 Delphi 的 ClearMeshes 註解掉,結果編譯就不過了
(跟想像中有落差阿)
預期註解掉 ClearMeshes 會得到:
載入第一個 001.obj 檔,正常
載入第二個 002.obj 檔時會因為 001.obj 的網格沒有清除造成疊圖的現象。

===================引 用 aftcast 文 章===================
你好,看起來你對pascal的語法不熟。一般來說 c builder的人比較辛苦,要先學習delphi的語法,才能達到一定的水平。

建議你有時間看一些 delphi的書或網路上的資料。

至於你提的FModel3D,它被宣告成全域變數。然後在 crerate的事件上初始這個物件。所以他沒拉元件上。

ClearMeshes,對,你也要自己轉成 c ,參考delphi的實作來轉。

在對delphi語法不了解前,想要經易的轉換c builder是很難的。這是初學 c builder的痛呀!
------
新手上路
系統時間:2024-04-26 14:20:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!