OpenGL glVertexAttribPointer 正常
Posted
技术标签:
【中文标题】OpenGL glVertexAttribPointer 正常【英文标题】:OpenGL glVertexAttribPointer normal 【发布时间】:2014-09-04 04:16:35 【问题描述】:假设我正在渲染一个 3d GL_TRIANGLE。该对象需要 3 个顶点才能定义:A、B、C。我将这些数据放入缓冲区并通过 glVertexAttribPointer 将其绑定到着色器。
现在我想将法线传递给着色器。对于每个三角形,应该有 1 个法线向量,但如果我尝试通过 glVertexAttribPointer 将其传递,我需要为点 A、B、C 定义相同的法线 3 次。 是否可以在 glVertexAttribPointer 中每隔 3 个其他顶点传入 1 个顶点以避免这种情况?
或者将它传递给所有顶点是否是个好主意?
【问题讨论】:
这不容易。如果不同属性的数组不匹配,则需要为每个属性设置单独的索引数组,以将属性分配给顶点。这是不支持的。我在这里对类似问题的回答对此进行了详细说明:***.com/questions/25349620/…. 【参考方案1】:现在我想将法线传递给着色器。对于每个三角形应该有 1 个法线向量
不,有 3 个法线。每个顶点一个。
是否可以在 glVertexAttribPointer 中每隔 3 个其他顶点传入 1 个顶点以避免这种情况?
不可以,因为顶点属性是一起的,不能分开。
或者将它传递给所有顶点是否是个好主意?
当然。让每个人的生活更轻松。
【讨论】:
好的。还有最后一个相关的小问题。我正在尝试将元素缓冲区用于高度图(定义一次所有点并使用 GL_ELEMENT_ARRAY 绘制它们)。但是,使用这种方法似乎没有空间计算法线并将法线放入顶点缓冲区。对于这样的结构,我如何能够存储和传递法线? @sgtHale:对于高度图,您无论如何都不想拥有面部法线。您需要每个顶点法线,其中每个顶点的法线是该顶点所属的面的法线的平均值。 @sgtHale:请注意,如果您想要平坦的阴影效果(导致多面外观),您可以指定某些顶点属性不应插入到面上;使用该集合,仅考虑为面的第一个顶点指定的值。如果您考虑一下,顶点和面之间存在严格的偏移,这意味着您可以简单地将每个面的法线分配给顶点,并且事情会按预期工作。以上是关于OpenGL glVertexAttribPointer 正常的主要内容,如果未能解决你的问题,请参考以下文章