openGL中使用混合数组(glInterLeavedArrays)

本文介绍如何使用OpenGL的glInterleavedArrays函数来绘制两条线,并详细解释了该函数的三个参数:mode(指定顶点数组及数据类型)、stride(顶点数据间隔)和pointer(指向顶点数组的指针)。通过具体代码示例展示了如何去除颜色数组以简化顶点数据。

void void drawTwoLineWithArray3()
{
GLfloat data[]= {1.0, 0.0, 0.0,25.0,25.0,0.0,
1.0, 0.0, 0.0,100.0,100.0,0.0,
0.0, 1.0, 0.0,120.0,120.0,0.0,
0.0, 1.0, 0.0,200.0,200.0,0.0};
glInterleavedArrays(GL_C3F_V3F,0,data);
glDrawArrays(GL_LINES,0,4);
}
glInterleavedArrays函数将会将会根据参数,激活各种顶点数组,并存储顶点。
现在去掉颜色的数组的话,代码如下
GLfloat data[]= {25.0,25.0,
100.0,100.0,
120.0,120.0,
200.0,200.0};
glInterleavedArrays(GL_V2F,0,data);
glDrawArrays(GL_LINES,0,4);
glInterleavedArrays函数有三个参数mode ,stride,pointer;
mode :指示 开启 哪些 顶点数组,以及 顶点数组 使用的 数据类型。
stride: 指示了(连续顶点之间的字节偏移量 )顶点 数据 之间的 间隔。一般为0
pointer: 指针,数组第一个顶点的第一个坐标的内存地址。

### PyOpenGL 中 VBO 的使用方法 当处理大量图形数据时,VBO(Vertex Buffer Object)提供了一种高效的方式将顶点数据存储于显存中。这不仅提高了性能,而且减少了CPU与GPU之间的通信开销[^1]。 对于PyOpenGL中的VBO实现,通常涉及以下几个方面: #### 创建并绑定VBO 创建一个VBO对象,并将其绑定到当前上下文中以便后续操作。 ```python from OpenGL.arrays import vbo import numpy as np data = np.array([ # Vertex Positions ], dtype=np.float32) vbo_id = glGenBuffers(1) glBindBuffer(GL_ARRAY_BUFFER, vbo_id) glBufferData(GL_ARRAY_BUFFER, data.nbytes, data, GL_STATIC_DRAW) ``` #### 设置顶点属性指针 指定如何解释VBO内的数据结构,例如位置、法线向量等。 ```python stride = 6 * 4 # 如果每组有六个浮点数表示(x,y,z,r,g,b),则步长为24字节 offset_position = ctypes.c_void_p(0) offset_color = ctypes.c_void_p(3*4) glEnableVertexAttribArray(0) # 启用第0个通用顶点属性数组 glVertexAttribPointer( 0, 3, # size of the vertex coordinates (x,y,z) GL_FLOAT, False, stride, offset_position # 偏移量指向位置坐标起始处 ) glEnableVertexAttribArray(1) # 启用第1个通用顶点属性数组用于颜色 glVertexAttribPointer( 1, 3, # 颜色由三个分量组成(r,g,b) GL_FLOAT, False, stride, offset_color # 偏移量指向颜色信息起始处 ) ``` #### 绘制几何形状 通过调用`glDrawArrays()`或`glDrawElements()`来渲染已定义好的几何体。 ```python glDrawArrays(GL_TRIANGLES, 0, count_of_vertices) # 或者如果使用索引绘制,则采用如下方式: glDrawElements(GL_TRIANGLES, indices_count, GL_UNSIGNED_INT, None) ``` 为了展示不同类型的物体,还可以利用`glInterleavedArrays()`函数简化设置过程,它允许混合不同类型的数据流如颜色和顶点位置[^4]。 最后,在实际应用中,建议结合pygame或其他窗口管理库一起工作,以获得更好的用户体验[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值