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

时间:2015-07-31 07:50:59

标签: opengl glsl

所以...我制作了这个mat4 matriz,可以根据坐标转换三角形。我意识到,使用以下matriz,三角形将转换为屏幕右侧:

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中的翻译matriz看起来像这样:

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);

给我以下结果:enter image description here

    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);

给了我以下结果:enter image description here

即使CAM.x = 0.5; CAM.y = 0.0; CAM.z = 0.0。 (如果CAM的值是正确的,我通过更改其中一个顶点的红色来检查顶点着色器内部。通过添加以下代码:if(CAM.x == 0.5) ColorValue.x = 0.0;我得到以下结果:enter image description here) 。这怎么可能?

顺便说一下,这是整个顶点代码:

#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;



}

1 个答案:

答案 0 :(得分:2)

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