目录
1.前言
由于网上的许多关于VBO的解析的文章很少(特别是关于Python),有许多文章写的很笼统,使许多人不知道VBO怎么使用,但它又很有必要(提高渲染效率,这在进行大量绘图时很有用),为了节省大家的时间,也为了让大家更好的了解和使用VBO,现在本文章将系统的讲解VBO。(由于本人还不是太熟悉,如果有什么问题,欢迎大家在评论区指正,请见谅)
2.开始玩转VBO
用PyOpenGL绘图时往往要处理几百个点,这时立即模式(使用glBegin/glEnd方式)就显得无能为力 (况且Python运行效率本来就慢), 这时VBO是最好的选择
VBO(顶点缓冲)是把我们要渲染的图元信息(比如纹理、颜色)一次性发送到GPU,和立即模式下相比,它的渲染效率显然更高 所以我们首选VBO进行大量绘图
VBO绘图流程:
1、创建顶点缓冲区对象 |
2、分离顶点混合数组 |
3,、绘制 |
4、解绑顶点缓冲区对象 |
2.1 准备工作
我们先导入库:
from OpenGL.GL import *
from OpenGL.arrays import vbo
from OpenGL.GLU import *
from OpenGL.GLUT import *
import numpy as np
2.2 创建顶点缓冲区对象
我们先以绘制正方体为例子,先定义一个函数(我定义的函数名是cube()),再在函数中写入正方体的顶点数据(坐标):
# 顶点集
vertices = np.array([
-0.5, 0.5, 0.5,
0.5, 0.5, 0.5,
0.5, -0.5, 0.5,
-0.5, -0.5, 0.5,
-0.5, 0.5, -0.5,
0.5, 0.5, -0.5,
0.5, -0.5, -0.5,
-0.5, -0.5, -0.5
], 'f')
# 索引集
indices = np.array([
0, 1, 2, 3,
4, 5, 1, 0,
3, 2, 6, 7,
5, 4, 7, 6,
1, 5, 6, 2,
4, 0, 3, 7
],'H')
#numpy数组类型很重要,否则你用不正确的数组绘图就会一片空白(本人真实经历)
在这里我解释一下索引集的作用:正方体有6个面,4个点构成一个面,则有24个点,但有16个点是重复的,索引值的作用类似于字串符的索引,你可以把顶点集的一组数据看做一个字符,索引值的每一个值为索引