我正在尝试为查看3D模型创建一个小场景。

我修改了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文件中设置初始旋转确实可以。在另一个元素(如整个场景)上设置旋转也可以。

最佳答案

加载后需要旋转它。

您可以在setDocument的回调中执行此操作

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

10-06 12:44