转载自: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);
|
3
|
glOrthof(
0, framebufferWidth, 0, framebufferHeight, -1, 1 );
|
分享到:
相关推荐
OpenGL ES应用开发实践 指南 iOS卷中文版一本;适合有mac开发环境的学习OpenGL ES;适合有iOS开发者的学习OpenGL ES!!
opengl es应用开发实践指南ios卷源码,包含所有章节代码
opengl es移动端开发的不二选择,为了方便大家下载,本人将opengl es应用开发实践指南 ios卷和opengl es应用开发实践指南 android卷pdf打包上传,均带索引,方便大家查阅,省去大家找资料的麻烦。
第9章介绍能够提高ios设备上opengl es 2.0渲染性能的优化策略;第10章讲解了地形和拾取;第11章回顾了3d渲染所需的常见数学运算;第12章涵盖了一个结合地形渲染、天空盒、粒子系统、动画、变化视点、灯光、模型和...
OpenGLES编程指南iOS版是一本专注于在iOS和Mac平台下使用OpenGL ES进行图形编程的指南。OpenGL ES是一种在移动设备和嵌入式系统上广泛使用的图形API,它是OpenGL的简化版,用于二维和三维图形渲染。本书重点介绍在...
由资深iOS开发专家根据OpenGL ES最新版本撰写,不仅详细讲解了OpenGL ES与GLKit的结合使用,而且还系统讲解OpenGL ES的核心概念、技术,以及iOS的图形机制,并通过大量案例讲解了在iOS上进行OpenGL ES开发的方法和...
OpenGL ES应用开发实践指南 iOS卷.pdf 高清带索引
由资深iOS开发专家根据OpenGL ES最新版本撰写,不仅详细讲解了OpenGL ES与GLKit的结合使用,而且还系统讲解OpenGL ES的核心概念、技术,以及iOS的图形机制,并通过大量案例讲解了在iOS上进行OpenGL ES开发的方法和...
Pro OpenGL ES for iOS 专业开发iOS OpenGL ES的书。
在iOS上使用OpenGLes模拟月球绕地球公转,iOS OpenGLes图形开发入门必看,iOS开发进阶资源
这个“ios-openGLES.zip”压缩包显然聚焦于利用OpenGL ES进行图片纹理处理和旋转动画的实现。下面我们将深入探讨这两个核心概念。 一、图片纹理 图片纹理是OpenGL ES中的基本元素,它们用于在3D模型或2D平面上绘制...
本书《Learning OpenGL ES For IOS》主要介绍了OpenGL ES这一图形API在iOS平台上的应用。OpenGL ES全称为Open Graphics Library for Embedded Systems,是OpenGL的子集,专为移动设备和嵌入式设备设计,它是由...
OpenGL ES应用开发实践指南:iOS卷是一本专为iOS开发者设计的深度学习资源,它涵盖了在iOS设备上使用OpenGL ES进行图形编程的核心概念和技术。OpenGL ES(OpenGL for Embedded Systems)是OpenGL的一个轻量级版本,...
OpenGL ES应用开发实践指南 iOS卷 13-37-12-820,iOS版本的opengl es
OpenGL ES应用开发实践指南 iOS 源码代。 书上附带的源代码
iOS 平台上,OpenGLES 被广泛用于创建高质量的2D和3D图形,是游戏开发、应用程序界面设计和其他视觉表现的重要组成部分。在iOS开发中,OpenGLES提供了丰富的API接口,允许开发者直接控制硬件的图形渲染功能,实现高...
在iOS平台上,Xcode集成开发环境支持C++和OpenGL ES的开发,通过Cocoa或Cocoa Touch框架,开发者可以方便地将C++代码集成到Objective-C或Swift应用中。 对于Web端,可能使用了Emscripten,这是一个LLVM到JavaScript...