在 GLSL 中翻译 Matriz 不适用于变量

Translating Matriz in GLSL won't work with variables

所以...我制作了这个 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;



}

您正在将相机位置作为顶点属性处理。这就是第一个顶点正确移动但其他两个顶点位于其原始位置的原因(因为它们的相机属性为零)。改用制服。