位置: 编程技术 - 正文
推荐整理分享对Android opengl ES世界坐标系和纹理坐标系的理解(安卓opengl es),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:android opengles2.0,android opengl es教程,opengl es android,android opengles2.0,andriod opengl,andriod opengl,andriod opengl,andriod opengl,内容如对您有帮助,希望把文章链接给更多的朋友!
初学opengl ES,每一个教你在屏幕上贴图的opengl版hello world都有这么两数组:
但是几乎都不解释,所以我学的时候都不明白这些点为什么要这么写,前后顺序有没有什么规律。于是各种查资料试验,终于搞懂了。
1.坐标系PS:本人学opengl es主要是为了2D贴图,所以不涉及Z轴
如图,图一是opengl的世界坐标系,这个基本没啥问题,主要是很多教程说纹理坐标是左下原点。实践得出在Android上应该是最右边的图那样,以左上为原点。 个人猜测纹理吧其实就是一组颜色点组成的数组,Android由于UI坐标是以左上为原点,所以把数组里颜色点的存储顺序改了一下,于是坐标系就不一样了。
2.示例代码其中 GLES.glDrawArrays(GLES.GL_TRIANGLE_STRIP, 0, 4); 由于openglES本身就是opengl的缩略版,所以能直接画的形状就只有三角形,别的复杂的都要由三角形来组成。GLES.GL_TRIANGLE_STRIP指的就是一种三角形的绘制模式,对应这个顶点数组:
实际绘制的就是顶点1,2,3组成的三角形和顶点2,3,4组成的三角形合并成的一个矩形,如果有更多点,依次类推(比如有5个点,就是1,2,3 2,3,4 3,4,5三个三角形组成的图案)。如下图:
3.纹理顶点顺序纹理的点和世界坐标的点之间是对应的:
显示结果如图:
如图中箭头,opengl会把纹理中颜色顶点绘到对应的世界坐标顶点上,中间的点则按一定的规律取个平均值什么的,所以可见实际显示的图被上下拉伸了,因为原图是1:1,而在该程序里 GLES.glViewport(0, 0, width, height); 赋予的显示区域是高大于宽的(这里涉及到opengl世界坐标和屏幕坐标的映射,和本文主旨关系不大就不多说了)。
其实也就是只要世界坐标和纹理坐标数组里的点能够对的上,顺序不是问题 代码里的四组坐标的显示效果都是一样的:
不信的可以在这里都替换了试试:
为了加深理解,甚至可以玩点花样出来,比如这样
结果如下图:
4.Demo源码地址
版权声明:本文为博主原创文章,未经博主允许不得转载。
Tutorial2 Hello dot! 本文源自:
opengl 绘制绕远点转的飞机 1、绘制飞机方法draw_plane()voiddraw_plane(){floatscale=1.0f;glLineWidth(6.0f);glColor3f(1.0,0.0,1.0);glPushMatrix();glScaled(0.f*scale,0.f*scale,0.f*scale);glPushMatrix();glRotated(.0f,
opengl 4.X off-screen rendering openGL可以渲染屏幕的framebuffer,自然可以渲染不直接显示的framebuffer,把数据存入非直接显示的framebuffer中以便后续的渲染需求,或者直接存入纹理贴图te
标签: 安卓opengl es
本文链接地址:https://www.jiuchutong.com/biancheng/368433.html 转载请保留说明!友情链接: 武汉网站建设