2010-10-08 81 views
0

有什么办法可以为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] 

... 

感谢每一个小暗示在哪里寻找什么。

回答

0

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

只有这种特殊映射的方法是将texcoords作为额外的缓冲区数据并使用gl_VertexID来获取它并解决你的映射。

见扩展texture_buffer_object