Estou fazendo um construtor de cena em LWJGL. Objetos na cena têm posições e rotações. Como a maioria dos construtores/modeladores de cena, tenho alças de cores para mostrar a orientação dos objetos. Tenho uma configuração típica, pontos vermelhos na direção positiva x, azuis na direção positiva z.
O problema é que as alças não apontam na direção correta. Anexei uma captura de tela mostrando o problema. O cubo à direita tem uma rotação de 0, 0, 0
e as alças estão corretas. O cubo da esquerda tem uma rotação de 0, 30, 0
. O que me deixa confuso é por que a alça azul está girada 30 graus no sentido horário e a malha está 30 graus no sentido ANTI-horário?
Eu calculo a rotação do cubo com
public Matrix4f getLocalMatrix() {
// I replace the place, rotation and scale immediately, so I recalculate the matrix each time.
return this.localMatrix.translationRotateScale(this.place, this.rotation, this.scale);
}
E para desenhar as alças eu uso
Matrix4f m = gameObject.getLocalMatrix();
gizmos.drawRay(gameObject.place, m.positiveZ(new Vector3f()));
...
public void drawRay(Vector3f begin, Vector3f course) {
glBegin(GL_LINES);
glVertex3f(begin.x, begin.y, begin.z);
glVertex3f(begin.x + course.x, begin.y + course.y, begin.z + course.z);
glEnd();
}
Eu uso um shader de vértice simples, não acho que esse seja o problema,
structure (location=0) in vec3 inPosition;
structure (location=1) in vec2 texCoord;
out vec2 outTextCoord;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
void principal() {
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(inPosition, 1.0);
outTextCoord = texCoord;
}
Os uniformes estão sendo montados corretamente (presumo eu). modelMatrix
está configurado para gameObject.getLocalMatrix());
A única coisa que consigo pensar é que parte do meu código está usando coordenadas para destros e parte para canhotos?