返回首页
当前位置: 主页 > 游戏开发 > OpenGL ES >

OpenGL ES iPhone 开发-纹理映射初步

时间:2009-06-26 00:54来源:未知 点击:
作者: sqw0312 如何建立iPhone的OpenGL ES项目,请参考本站的游戏是这样写成的系列,非常清楚。 1 将EAGLView设置成一个单例模式,这样可以用别的类来调用其的 swapBuffers 来画图。 - ( void
  作者: sqw0312

如何建立iPhone的OpenGL ES项目,请参考本站的游戏是这样写成的系列,非常清楚。

1 将EAGLView设置成一个单例模式,这样可以用别的类来调用其的 swapBuffers 来画图。

- (void) swapBuffers
{
EAGLContext *oldContext = [EAGLContext currentContext];
GLuint oldRenderbuffer;

   if(oldContext != context)
[EAGLContext setCurrentContext:context];



     glGetIntegerv(GL_RENDERBUFFER_BINDING_OES, (GLint *) &oldRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);

if(![context presentRenderbuffer:GL_RENDERBUFFER_OES])
printf("Failed to swap renderbuffer in %s\n", __FUNCTION__);

   if(oldContext != context)
[EAGLContext setCurrentContext:oldContext];
}



swapBuffers是一个很好的方法,利用双缓冲,先将图画到一个context上,然后交换当前context和画好的,这样避免屏幕闪烁。

2. 画图原理以及如何一次画多图



因为很多游戏一次要画很多图,所以不要每画一个小的就画到View上,这样屏幕会频繁闪动。我将下面代码使用了99次,也就是画了99张图,然后再调用 swapBuffers 这个方法来一次性画出来。千万避免每画一张图,就swapBuffer一次。



glLoadIdentity(); //必须使用这个再每一次新画一个图之前,否则原始坐标会丢失

glColor4f(1.0f1.0f1.0f1.0f);

glPushMatrix();
glTranslatef(x, y, 0.0f);//移位
glRotatef(angle, 0.0f, 0.0f, 1.0f);//旋转
glScalef(xScale, yScale, 1.0f);//缩放
glVertexPointer(2, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glPopMatrix();

好了, 下面介绍一下画图的基本步骤与原理。简单的画图我就不介绍了,这里主要介绍就是怎么把一个图像画到View上,就是所谓的纹理映射。在EAGLView的drawView方法里用如下代码实现 画一幅简单的图:bg.png(可以在游戏是这样写成的里面找到)


- (void)drawView {
[EAGLContext setCurrentContext:context];

   const GLfloat zNear = 0.01, zFar = 1000.0, fieldOfView = 45.0
GLfloat size; 

//glEnable可以用来实现很多东西,具体的参数可以去opengl网站查
glEnable(GL_DEPTH_TEST);
顶一下
(4)
33.3%
踩一下
(8)
66.7%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容