Мне кажется, нужно кое-что прояснить:
- Матрица модели преобразует объект из координат объекта в мировые координаты.
- Матрица представления преобразует мировые координаты в глазкоординаты.
- Матрица проекции преобразует координаты глаза в координаты клипа.
Исходя из стандартных соглашений об именах, mvpMatrix представляет собой модель проекции * view *, в этом порядке.Нет других матриц, на которые вам нужно умножиться.Проекция - это матрица проекции (орто или перспектива), вид - это матрица преобразования камеры (НЕ вид модели), а модель - это положение, масштаб и поворот вашего объекта.
Я полагаю, что проблема заключается либо в том,в матрицах умножения, которые не нужно умножать вместе, или в матрицах умножения в неправильном порядке.(умножение матриц не является коммутативным)
Если вы еще не решили эту проблему, я бы порекомендовал отправить все 3 матрицы отдельно, а затем сбросить значения обратно, чтобы убедиться, что нет проблем с отправкой матриц.
Вершинный шейдер:
attribute vec4 a_vertex;
attribute vec2 a_texcoord0;
varying vec2 v_texcoord0;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
void main(void)
{
gl_Position = projection * view * model * a_vertex;
v_texcoord0 = a_texcoord0;
}
Фрагментный шейдер:
uniform sampler2D t_texture0;
uniform vec4 u_color;
varying vec2 v_texcoord0;
void main(void)
{
vec4 color = texture2D(t_texture0, v_texcoord0);
gl_FragColor = color * u_color;
}
Кроме того, я переместил цветовую форму в шейдер фрагмента, пропуская ее, так как изменение не требуется, когдавсе вершины будут одного цвета.