opengl碗状_OpenGL(试用篇)——第一个OpenGL程序(2)

2画个三角形

绘制三角形时,要用到顶点缓存(VBO)的知识。个人感觉,这部分已经是GL比较中级的知识了。所以这里不做详细解释,也不拿VBO和顶点数组(VA)和显示列表作对比。我觉得,像GL这种实践性很强的技术,还是先动手把效果实现了再说。《OpenGL超级宝典》之所以提供GLTools,就是想先把复杂的原理屏蔽掉,让初学者能快速实现效果,随着程序写的越多,有些原理自然而然就理解了。否则,一开始就灌输那么多原理的东西,但连个最基本的三角形都画不出来,我想大多数人都会很快失去兴趣,尤其是像DirectX和OpenGL这种偏底层的技术。

所以,这里我只简单说一下VBO的作用。VBO全名Vertex Buffer Object——顶点缓存对象。它的作用就是存储顶点的一系列属性,比如顶点的位置,颜色,法线,纹理坐标等等。GL在绘制的过程中,就是根据VBO的数据把图形画出来。

2.1顶点,快到碗里来~

2.1.1创建VBO

既然,VBO是存储顶点的属性,那首先得有碗吧。

所以,第一步就是创建VBO

voidglGenBuffers(GLsizein,GLuint*buffers);

n:要产生的VBO的数量

buffers:存储VBO的句柄。

PS:GLsizei=intGLuint= unsignedint

有人会问,干嘛这么麻烦,直接用int不就好了。OpenGL是跨平台的API,所以要兼顾各个平台,所以自己重新定义了类型。这个知道就行,建议养成用GL专有类型的好习惯。

2.1.2绑定VBO

voidglBindBuffer(GLenumtarget,GLuintbuffer);

绑定一个缓冲区对象。

target:可能取值是:GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, or GL_PIXEL_UNPACK_BUFFER.

我们现在主要使用GL_ARRAY_BUFFER和GL_ELEMENT_ARRAY_BUFFER。

GL_ARRAY_BUFFER用于保存之前说的,顶点的各种属性

GL_ELEMENT_ARRAY_BUFFER用于保存顶点索引,这个在以后用顶点索引模型绘制时会用到。

当进行绑定之后,以前的绑定就失效了。

在绑定的同时,也将该缓存设置成当前缓存。GL对缓存的一切操作,都是对当前缓存有效。

PS:这么做的原因,是因为OpenGL采用状态机的模式。glBindBuffer就是讲GL的缓存模式切换到当前缓存。可能,习惯面向对象的人不习惯这种模式。GL是一种C语言API,所以GL中并没有真正的对象改变。GL中的对象,实际上就是一个int类型的标识符,对于熟悉Windows编程的朋友来说,也就是所谓的句柄。所以,GL要对使用或者改变某对象,采用的就是绑定该对象句柄的方式。而不是,C++的真正类,可以直接调用对象的成员方法。

2.1.3为VBO填充数据

选择好要操作的VBO之后,就要为VBO装数据,这里的数据,可以是顶点位置,顶点颜色等等

voidglBufferData(GLenum target,GLsizeiptrsize,constGLvoid* data,GLenum usage);

target:和之前glBindBuffer中的target含义是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值