Моя цель - ударить текстуру по Кубу.
Я использую webGL 1 на Chrome.
Не похоже, что мои UV-координаты меняются должным образом.
Похоже, что значения не передаются фрагментному шейдеру.
Код вершинного шейдера:
attribute vec3 a_position;
attribute vec2 a_vertexUV;
uniform mat4 u_mvp;
varying vec2 v_uv;
void main() {
v_uv = a_vertexUV;
gl_Position = u_mvp * vec4(a_position, 1);
}
Код шейдера фрагмента:
precision mediump float;
varying vec2 v_uv;
uniform sampler2D u_texSampler;
void main() {
gl_FragColor = texture2D(u_texSampler, v_uv).bgra;
}
Запуск моей программы выдает следующее:
Я вижу мой куб, он берет цвет из текстуры, но использует только цвет первого текселя для всей фигуры. Что говорит о том, что мой УФ-вектор пуст.
Я могу подтвердить это, пытаясь использовать данные из моего ультрафиолетового вектора в качестве цвета:
gl_FragColor = vec4(v_uv,0,1);
Что дает мне следующее:
черный куб. В моем векторе UV нет значений ...
Странная вещь в том, что если я использую вектор uv в вершинном шейдере, вот так:
gl_Position = u_mvp * vec4(v_uv, 0, 1);
Внезапно я получаю значения в моем ультрафиолетовом векторе во фрагментном шейдере, который, используя в качестве значений цвета, дает следующее:
Или как UV-координаты в моей текстуре, вот так:
gl_FragColor = texture2D(u_texSampler, v_uv).bgra;
Производит следующее:
Который правильно исходит из моей текстуры ...
Почему мой вариант не передает значения фрагментному шейдеру, если он не используется в gl_Position?