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

Opengl es 顶点位置三元组如何映射到着色器中的vec4?,opengl-es,glsl,shader,webgl,vertex-shader,Opengl Es,Glsl,Shader,Webgl,Vertex Shader,我试图从一个已经使用spidergl实现的示例代码中实现webgl阴影映射。我试图直接在WebGL上实现它 我相信我有几乎相似的代码,但我没有得到结果。我已经把问题缩小到代码的一小部分。我的着色器代码将a_位置(顶点位置属性)定义为vec3;而spidergl代码将其定义为vec4。我仔细阅读了spidergl代码,以了解它们的顶点位置属性(即x-y-z三元组)是如何填充到vec4中的。我希望在调用VertexAttributePointer中找到窍门。但是他们通过的大小和步幅值与预期的一样:3

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

我相信我有几乎相似的代码,但我没有得到结果。我已经把问题缩小到代码的一小部分。我的着色器代码将
a_位置
(顶点位置属性)定义为vec3;而spidergl代码将其定义为vec4。我仔细阅读了spidergl代码,以了解它们的顶点位置属性(即x-y-z三元组)是如何填充到vec4中的。我希望在调用VertexAttributePointer中找到窍门。但是他们通过的大小和步幅值与预期的一样:3和12。我改变了我的代码来做同样的事情,但是我还没有得到同样的结果


有人能解释一下位置三元组映射到
vec4
的基本机制吗?我从未见过代码也提到w以及立方体角的x、y、z坐标,但有些着色器将
a_位置
作为
vec4
。那么,vec4的第四个浮点数中填充了什么?

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

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

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

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

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

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

我猜您的问题在代码的其他地方。

+1供思考。我本来会在GLSL规范中看到这一点,但仔细想想,它并不真正属于GLSL规范。