API GLGE setRot / setRotX не работает - PullRequest
2 голосов
/ 11 октября 2011

Я пытаюсь сделать небольшую сцену для просмотра 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-файле, который содержит сцену, работает.Настройка поворота на другом элементе (например, на всей сцене) также работает.

1 Ответ

2 голосов
/ 18 октября 2011

Вам нужно повернуть его после загрузки.

Вы можете сделать это в обратном вызове на setDocument

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