2014-10-02 2 views
2

Я пишу некоторый код webgl в дротике, и я отрисовываю некоторые спрайты на экране.webgl rotating quads выглядит некорректно

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

Я хочу повернуть квадрат по отдельности. Все мои попытки привели к неправильным результатам.

Это сцена без вращения применяется

Это GIF сцены с вращением применяется в течение долгого времени из приведенной ниже коды.

Вращение выглядит нормально, но если мы будем двигаться в стороны,

мы совершенно ясно видим, что ось г, кажется, игнорируется или что-то в этом роде.

Это мой объект матрица в методе моего квадратора класса делает приращение переменной

objectMatrix.setIdentity(); 
objectMatrix.translate(pos.x - w/2.0, pos.y - h * 1.0, pos.z * 1.0); 
objectMatrix.scale(w * 1.0, h * 1.0, 0.0); 
objectMatrix.rotateY(tick * PI/180); // rotate over time 
gl.uniformMatrix4fv(objectMatrixLocation, false, objectMatrix.storage); 

клещом каждый раз, когда мы визуализировать сцену

вершинный шейдер

precision highp float; 

attribute vec3 a_pos; 

uniform mat4 u_projectMatrix; 
uniform mat4 u_viewMatrix; 
uniform mat4 u_objectMatrix; 
uniform mat4 u_textureMatrix; 

varying vec2 v_texcoord; 
varying float v_dist; 
varying vec4 v_pos; 

void main() { 
    v_texcoord = (u_textureMatrix * vec4(a_pos, 1.0)).xy; 
    v_pos = vec4(u_projectMatrix * u_viewMatrix * vec4(a_pos, 1.0)); 
    vec4 pos = u_projectMatrix * u_viewMatrix * u_objectMatrix * vec4(a_pos, 1.0); 
    v_dist = 1.0 - pos.z/2.75; //for fragment shader's fade in the back stuff 
    gl_Position = pos; 
} 
+0

Похоже, у вас есть операция сдвига, а не вращение. В какой библиотеке классов Matrix вы используете? Векторная математика МакКутчана? –

+0

Да, я не думаю, что это проблема с кодом его фреймворка, хотя –

ответ

0

Проблема, кажется, есть было то, что я масштабирую компонент Z моей модельной матрицы на 0

objectMatrix.scale(w * 1.0, h * 1.0, 0.0);