[英]Pyopengl - VBO with texture
我使用Python 3.6。 最初,我使用如下代码:
array_to_texture(self.board)
glColor3fv((1.0, 1.0, 1.0))
glBegin(GL_QUADS)
for vertex, tex in zip(self.POINTS, self.TEX):
glTexCoord2f(*tex)
glVertex3fv(vertex)
glEnd()
而且有效。 它在3D空间中绘制带有纹理的正方形。
现在,我想使用VBO来解决问题。 可以使用以下代码绘制墙壁(具有固定的颜色):
vbo = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, len(vertices) * 4, (c_float * len(vertices))(*vertices), GL_STATIC_DRAW)
glVertexPointer(3, GL_FLOAT, 0, None)
glDrawArrays(GL_QUADS, 0, 4)
那很好。 主要问题是,如何使用这种方法附着和绘制纹理? 如何为纹理坐标创建某种缓冲区并使用它? 我真的很难找到一些最小的工作示例。
较小的问题是 ,即使在文档中不允许使用GL_QUADS, http ://pyopengl.sourceforge.net/documentation/manual-3.0/glDrawArrays,glDrawArrays glDrawArrays(GL_QUADS, 0, 4)
行怎么可能工作。 HTML
请参阅OpenGL 4.6 API兼容性配置文件规范; 10.3.3为固定功能属性指定数组; 第402页
命令
void VertexPointer( int size, enum type, sizei stride, const void *pointer ); void NormalPointer( enum type, sizei stride, const void *pointer ); void ColorPointer( int size, enum type, sizei stride, const void *pointer ); void SecondaryColorPointer( int size, enum type, sizei stride, const void *pointer ); void IndexPointer( enum type, sizei stride, const void *pointer ); void EdgeFlagPointer( sizei stride, const void *pointer ); void FogCoordPointer( enum type, sizei stride, const void *pointer ); void TexCoordPointer( int size, enum type, sizei stride, const void *pointer );
指定数组的位置和组织,以存储顶点坐标,法线,颜色,辅助颜色,颜色索引,边缘标志,雾坐标。
...
通过调用以下命令之一来启用或禁用单个数组
void EnableClientState( enum array ); void DisableClientState( enum array );
将数组设置为
VERTEX_ARRAY
,NORMAL_ARRAY
,COLOR_ARRAY
,SECONDARY_COLOR_ARRAY
,INDEX_ARRAY
,EDGE_FLAG_ARRAY
,FOG_COORD_ARRAY
或TEXTURE_COORD_ARRAY
,分别用于顶点,法线,颜色,辅助颜色,颜色索引,边缘标记,雾坐标或纹理。
这意味着可以由glVertexPointer
指定顶点坐标,并由glEnableClientState(GL_VERTEX_ARRAY)
启用
glVertexPointer(3, GL_FLOAT, 0, None)
glEnableClientState(GL_VERTEX_ARRAY)
可以通过glTexCoordPointer
指定纹理材质,并通过glEnableClientState(GL_TEXTURE_COORD_ARRAY)
启用纹理材质
glTexCoordPointer(3, GL_FLOAT, 0, None)
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.