导航: 首页 > 网络技术 > 走读iphone游戏开发示例代码 发表于:2024-11-25 作者:热门IT资讯网编辑 编辑最后更新 2024年11月25日,自定义ViewController中存在两组方法,第一组为:viewDidLoad;viewDidUnload;didReceiveMemoryWarningshouldAutorotateToInt 自定义ViewController中存在两组方法,第一组为:viewDidLoad;viewDidUnload;didReceiveMemoryWarningshouldAutorotateToInterfaceOrientation这组方法为view的通用方法,方法的定义在UIViewController接口中。第二组为:updatedrawInRectsetupGLtearDownGLloadShaderscompileShaderlinkProgramvalidateProgram这组方法为利用opengl绘图。其中update、drawInRect方法为系统回调方法,其余为opengl的基础操作方法。如图1所示,跟踪程序发现,整个架构底层是一个timer,定时调用GLKViewController的 _updateAndDraw方法,而在_updateAndDraw方法中会依次调用到drawInRect和update方法。其中drawInRect方法的主要逻辑是绘图,并返回一个 GLKView;update方法主要用于更新游戏信息;其中drawInRect方法也可以在自定义的view中实现,这样应该至少可以方便地实现同一游戏逻辑下可以使用不同的渲染效果。图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.htmlhttp://zh.wikipedia.org/wiki/GLSLhttp://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html¬ 很赞哦! 转载请说明来源于"热门IT资讯网" 本文地址:https://www.492034.com/a458238 相关文章 微信自带浏览器跳转appstore失效 PHP接收get、post 、json格式数据 Yii2.0框架Restfull API开发攻略 PHP 安装于配置 App上传应用市场的步骤有哪些能上传哪些应用市场 unity3D与网页的交互---做项目的一点总结 人工智能学习难度大吗 选择Python入门怎么样 原来按下这个按钮,iPhone手机秒变扫描仪,你不会还不知道 auto_mysqldump_data.sh 利用curl监控web返回状态码监控web service