pyopengl glVertexAttribPointer使用示例
时间: 2023-11-15 20:58:51 浏览: 31
glVertexAttribPointer函数是OpenGL中用于指定顶点属性数据的函数,示例如下:
假设我们有一个包含顶点位置和颜色信息的顶点数组,数组中每个元素包含3个float类型的位置坐标和3个float类型的颜色值。
```python
import numpy as np
from OpenGL.GL import *
vertices = np.array([
# position # color
-0.5, -0.5, 0.0, 1.0, 0.0, 0.0,
0.5, -0.5, 0.0, 0.0, 1.0, 0.0,
0.0, 0.5, 0.0, 0.0, 0.0, 1.0
], dtype=np.float32)
```
然后我们需要在OpenGL程序中指定如何读取这些数据。我们需要指定顶点数组中每个顶点的数据类型、每个顶点数据的步长、以及相应属性在每个顶点数据中的偏移量。
```python
# 获取顶点属性位置
pos_attr_loc = glGetAttribLocation(shader_program, 'position')
color_attr_loc = glGetAttribLocation(shader_program, 'color')
# 指定顶点属性数据
stride = 6 * sizeof(GLfloat)
glVertexAttribPointer(pos_attr_loc, 3, GL_FLOAT, GL_FALSE, stride, vertices)
glVertexAttribPointer(color_attr_loc, 3, GL_FLOAT, GL_FALSE, stride, ctypes.c_void_p(3 * sizeof(GLfloat)))
```
在上述代码中,我们首先通过 glGetAttribLocation 函数获取顶点着色器中 position 和 color 属性的位置。然后通过 glVertexAttribPointer 指定了顶点位置和颜色属性数据的读取方式。
第一个参数是顶点属性的位置。第二个参数是每个顶点属性的大小,这里顶点位置和颜色属性都是3个float类型的值,所以大小为3。第三个参数是数据类型,这里是float类型。第四个参数表示是否需要进行数据归一化,这里不需要,所以为GL_FALSE。第五个参数是每个顶点数据的步长,这里为6个float类型的值,所以步长为 6 * sizeof(GLfloat)。最后一个参数是相应属性在每个顶点数据中的偏移量,顶点位置属性在每个顶点数据中的偏移量是0,颜色属性在每个顶点数据中的偏移量是3个float类型的值,所以用 ctypes.c_void_p(3 * sizeof(GLfloat)) 表示。