【问题标题】:Translating Matriz in GLSL won't work with variablesGLSL 中的翻译矩阵不适用于变量
【发布时间】: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 的回答。

标签: opengl glsl


【解决方案1】:

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

【讨论】:

  • 上帝...非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
相关资源
最近更新 更多