2011-10-11 62 views
2

我正在嘗試爲查看3D模型製作一個小場景。GLGE API setRot/setRotX不起作用

我修改了GLGE Collada示例以從代碼添加.dae模型。

http://goleztrol.nl/SO/GLGE/01/

我已經得到了
到目前爲止,它的工作原理。相機使用動畫旋轉。

使用按鈕「添加」和「刪除」的模型,添加和刪除從場景,使用下面的代碼(不介意「鴨」,這是在原來的例子鴨子。)

var duck = null; 
function addDuck() 
{ 
    if (duck) return; 
    duck = new GLGE.Collada(); 

    doc.getElement("mainscene").addCollada(duck); 

    duck.setId("duck"); 
    duck.setDocument("amyrose.dae"); 
    duck.setLocY(-15); 
    duck.setRotX(1); 
    duck.setScale(2); 
} 

function removeDuck() 
{ 
    if (!duck) return; 
    doc.getElement("mainscene").removeChild(duck); 
    duck = null; 
} 

問題
現在模型是躺着,而它應該站起來。該元素的各種方法似乎工作。位置已設置,且已設置比例,但對setRotX的調用似乎被忽略。我嘗試了api中的其他各種方法,但setRotY,setRot,setQuatX和setDRotX都似乎失敗了。我沒有得到任何錯誤(不是關於這種方法)。我嘗試了1.57(應該是大約90度)的值,但其他值也在1到180之間。

我找不到我做錯了什麼。當然,我可以在Blender中旋轉模型本身,但我希望使用GLGE API來完成。

更新
當我打開演示模型,seymourplane_triangulate.dae,旋轉工作。顯然,我的模型不同之處在於它不能旋轉。我只是不明白爲什麼。我想這可能是因爲模型是由各種單獨的網格構成的,但我不明白爲什麼縮放和移動確實有效。

有沒有人知道這個模型有什麼問題,我能做些什麼來解決它(也許使用Blender)?

在包含場景的XML文件中設置初始旋轉是行不通的。在另一個元素上設置旋轉(如整個場景)也適用。

+0

更新:嘗試過各種東西,其中包括其加載'西摩Plane'模型。它確實被旋轉了,但是當我像這樣加載它時,它不會加載它的皮膚。顯然AmyRose和Seymour Plane之間有很大的區別。任何人都知道如何使用Blender修復它? – GolezTrol

回答

2

您需要在加載後將其旋轉。

您可以在回調做這setDocument

duck.setDocument("amyrose.dae", null, function() { 
    duck.setLocY(-15); 
    duck.setScale(2); 
    duck.setRotX(0); 
    duck.setRotY(0); 
    duck.setRotZ(3); 
}); 
+0

太棒了! :'D它的工作。我從未見過setDocument有過回調。謝謝! – GolezTrol

+0

我只注意到源代碼的回調。如果你在你的IDE中有代碼完成,請嘗試使用非縮小版本的GLGE – Petah

+0

是的,我已經使用過了,我也在代碼中進行了一些挖掘,但不知何故,我忽略了這種回調。我想我把它放在一邊不是問題,因爲我可以移動和調整模型的大小,並且我可以旋轉我嘗試的另一個模型。我現在覺得有點愚蠢。 : - /嗯,這是一個教訓。 :) – GolezTrol