2014-01-04 4 views
0
//my triangle 
let vertdata = 
    [| new Vector3(-1.0f, -1.0f,0.0f) 
     new Vector3(1.0f, -1.0f,0.0f) 
     new Vector3(0.0f, 1.0f,0.0f) |] 
//VertexShader 
.. 
uniform mat4 mview; 
... 
gl_Position = mview * vec4(vPosition, 1.0); 
.. 

Вынесено с матрицей идентичности он выглядит какНеожиданный результат при вращении треугольника

mview = Matrix4.Identity 

enter image description here

, как и ожидалось.

mview = Matrix4.CreateTranslation(Vector3(0.0f,1.0f,0.0f)) 

enter image description here

В переводе на 1 в у. Но если я поверну его на 90 °, это как-то переводится в направлении х.

mview = Matrix4.CreateTranslation(Vector3(0.0f,1.0f,0.0f)) 
     * Matrix4.CreateRotationZ(toRad(90.0f)) 

enter image description here

Любая идея, почему он делает это? Если я сделаю математику в своей голове, это должно быть.

Matrix4.CreateRotationZ(toRad(90.0f)) 
* Vector3(0.0f, 1.0f,0.0f) = Vector3(-1.0f, 0.0f,0.0f) 

Matrix4.CreateTranslation(Vector3(0.0f,1.0f,0.0f)) 
* Vector3(-1.0f, 0.0f,0.0f) = Vector3(-1.0f, 1.0f,0.0f) 
//but it seems to be Vector3(-2.0f, 0.0f,0.0f) 
+1

Мое предположение: вам нужно изменить порядок совмещения матриц. – thumbmunkeys

+0

@ thumbmunkeys О ... да, ты прав. Я могу поклясться, что я попробовал это 2 мин назад. благодаря –

ответ

3

Вам необходимо изменить порядок совмещения матриц.

Смежные вопросы