OpenGL我正在更改我的z值,但没有任何反应

时间:2018-07-01 13:18:09

标签: c++ opengl

我有一个2D矩形,并且我将其在所有顶点的顶点着色器中的z分量更改为相同的数量k(这是我用箭头键控制的统一大小)

#version 330
layout (location = 0) in vec3 aPos; //vertex shader
layout (location = 1) in vec2 aTexCoord;
out vec3 OurColor;
out vec2 TexCoord;
uniform float k;
void main(){
    gl_Position = vec4(aPos.x, aPos.y, aPos.z + k, 1.0f);
    TexCoord = aTexCoord;
}
#version 330 core
out vec4 FragColor; //fragment shader
in vec2 TexCoord;
uniform sampler2D texture1;
uniform sampler2D texture2;
void main(){
    FragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord),     0.5);
}

什么也没有发生,矩形似乎并不会越来越远,只有当我使Z分量大于1.0或小于-1.0时,矩形才会消失。我尝试更改第四个组件,这使对象越来越小,就像您期望Z组件的行为一样。

我尝试过在线查找解释,但是它们都使用预制的数学库,没有人处理基础数学。有人可以解释一下Z和W的行为吗?

1 个答案:

答案 0 :(得分:1)

顶点着色器(除其他事项外)应该执行ModelViewProjection矩阵在固定功能管线中所做的工作:将几何图形转换为视图坐标并将其投影为投影坐标。这意味着您应将投影(通常用z除法)合并到顶点着色器输出中。