走读iphone游戏开发示例代码-创新互联

自定义ViewController中存在两组方法,第一组为:

创新互联建站公司2013年成立,是专业互联网技术服务公司,拥有项目网站设计制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元莒县做网站,已为上家服务,为莒县各地企业和个人服务,联系电话:028-86922220

viewDidLoad;

viewDidUnload;

didReceiveMemoryWarning

shouldAutorotateToInterfaceOrientation

这组方法为view的通用方法,方法的定义在UIViewController接口中。

第二组为:

update

drawInRect

setupGL

tearDownGL

loadShaders

compileShader

linkProgram

validateProgram

这组方法为利用opengl绘图。其中update、drawInRect方法为系统回调方法,其余为opengl的基础操作方法。如图1所示,跟踪程序发现,整个架构底层是一个timer,定时调用GLKViewController的 _updateAndDraw方法,而在_updateAndDraw方法中会依次调用到drawInRect和update方法。其中drawInRect方法的主要逻辑是绘图,并返回一个 GLKView;update方法主要用于更新游戏信息;其中drawInRect方法也可以在自定义的view中实现,这样应该至少可以方便地实现同一游戏逻辑下可以使用不同的渲染效果。

走读iphone游戏开发示例代码

图1

第二组的其余方法揭示了opengl的基本使用方法:

1.EAGLContext 是包含opengl绘图时所涉及到的状态信息、命令、资源的上下文环境。从代码中看,程序把生成的EAGLContext先后挂接到GLKView和opengl层,挂接的方法分别是

GLKView *view = (GLKView *)self.view;

view.context = self.context;

[EAGLContext setCurrentContext:self.context];

2.代码中展示了两种opengl渲染方式,一种是使用GLKit渲染,另一种是使用ES2。

使用GLKit渲染的核心想法是使用GLKBaseEffect简化对opengl的调用,你可以通过GLKBaseEffect的若干属性对渲染方式进行设定,并在使用opengl渲染之前调用如下方法

[self.effect prepareToDraw];

ES2方式是基于GLSL的,它可以动态加载、编译、执行GLSL编写的渲染脚本,其大致的调用顺序如下:

1)创建程序对象

通过glCreateProgram创建程序对象。

2)编译shader

通过glCreateShader创建一个shader对象

读取shaker脚本内容,并通过glShaderSource把内容与之前创建的shader对象关联上,读取文件内容可以通过stringWithContentsOfFile方法实现。

通过glCompileShader方法编译shader。

通过glGetShaderiv,传入GL_COMPILE_STATUS参数可以查看编译状态。

3)链接shader

使用glLinkProgram方法可以链接shader程序。

在链接shander程序之前还必须做两样事情:一个是通过glAttachShader方法把程序对象与编译好的shader对象做关联;另一个是通过glBindAttribLocation方法设置属性位置,这个是方便系统在之后解析绑定数据的时候可以按照正确的约定读取属性信息。

通过glGetShaderiv,传入GL_LINK_STATUS参数可以查看链接状态。

4)运行shader

在绘制的逻辑中,使用glUseProgram方法可以把程序对象关联到opengl绘图上下文中

通过glUniformMatrix4fv可以传递参数到shader中,具体传递的是哪个参数由该方法的第一个参数决定,而第一个参数的具体值可以在链接shader之后调用glGetUniformLocation获取。

做好了上述一切,在调用opengl的绘制方法时,底层会直接使用shader进行绘制。

ps:

1.opengl对外暴漏的是类c语言的接口方式,它按照下面的思维方式处理对象。

1)用户可以通过系统函数创建一些对象,返回给用户的只是对象的一个句柄,在opengl里用GLuint类型表示。

2)在调用对象相关方法时有两种方案,一种是使用方法的参数(一般是第一个参数)指定要操作哪个对象;另一种是通过一些bind方法,把对象绑定在系统底层的环境上下文中,此后所有的函数调用就都跟之前绑定的对象相关。

参考资料:

http://www.ityran.com/article-80-1.html

http://zh.wikipedia.org/wiki/GLSL

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


网站栏目:走读iphone游戏开发示例代码-创新互联
地址分享:http://pwwzsj.com/article/cdsipc.html