2

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

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

有人可以解释位置三元组映射到的基本机制vec4吗?我从未见过同时提到 w 以及立方体角的 x,y,z 坐标的代码,但是有些着色器采用a_positionas vec4。那么 vec4 的第四个浮点数填充了什么?

4

1 回答 1

3

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

这些命令可用于指定由index指定的通用顶点属性的一个、两个、三个或所有四个组件。

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

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

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

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

我的猜测是你的问题在你的代码中的其他地方。

于 2012-04-02T15:45:35.210 回答