Я пытаюсь нарисовать четырехугольник, используя OpenGL ES 2.0.
Мой вершинный шейдер выглядит так:
uniform mat4 mvp;
attribute vec4 position;
attribute vec4 color;
varying vec4 colorVarying;
void main()
{
gl_Position = mvp * position;
colorVarying = color;
}
Если я использую эти вершины:
-1.0f, -1.0f, 0.f, 1.f,
1.0f, -1.0f, 0.f, 1.f,
-1.0f, 1.0f, 0.f, 1.f,
1.0f, 1.0f, 0.f, 1.f
и эта матрица (в главном порядке столбцов, как и все следующие матрицы):
0.5,0,0,0,
0, 1,0,0,
0, 0,1,0,
0.5,0,0,1
четырехугольник покрывает правую половину области просмотра. Действительно, если я умножу эти две матрицы, я получу вершины
0, -1, 0, 1,
1, -1, 0, 1,
0, 1, 0, 1,
1 , 1, 0, 1,
и если я использую эти вершины и единичную матрицу, я получаю тот же результат. Таким образом, кажется, что умножение сделано правильно.
Теперь, если я умножу эти вершины (A):
-100.0f, -100.0f, 301.0f, 1.0f,
100.0f, -100.0f, 301.0f, 1.0f,
-100.0f, 100.0f, 301.0f, 1.0f,
100.0f, 100.0f, 301.0f, 1.0f,
по этой матрице (M):
0.4170 0 0 0
0 0.5560 0 0
0 0 -1.2220 -1.0000
0 0 444.4440 0
Я получаю эти вершины (B):
0.2075, 0.2766, -0.9892, 1.0000
-0.2075, 0.2766, -0.9892, 1.0000,
0.2075, -0.2766, -0.9892, 1.0000,
-0.2075, -0.2766, -0.9892, 1.0000,
и если я передам своему шейдеру B-вершины и единичную матрицу, он отобразит маленький прямоугольник в середине окна просмотра. Но если я передам ему вершины A и матрицу M, то ничего не получится.
Что происходит?