2

我正在尝试制作一个小场景来查看 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 文件中设置初始旋转确实有效。在另一个元素(如整个场景)上设置旋转也可以。

4

1 回答 1

2

您需要在加载后旋转它。

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

duck.setDocument("amyrose.dae", null, function() {
    duck.setLocY(-15);
    duck.setScale(2);
    duck.setRotX(0);
    duck.setRotY(0);
    duck.setRotZ(3);
});
于 2011-10-17T22:26:36.237 回答