Opengl 在GLSL中翻译Matriz won';不能处理变量

Opengl 在GLSL中翻译Matriz won';不能处理变量,opengl,glsl,Opengl,Glsl,所以。。。我做了一个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

所以。。。我做了一个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);
给我以下结果:

给了我以下结果:

即使凸轮x=0.5;凸轮y=0.0;凸轮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
,看看你得到了什么。这CAM.x为0.5,Y和Z为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;



}