【发布时间】:2015-07-31 07:50:58
【问题描述】:
所以...我制作了这个 mat4 矩阵,它可以根据坐标平移一个三角形。我意识到使用以下矩阵,三角形将平移到屏幕的右侧:
Camera[0] = vec4(1.0, 0.0, 0.0, 0.0);
Camera[1] = vec4(0.0, 1.0, 0.0, 0.0);
Camera[2] = vec4(0.0, 0.0, 1.0, 0.0);
Camera[3] = vec4(0.5, 0.0, 0.0, 1.0);
现在,我读到 GLSL 中的翻译矩阵如下所示:
Camera[0] = vec4(1.0, 0.0, 0.0, 0.0);
Camera[1] = vec4(0.0, 1.0, 0.0, 0.0);
Camera[2] = vec4(0.0, 0.0, 1.0, 0.0);
Camera[3] = vec4(X, Y, Z, 1.0);
因此,我创建了一个变量,其中包含这 3 个值。
layout(location = 2) in vec3 CAM;
我会执行以下操作来确定相应位置的值:
Camera[0] = vec4(1.0, 0.0, 0.0, 0.0);
Camera[1] = vec4(0.0, 1.0, 0.0, 0.0);
Camera[2] = vec4(0.0, 0.0, 1.0, 0.0);
Camera[3] = vec4(CAM.x, CAM.y, CAM.z, 1.0);
我认为如果 CAM.x = 0.5 和 CAM.y = 0.0,CAM.z = 0.0,我会得到与我手动设置 X 为 0.5 并且 Y 和 Z 都为0.0,因为这些正是 CAM 的值。但相反,我得到了完全不同的结果。
Camera[0] = vec4(1.0, 0.0, 0.0, 0.0);
Camera[1] = vec4(0.0, 1.0, 0.0, 0.0);
Camera[2] = vec4(0.0, 0.0, 1.0, 0.0);
Camera[3] = vec4(0.5, 0.0, 0.0, 1.0);
和
Camera[0] = vec4(1.0, 0.0, 0.0, 0.0);
Camera[1] = vec4(0.0, 1.0, 0.0, 0.0);
Camera[2] = vec4(0.0, 0.0, 1.0, 0.0);
Camera[3] = vec4(CAM.x, CAM.y, CAM.z, 1.0);
即使 CAM.x = 0.5; CAM.y = 0.0; CAM.z = 0.0。 (如果 CAM 的值正确,我自己在顶点着色器中通过更改其中一个顶点的红色来检查它。通过添加以下代码:if(CAM.x == 0.5) ColorValue.x = 0.0; 我得到以下结果:)。这怎么可能?
顺便说一下,这是整个顶点代码:
#version 330 core
layout(location = 0) in vec3 VertexPosition;
layout(location = 1) in vec3 COR;
layout(location = 2) in vec3 CAM;
out vec3 ColorValue;
void main(){
mat4 Camera;
Camera[0] = vec4(1.0, 0.0, 0.0, 0.0);
Camera[1] = vec4(0.0, 1.0, 0.0, 0.0);
Camera[2] = vec4(0.0, 0.0, 1.0, 0.0);
Camera[3] = vec4(CAM.x, 0.0, 0.0, 1.0);
vec4 point = vec4(VertexPosition.x, VertexPosition.y, VertexPosition.z, 1.0);
vec4 Transformed_Point = Camera * point;
gl_Position = Transformed_Point;
ColorValue.xyz = COR.xyz;
}
【问题讨论】:
-
我觉得自己像个笨蛋。我一直试图了解发生了什么 30 分钟。这让我发疯了。
-
将 RGB 的顶点颜色更改为 CAM.X、Y 和 Z。它应该是深红色
0x800000,看看你得到了什么。 -
i.gyazo.com/6c8a4b4feba8ed295c4b879f2fbcc05e.png 这个。 CAM.x 为 0.5,Y 和 Z 为 0,如颜色所示。但是不管怎样,三角形仍然没有像它应该的那样向右移动。
-
这似乎证实了 Nico 的回答。