注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mississippi的博客

学习使人进步

 
 
 

日志

 
 

从零开始构建IOS的OpenGL应用(四)  

2012-08-15 12:49:54|  分类: Objective-C |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

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”。


  评论这张
 
阅读(8124)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017