将顶点数据写入通用的顶点属性存储区 VBO

四、将顶点数据写入通用的顶点属性存储区

1、写入过程

首先将数据保存进GUP的一个缓冲区中,然后再按一定规则,将数据取出,复制到各个通用顶点属性中。

注:如果顶点数据只有一种类型(如单纯的位置坐标),换言之,在读数据时,不需要确定第一个数据的内存位置(总是从0开始),则不必事先保存进缓冲区。


2、顶点数组保存进缓冲区

从零开始构建IOS的OpenGL应用(四) - mississi - mississi的博客
 

这几行代码表示的含义是:声明一个缓冲区的标识(GLuint类型)àOpenGL自动分配一个缓冲区并且返回这个标识的值à绑定这个缓冲区到当前“Contextà最后,将我们前面预先定义的顶点数据“squareVertexData”复制进这个缓冲区中。

注:参数“GL_STATIC_DRAW”,它表示此缓冲区内容只能被修改一次,但可以无限次读取。


3、将缓冲区的数据复制进通用顶点属性中

从零开始构建IOS的OpenGL应用(四) - mississi - mississi的博客
 

首先,激活顶点属性(默认它的关闭的)。“GLKVertexAttribPosition”是顶点属性集中“位置Position”属性的索引。

顶点属性集中包含五种属性:位置、法线、颜色、纹理0,纹理1

它们的索引值是04

激活后,接下来使用“glVertexAttribPointer”方法填充数据。

参数含义分别为:

顶点属性索引(这里是位置)、3个分量的矢量、类型是浮点(GL_FLOAT)、填充时不需要单位化(GL_FALSE)、在数据数组中每行的跨度是32个字节(4*8=32。从预定义的数组中可看出,每行有8GL_FLOAT浮点值,而GL_FLOAT4个字节,因此每一行的跨度是4*8)。

最后一个参数是一个偏移量的指针,用来确定“第一个数据”将从内存数据块的什么地方开始。


4、继续复制其他数据

在前面预定义的顶点数据数组中,还包含了法线和纹理坐标,所以参照上面的方法,将剩余的数据分别复制进通用顶点属性中。

从零开始构建IOS的OpenGL应用(四) - mississi - mississi的博客
 

原则上,必须先“激活”某个索引,才能将数据复制进这个索引表示的内存中。

因为纹理坐标只有两个(ST),所以上面参数是“2”。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值