绘图对象的坐标映射
在Android设备上显示图形中的基本问题之一就是它们的屏幕可能是各种尺寸和形状的。OpenGL会假设一个方形区域,统一的坐标区域,并且在默认情况下,在一些方形的屏幕能够像在方形区域一样,完美的绘制这些坐标。
图1. 默认的OpenGL坐标系统(左)被映射到一个典型的Android设备屏幕(右)。
上面的插图演示了如何把左边的OpenGL的统一坐标系统映射到右边横屏设备的实际坐标上。使用GpenGL的投影模式,可以解决这个问题,并且照相视图(Camera View)会变换坐标,以便图形对象能够按照正确的比例来显示图形。
为了应用投影和照相视图,就要创建一个投影矩阵和一个照相视图矩阵,并且把它们应用到OpenGL的呈现管道。投影矩阵会重新计算图形的坐标,以便让图形能够正确的映射到Android设备的屏幕上。照相视图矩阵会从一个特殊的视角来创建一个要呈现的对象的变换。
在OpenGL ES 1.0中的投影和照相视图
在ES 1.0 API中,要分别创建投影和照相视图,并把它们添加到OpenGL的环境中。
1.投影矩阵---为了重新计算图形对象的坐标以便让它们能够按照正确的比例来绘制,就要使用设备屏幕的几何形状来创建一个投影矩阵。下面的示例代码演示了如何编辑GLSurfaceView.Renderer的onSurfaceChanged()方法,来实现基于屏幕的外观比率的投影矩阵的创建,并且把这个投影矩阵应用给OpenGL的呈现环境:
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
// make adjustments for screen ratio
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION); // set matrix to projection mode
gl.glLoadIdentity(); // reset the matrix to its default state
gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // apply the projection matrix
}
2.照相变换矩阵---一旦使用一个投影矩阵调整了坐标系统,就必须要使用一个照相视图。下面的代码显示如何使用GLSurfaceView.Renderer的onDrawFrame()方法来实现一个模型视图,并且使用GLU.gluLookAt()工具来创建一个模拟照相机视角的视图变换:
publicvoid onDrawFrame(GL10 gl){
...
// Set GL_MODELVIEW transformation mode
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity(); // reset the matrix to its default state
// When using GL_MODELVIEW, you must set the camera view
GLU.gluLookAt(gl,0,0,-5,0f,0f,0f,0f,1.0f,0.0f);
...
}
关于如何使用OpenGL ES 1.0投影和照相视图的完整的例子,请看OpenGL ES 1.0指南(http://developer.android.com/training/graphics/opengl/index.html)
分享到:
相关推荐
Android三维程序设计-基于OpenGL ES的图形应用程序设计 Prateek Mehta著
Android 三维程序设计-基于OpenGL ES的图形应用程序设计是一本适合搞图形研究设计的不可多得的一本好教材。
资源名称:Android三维程序设计-基于OpenGL ES的图形应用程序设计内容简介:本书详细阐述了与 Android移动设备以及 OpenGL ES开发相关的基本解决方案,主要包括 ES 2.0基础知识、3D建模、 Blender软件应用、纹理和...
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器...
如何使用Android的图形的API(画布,OpenGL ES的1.0/1.1),音频,和用户输入,以反映这些基本面 如何从头开发两个2D游戏的基础上,画布的API和OpenGL ES。 如何创建一个全功能的3D游戏 如何发布你的游戏,让崩溃...
android openGL es2.0简单图形绘制 简单绘制三角形 里面注释很详细
android OpenGL技术绘制一个旋转的3d立方体
本书详细阐述了与 Android移动设备以及 OpenGL ES开发相关的基本解决方案,主要包括 ES 2.0基础知识、3D建模、 Blender软件应用、纹理和着色、 Tank Fence游戏开发等内容。此外,本书还提供了丰富的示例以及代码,以...
构建3D图形,OpenGl ES 绘制3D图形的放回绘制2D的图形的大致方法
在屏幕绘制各种图形,了解Android中OpenGL的使用:程序实现了: 屏幕绘图的方法 Android上OpenGL的使用。 完成三角形和四边形的绘制。
Android三维程序设计——基于OpenGL ES的图形应用程序设计——(源码) 英文版《Learn-OpenGL-ES-Master》
Android OpenGL ES 简明开发真正的3D图 Android平台提供的OpenGL ES API主要定义在包android.opengl ,javax.microedition.khronos.egl ,javax.microedition.khronos.opengles ,java.nio 等几个包中
该案例代码为Android 平台OpenGL ES实现...1、在Android平台,使用OpenGL ES通过加载灰度图,构建山地图形渲染效果; 2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: ...
本文档详细阐述了跟Android移动设备以及OPENGL ES开发相关的基本解决方案,主要包括ES2.0基础知识、3D建模、纹理跟着色等开发内容, 解压密码:1
由资深Android开发专家根据OpenGLES2.0版本撰写,不仅系统地讲解了OpenGLES的核心概念、技术,以及Android的图形机制,还通过大量案例讲解了在Android上进行OpenGLES开发的方法和技巧。 《OpenGL ES应用开发实践...
使用android 的3d 图形库 android 使用了行业标准的opengl es api
作者: (美) 马鲁基-弗伊诺(Marucchi-Foino, R.) 著 ...原作名: Game and Graphics Programming for iOS and Android with OpenGL ES 2.0 译者: 王净 译. 出版年: 2014-2 页数: 288 装帧: 平装 ISBN: 9787302352303
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计
Android平台 将 GL_TEXTURE_2D纹理 渲染到 Surface 上 案例实现文章介绍: https://xiaxl.blog.csdn.net/article/details/131682521 技术实现流程大致如下: 1、OpenGLES3中加载GL_TEXTURE_2D纹理,生成纹理ID; 2...