[英]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.