【问题标题】:How to get a value from vec3 in vertex shader? OpenGL 3.3如何从顶点着色器中的 vec3 获取值? OpenGL 3.3
【发布时间】:2015-01-17 09:07:29
【问题描述】:

我有以下顶点着色器:

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

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

【问题讨论】:

  • 这是什么语言?
  • OpenGL 着色语言。
  • @Cheersandhth.-Alf:该语言称为GLSL; glsl 标签和提及 OpenGL Shaders 应该给出很多提示。

标签: c++ opengl glsl vertex-shader


【解决方案1】:

至少有 4 个选项:

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

【讨论】:

    【解决方案2】:

    每个向量都有对元素的重载访问。在这种情况下,使用Position.z 应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 2011-09-26
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多