当前位置:主页 > 开发频道 > 游戏开发 > OpenGL ES >

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

时间: 2009-06-26 00:54 点击:

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

/*-------------------------画图完成,如果要画到View上就可以用下面的方法,如果想继续画其他图,就继续重复上面代码,但是图片要改变------------------------*/

    
      glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}




不难看出,开启功能,然后声明一个图像并给予编号,然后读取图像,读取图像参数,根据参数分配内存,设置画图的一些颜色,大小亮度等参数,用glTexImage2D将 图像映射到分配的空间,映射的步骤就完成了。在画图的步骤中,首先要准备好2组坐标,一个用于存放要画出来的图像的位置,一个用于存放要截取的图像的部 位,然后glLoadIdentily,这个时候要移位的移位,要旋转的旋转,要缩放的缩放,然后将2组坐标传递进去,当然还可以有其他坐标,这里不详细 介绍了,在就是用glDrawArrays将图画出来。但是这个时候并没有呈现在屏幕上,因为没有呈现在EAGLView的context里,所以继续画 图的话就不要调用方法,将所有图全画完再一次调用[context presentRenderbuffer:GL_RENDERBUFFER_OES] 将所有图像呈现出来。其他一些函数这里不详细介绍,函数的参数也不详细介绍,这里主要介绍的是用OpenGL ES 进行纹理映射的大致步骤。
简单的说,就是要画99个图的话,把红色代码重复99次就可以,蓝色代码只要1次就行。但是注意红色代码部分要改图片和位置,否则就是在同一位置画99次一样的图了。
如果图很多很耗资源而对图的要求不是特别高的话,可以用 glSubTexImage2D 或者 glCompressedTexImage2D 来映射纹理。 




3. 如何设置旋转中心使图像围绕自己想要旋转的点旋转



假设要画一个32*32的图像在点(x, y), 并让此点以图像的中心旋转,那么用如下代码就可以实现
// 围绕中心旋转
GLfloat vertices[] = 
{
imageWidth/2, - imageHeight/2,
  imageWidth/2, - imageHeight/2,
imageWidth/2,   imageHeight/2,
  imageWidth/2,   imageHeight/2
};

// 围绕底部中心旋转
//GLfloat vertices[] = 
// {
// imageWidth/2, 0.0,
//   imageWidth/2, 0.0,
// imageWidth/2, imageHeight,
//   imageWidth/2, imageHeight
// };

glLoadIdentity();
glColor4f(1.0f, 1.0f, 1.0f, 1.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();

代码不完整,主要使告诉如何设置 vertices ,这样可以调整你想旋转的位置。一定要以你想旋转的点为中心,按照图像的长宽来设置好4个顶点的位置,4个顶点的位置顺序,这里依次是左下,右下,左上,右上。这样用glDrawArrays(GL_TRIANGLE_STRIP04就可以画出4边形了。然后translate (x,y) 就可以把图像放到你想要放的位置了,再旋转就可以按照你想要旋转的点来旋转。本例缺少的coordinates请参照2里面红色部分的代码,截取你想要画的图片的部分的顶点坐标。

顶一下(7)

43.8%

踩一下(9)

56.2%

发表评论

评价: 中立 好评 差评 请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

表情: