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_STRIP, 0, 4) 就可以画出4边形了。然后translate (x,y) 就可以把图像放到你想要放的位置了,再旋转就可以按照你想要旋转的点来旋转。本例缺少的coordinates请参照2里面红色部分的代码,截取你想要画的图片的部分的顶点坐标。
/*-------------------------画图完成,如果要画到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_STRIP, 0, 4) 就可以画出4边形了。然后translate (x,y) 就可以把图像放到你想要放的位置了,再旋转就可以按照你想要旋转的点来旋转。本例缺少的coordinates请参照2里面红色部分的代码,截取你想要画的图片的部分的顶点坐标。
顶一下(7)
43.8%
踩一下(9)
56.2%
发表评论
本类文章点击排行榜
- [06-26] OpenGL ES iPhone 开发-纹理映射
- [06-11] OpenGL ES 官方demo TouchFighter2 下
- [01-26] OpenGL ES 教程
- [05-11] 《深入了解OpenGL》第二讲:顶
- [03-31] OpenGL ES 3D物体加载示例
- [05-18] 深入了解OpenGL——光照
- [05-04] OpenGL绘制基本图形单元的方法
- [05-25] 用OpenGL绘制带箭头的直线的代
- [05-18] OpenGL帧缓存和动画
最近更新
- [05-25] 用OpenGL绘制带箭头的直线的代码
- [05-18] 深入了解OpenGL——光照
- [05-18] OpenGL帧缓存和动画
- [05-11] 《深入了解OpenGL》第二讲:顶点线性变换
- [05-04] OpenGL绘制基本图形单元的方法
- [05-04] opengl es 设置颜色的代码
- [03-31] OpenGL ES 3D物体加载示例
- [03-31] OpenGL ES纹理尺寸限制的处理方法
- [01-26] OpenGL ES 教程
相关文章
- [05-04] opengl es 设置颜色的代码
- [03-31] OpenGL ES 3D物体加载示例
- [03-31] OpenGL ES纹理尺寸限制的处理方法
- [01-26] OpenGL ES 教程
- [06-11] OpenGL ES 官方demo TouchFighter2 下载


《深入了解OpenGL》第二讲:顶点线性变换