顶点位置三元组如何映射到着色器中的vec4?

时间:2012-04-02 14:03:29

标签: opengl-es glsl shader webgl vertex-shader

我正在尝试使用spidergl从已经implements的示例代码实现webgl阴影映射。我正试图直接在WebGL上实现它。

我相信我的代码几乎相似,但我没有得到结果。我已将问题缩小到代码的一小部分。我的着色器代码将a_position(顶点位置属性)定义为vec3;而spidergl代码将其定义为vec4。我梳理了spidergl代码,以了解他们的顶点位置属性(x-y-z三元组)是如何填充到vec4中的。我期望在调用vertexAttribPointer时找到技巧。但是它们传递的大小和步幅的值正如预期的那样:3和12.我改变了我的代码来做同样的事情,但我还没有得到相同的结果。

有人可以解释位置三元组映射到vec4的基本机制吗?我从来没有看到代码也提到过多维数据集角落的x,y,z坐标,但有些着色器将a_position作为vec4。那么什么被填充到vec4的第四个浮点?

1 个答案:

答案 0 :(得分:3)

glVertexAttrib文档的这一部分可能会让您感兴趣:

  

这些命令可用于指定索引指定的通用顶点属性的一个,两个,三个或全部四个组件。

     

命令名称中的 1 表示只传递了一个值,它将用于修改通用顶点属性的第一个组件。第二个和第三个组件将设置为0,第四个组件将设置为1.

     

同样,命令名称中的 2 表示为前两个组件提供了值,第三个组件将设置为0,第四个组件将设置为1。

     

命令名称中的 3 表示为前三个组件提供了值,第四个组件将设置为1,而 4 name表示为所有四个组件提供了值。

基本上,如果使用vec3设置vec4属性,则vec4的前3个元素与vec3匹配,第4个元素设置为1.

我的猜测是您的问题出现在代码中的其他位置。