`
java-mans
  • 浏览: 11710455 次
文章分类
社区版块
存档分类
最新评论

iOS开发与OpenGL ES相关问题整理(1)

 
阅读更多

转载自:http://www.bennychen.cn/2011/05/ios开发与opengl-es相关问题整理(1)/

在极其有限的工作日的晚上和周末进行着iOS上game programming的研究,进展非常缓慢,不过还是有必要将过程中的一些问题随时记录下来。

  • OpenGL ES崩溃在函数’glMatrixMode’

    这很有可能是因为在OpenGL ES2的context中使用OpenGL ES1的函数,ES1是固定函数渲染管线 (fixed function pipeline),而ES2是可编程的渲染管线 (programmable pipeline),ES2不再支持这些ES1的固定渲染管线的函数, 比如’glMatrixMode’。所以当ES2遇到这些不支持的ES1函数时,你的程序会收到一个’EXC_BAD_ACCESS’消息并且崩溃。通过gdb查看callstack,显示最后一个函数是gliUnimplemented:

    1 #0 0x0b05c0e5 in gliUnimplemented ()
    2 #1 0x00a1c6c3 in glMatrixMode ()

    如果一定要使用ES1函数, 你只能以ES1来初始化你的GL context:

    1 EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
  • 函数’pathForResource’返回nil

    需要将资源文件添加到项目的’Groups & Files’中

  • OpenGL ES崩溃在绘制函数’glDrawArrays’

    这可能是因为你启动了GL的某个渲染状态(比如vertex,color,texture coordinate等等,这里有所有可能状态的清单),但是却没有在绘制函数(比如’glDrawArray’)进行之前,设置该状态所对应的数据指针。

    比如说:

    1 glEnableClientState( GL_COLOR_ARRAY );
    2 glColorPointer( 4, GL_UNSIGNED_BYTE, 0, youColorArray );

    对于上面这两句代码,如果你设置了使用color数组,但是却没有设置color数组指针,在真正的绘制时你的程序就会因为找不到对应的指针而崩溃。同样的, 如果你调用了‘glEnableClientState(GL_TEXTURE_COORD_ARRAY), 则你也需要通过glTexCoordPointer()设置纹理坐标的数组指针,如此类推。

  • 怎么样通过OpenGL ES以像素为单位来绘制,而不是屏幕比例?

    在iPhone上通过OpenGL ES进行2D绘制时,默认的原点位置在屏幕中央,并且屏幕的坐标范围依次是从-1到1,不管是横轴还是纵轴。如下图所示,GL中的默认的单位1分别代表着屏幕长度和宽度的一半。

    图片来自book: ‘Learning iOS Game Programming_A Hands-On Guide to Building Your First iPhone Game
    如果希望将原点移动到屏幕左下角,并且绘制时希望以像素为单位,只需要通过glOrthof函数将投影矩阵设置成一个垂直投影矩阵即可,代码如下:

    1 glMatrixMode(GL_PROJECTION);
    2 glLoadIdentity();
    3 glOrthof( 0, framebufferWidth, 0, framebufferHeight, -1, 1 );

  • 分享到:
    评论

    相关推荐

      OpenGLES应用开发实践 指南 iOS卷

      OpenGL ES应用开发实践 指南 iOS卷中文版一本;适合有mac开发环境的学习OpenGL ES;适合有iOS开发者的学习OpenGL ES!!

      OpenGL ES应用开发实践指南 iOS 源码

      opengl es应用开发实践指南ios卷源码,包含所有章节代码

      opengl es应用开发实践指南 ios+android卷 pdf 带索引

      opengl es移动端开发的不二选择,为了方便大家下载,本人将opengl es应用开发实践指南 ios卷和opengl es应用开发实践指南 android卷pdf打包上传,均带索引,方便大家查阅,省去大家找资料的麻烦。

      OpenGL ES应用开发实践 指南 iOS卷.pdf

      第9章介绍能够提高ios设备上opengl es 2.0渲染性能的优化策略;第10章讲解了地形和拾取;第11章回顾了3d渲染所需的常见数学运算;第12章涵盖了一个结合地形渲染、天空盒、粒子系统、动画、变化视点、灯光、模型和...

      opengles programming guide for iOS

      OpenGLES编程指南iOS版是一本专注于在iOS和Mac平台下使用OpenGL ES进行图形编程的指南。OpenGL ES是一种在移动设备和嵌入式系统上广泛使用的图形API,它是OpenGL的简化版,用于二维和三维图形渲染。本书重点介绍在...

      OpenGL ES应用开. IOS卷

      由资深iOS开发专家根据OpenGL ES最新版本撰写,不仅详细讲解了OpenGL ES与GLKit的结合使用,而且还系统讲解OpenGL ES的核心概念、技术,以及iOS的图形机制,并通过大量案例讲解了在iOS上进行OpenGL ES开发的方法和...

      OpenGL ES应用开发实践指南 iOS卷.pdf 高清带索引

      OpenGL ES应用开发实践指南 iOS卷.pdf 高清带索引

      OpenGL ES应用开发实践指南 iOS卷PDF

      由资深iOS开发专家根据OpenGL ES最新版本撰写,不仅详细讲解了OpenGL ES与GLKit的结合使用,而且还系统讲解OpenGL ES的核心概念、技术,以及iOS的图形机制,并通过大量案例讲解了在iOS上进行OpenGL ES开发的方法和...

      Pro OpenGL ES for iOS

      Pro OpenGL ES for iOS 专业开发iOS OpenGL ES的书。

      iOS使用OpenGLes绘制地球

      在iOS上使用OpenGLes模拟月球绕地球公转,iOS OpenGLes图形开发入门必看,iOS开发进阶资源

      ios-openGLES.zip

      这个“ios-openGLES.zip”压缩包显然聚焦于利用OpenGL ES进行图片纹理处理和旋转动画的实现。下面我们将深入探讨这两个核心概念。 一、图片纹理 图片纹理是OpenGL ES中的基本元素,它们用于在3D模型或2D平面上绘制...

      Learning OpenGL ES For IOS

      本书《Learning OpenGL ES For IOS》主要介绍了OpenGL ES这一图形API在iOS平台上的应用。OpenGL ES全称为Open Graphics Library for Embedded Systems,是OpenGL的子集,专为移动设备和嵌入式设备设计,它是由...

      OpenGL ES应用开发实践指南:iOS卷(源码)

      OpenGL ES应用开发实践指南:iOS卷是一本专为iOS开发者设计的深度学习资源,它涵盖了在iOS设备上使用OpenGL ES进行图形编程的核心概念和技术。OpenGL ES(OpenGL for Embedded Systems)是OpenGL的一个轻量级版本,...

      OpenGL ES应用开发实践指南 iOS卷 13-37-12-820

      OpenGL ES应用开发实践指南 iOS卷 13-37-12-820,iOS版本的opengl es

      OpenGL ES应用开发实践指南 iOS 源码代

      OpenGL ES应用开发实践指南 iOS 源码代。 书上附带的源代码

      OpenGLES_iOS 源码

      iOS 平台上,OpenGLES 被广泛用于创建高质量的2D和3D图形,是游戏开发、应用程序界面设计和其他视觉表现的重要组成部分。在iOS开发中,OpenGLES提供了丰富的API接口,允许开发者直接控制硬件的图形渲染功能,实现高...

      使用 C++ 和 OpenGL ES 2 为 Android、iOS 和 Web 开发一个简单的空气曲棍球游戏_C语言_代码

      在iOS平台上,Xcode集成开发环境支持C++和OpenGL ES的开发,通过Cocoa或Cocoa Touch框架,开发者可以方便地将C++代码集成到Objective-C或Swift应用中。 对于Web端,可能使用了Emscripten,这是一个LLVM到JavaScript...

    Global site tag (gtag.js) - Google Analytics