У меня есть простой вершинный шейдер
#version 330 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec3 in_Position;
out vec3 pass_Color;
void main(void)
{
//gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
gl_Position = vec4(in_Position, 1.0);
pass_Color = vec3(1,1,1);
}
В моем клиентском коде у меня есть
glm::vec4 vec1(-1,-1,0,1);//first
glm::vec4 vec2(0,1,0,1);//second
glm::vec4 vec3(1,-1,0,1);//third
glm::mat4 m = projectionMatrix * viewMatrix * modelMatrix;
//translate on client side
vec1 = m * vec1;
vec2 = m * vec2;
vec3 = m * vec3;
//first vertex
vertices[0] = vec1.x;
vertices[1] = vec1.y;
vertices[2] = vec1.z;
//second
vertices[3] = vec2.x;
vertices[4] = vec2.y;
vertices[5] = vec2.z;
//third
vertices[6] = vec3.x;
vertices[7] = vec3.y;
vertices[8] = vec3.z;
Теперь мой вопрос, не использую ли я матричное умножение в шейдере и нет в клиентском кодеэто сделает меня хорошим треугольником, который выправит весь экран, так что я возьму его на себя, карта вершинного шейдера объединяет данные, передаваемые на экран в системе кордината с x=-1..1
и y=-1..1
Если я сделаю матрицуУмножение в шейдере все работает хорошо.Но если я закомментирую код в шейдере, как показано, и сделаю это на клиенте, я получу странные результаты.Разве это не должно дать тот же результат?
Неужели я ошибся, думая, что вывод вершинного шейдера gl_Position
является 2D-кординатами, несмотря на то, что vec4
?
Спасибо за любую помощь.Мне действительно нравится понимать, что именно вывод вершинного шейдера с точки зрения позиции вершины.