Билбординг в Android OpenGL ES 1.0 - PullRequest
1 голос
/ 05 июня 2011

Я пытаюсь заставить рекламный щит работать, но у меня проблемы с последним шагом.

После следования этим указаниям из учебников NeHe (http://nehe.gamedev.net/data/articles/article.asp?article=19) У меня есть векторы вида, права и вверх, и я уже перевел матрицу вида модели в центральную часть рекламного щита с помощью glTranslatef ().

float[] m = {right.x,right.y,right.z,0f,
            up.x,up.y,up.z,0f,
            look.x,look.y,look.z,0f,
            pos.x,pos.y,pos.z,1f}; //pos is the centerpoint position
gl.glMultMatrixf(m, 0);

Когда я пытаюсь создать из них матрицу умножения, рекламные щиты отображаются повсюду в неправильных позициях и ориентациях.

Полагаю, моя проблема в том, что я не знаю, как правильно создать и умножить матрицу. Я попытался сделать это вместо этого, но затем половина линий (те, которые должны вращаться против часовой стрелки) вращаются в неправильном направлении:

//normal is the vector that the billboard faces before any manipulations.
float angle = look.getAngleDeg(normal); //returns angle between 0 and 180.
gl.glRotatef(angle, up.x,up.y,up.z);

1 Ответ

0 голосов
/ 05 июня 2011

Понял, используя мой второй метод.Вычисление угла между векторами (арккосом точечного произведения) может дать угол только от 0 до 180, поэтому половину времени вы хотите свести к нулю, чтобы угол вращался в противоположном направлении.

Это легко проверить ... так как у меня уже есть правильный вектор, я могу просто проверить, острый ли угол между правым вектором и нормалью.Если он острый, то вы хотите отрицать исходный угол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...