Android图形---OpenGL(三)
来源:互联网 发布:photoshopcs3软件下载 编辑:程序博客网 时间:2024/06/08 16:50
绘图对象的坐标映射
在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(三)
- Android图形---OpenGL(一)
- Android图形---OpenGL(二)
- Android图形---OpenGL(四)
- Android图形---OpenGL(五)
- Android图形---OpenGL(六)
- Android图形---OpenGL(一)
- 学习OpenGL(三)绘制螺旋状图形
- OpenGL基础图形编程(三)WindowsNT下的OpenGL
- Android OpenGL ES2.0编程教程系列之绘制图形(三)
- Android OpenGL ES绘图教程之三 : 绘制图形
- Android图形---OpenGL
- QT5 OPenGL(三, 图形旋转)
- OpenGL(三)图形变换之几何变换
- OpenGL(三)图形变换之矩阵堆栈
- OpenGL入门(三):图形随鼠标转动
- Android 图形 II-OpenGL ES
- OpenGL学习三:绘制矢量图形模型
- ASP.NET MVC3实践--入门
- linux下使用ssh登录远程
- 一些特殊的有用的SQL写法
- 关于matlab的SVM工具箱的几个函数
- SQL SERVER 2012 - MEMORY MANAGEMENT
- Android图形---OpenGL(三)
- 用语句实现对数据列的操作(SQL SERVER)
- Codeforces Round #125A About Bacteria
- python的exit退出时,提示TypeError: 'str' object is not callable
- 在1-n中1出现的次数(微软等IT公司面试一百题)
- 振作只需一个理由:日子不能这样过
- 拓扑排序
- 对IA32的理解又稍有进步啊!
- 用VS2010制作中文安装包