OpenGL ES 2.0 每个顶点使用多个法线向量

Posted

技术标签:

【中文标题】OpenGL ES 2.0 每个顶点使用多个法线向量【英文标题】:OpenGL ES 2.0 using multiple normal vectors per vertex 【发布时间】:2014-02-26 20:17:49 【问题描述】:

显然是 OpenGL 的新手 我想知道是否可以使用每个顶点具有多个法线向量的 VBO。我当前的顶点数组顺序如下:

j = [x,y,z,r,g,b,a,n1x,n1y,n1z,n2x,n2y,n2z,n3x,n3y,n3z....]

此方法要求着色器区分使用哪个法线向量,这是导致问题的原因。任何建议都会很棒。

还在寻找有关使用多个 IBO 和 VBO 的教程,大多数教程似乎只使用一个。

【问题讨论】:

它在哪里造成了什么问题?你能补充一下这些细节吗? 欢迎来到 SO!如果您可以更具体地了解您遇到的问题类型,我们会更容易回答您的问题。你在每个顶点使用多个法线做什么,在着色器中选择它们有什么问题? 【参考方案1】:

您可以通过向 glVertexAttribPointer() 提供不同的步幅来使其交错工作,例如,它是如何处理顶点和纹理坐标的不同数据量的。或者,您可以对顶点、法线和纹理坐标使用单独的 VBO,而不是将它们交错。

您可以在 PowerVR SDK 中找到使用 VBO 的更好示例,该 SDK 可从以下网址免费下载:

http://www.imgtec.com/powervr/insider/sdkdownloads/

【讨论】:

感谢您的回复,我发现最简单的方法是只要顶点的法线发生变化(也就是 3d 对象的角)就重复该顶点。它使 GLSL 逻辑更容易。我还将研究 PowerVR SDK。

以上是关于OpenGL ES 2.0 每个顶点使用多个法线向量的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android上使用OpenGL ES 2.0绘制点

如何使用用于 iPhone 开发的 OpenGL ES 渲染 3D 对象(顶点和法线存储在头文件中)?

iOS 上的 OpenGL ES 多个没有索引的 VBO

OpenGL ES 2.0 渲染管线 学习笔记

OpenGL ES 2.0 顶点数据错误

OpenGL ES 2.0 符点精度