如何从顶点着色器中的vec3获取值? OpenGL 3.3

时间:2015-01-17 09:07:29

标签: c++ opengl glsl vertex-shader

我有以下顶点着色器:

#version 330                                                                      
layout (location = 0) in vec3 Position;                                           
uniform mat4 gWVP;                                                                
out vec4 Color;
void main()                                                                       
{                                                                                 
    gl_Position = gWVP * vec4(Position, 1.0);                     
};

如何获得vec3的第三个值?我的第一个想法是:“也许我可以通过将这个向量(位置)乘以某个东西得到它?”但我不确定是否存在类似“垂直矢量类型”的东西。 那么,最好的方法是什么?我需要这个值来设置像素的颜色。

2 个答案:

答案 0 :(得分:8)

至少有4个选项:

  1. 您可以使用组件名称xyzw访问矢量组件。这主要用于表示点/向量的向量。在您的示例中,这将是Position.z
  2. 您可以使用组件名称rgba。这主要用于表示颜色的矢量。在您的示例中,您可以使用Position.b,即使这不是非常易读。另一方面,Color.b对于另一个变量来说是个不错的选择。
  3. 您可以使用组件名称stpq。这主要用于表示纹理坐标的矢量。在我们的示例中,Position.p也会为您提供第3个组件。
  4. 您可以使用带有0的索引的下标表示法。在您的示例中,Position[2]也给出了第3个元素。

答案 1 :(得分:6)

每个向量都重载了对元素的访问权限。在这种情况下,使用Position.z应该有效。