GLSL矢量问题

时间:2012-03-22 13:03:47

标签: opengl glsl

在OpenGL GLSL语法中,向量的组件之间是否有任何区别? 我的意思是,对于给定的vec3,xyzw,rgba和stpq,它们之间是否有任何真正的差异,或者只是一个帮手? 因此,如果我将颜色值设置为vec3,我认为虽然为了清楚地阅读我会使用rgba,xyzw会给出相同的值,对吗?

3 个答案:

答案 0 :(得分:3)

实际上,我不确定它是如何实现的,但我认为它可能是某种联盟,在这种情况下,写入一个并从另一个中读取并不能保证有效。

编辑:以上评论适用于一般的工会(C / C ++),但GLSL中的情况可能有所不同。链接:http://www.opengl.org/wiki/GLSL_Types#Swizzling表示:

“你可以使用xyzw,rgba(用于颜色)或stpq(用于纹理坐标)。这三组没有实际差异;它们只是语法糖。”

正如评论中提到的@tito,它只是合成糖,可以混合使用。 (虽然在一次调用中没有混合,例如xyga无效)

答案 1 :(得分:2)

我认为这只是一个帮手所以

vec.xyzw = vec.rgba = vec.stpq 

等等。您可以使用您想要的任何设置,只是不能混合像

这样的设置
vec3 pos;
pos.xgb = vec3(1,1,1);  // not valid do to mixing the sets

答案 2 :(得分:0)

来自Kronos.org - 数据类型(GLSL):

  

您可以使用xyzw,rgba(用于颜色)或stpq(用于纹理坐标)。这三组没有实际差异;他们只是语法糖。 https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Vectors

这是GLSL提供的许多方便功能之一,可以使矢量操作更加灵活,例如Swizzling