顶点和纹理坐标的缓冲区大小不同?

Posted

技术标签:

【中文标题】顶点和纹理坐标的缓冲区大小不同?【英文标题】:Different size of Buffers for Vertex and Texture Coordinates? 【发布时间】:2010-10-08 20:00:58 【问题描述】:

有没有办法为 glDrawElements 使用不同大小的缓冲区?我想以某种方式将顶点映射到纹理坐标,以便纹理坐标缓冲区实际上能够小于顶点缓冲区。

示例:顶点缓冲区有 16 个顶点,纹理坐标缓冲区有 6 个顶点。

vertex_buffer[0] -> texture_coordinates_buffer[0]
vertex_buffer[1] -> texture_coordinates_buffer[1]
vertex_buffer[2] -> texture_coordinates_buffer[2]

vertex_buffer[3] -> texture_coordinates_buffer[3]
vertex_buffer[4] -> texture_coordinates_buffer[1]
vertex_buffer[5] -> texture_coordinates_buffer[2]

...

感谢您提供的每一个小提示。

【问题讨论】:

【参考方案1】:

您不能在 OpenGL(或 Direct3D)中做到这一点。属性数组中的元素数量必须全部相等,例如如果你有一个由 64 个顶点组成的 VBO,你将需要有 64 个 texcoords、64 个法线等。

拥有此特定映射的唯一方法是将 texcoords 作为额外的缓冲区数据传递并使用 gl_VertexID 获取它并解析您的映射。

见分机texture_buffer_object。

【讨论】:

以上是关于顶点和纹理坐标的缓冲区大小不同?的主要内容,如果未能解决你的问题,请参考以下文章

在OpenGL ES(Android)中使用带纹理的索引缓冲区有什么意义吗?

从帧缓冲区对象读取时,OpenGL 纹理坐标是相反的

在 OpenGL ES 1.1 中使用顶点缓冲区对象绘图不起作用

OpenGL 纹理坐标没有影响

一个 VBO 可以绑定多个 VAO 吗?

使用 Alpha 渲染纹理的问题