绘制三角形需要3步:

  1. 在虚拟3D空间定义三个点的坐标位置
  2. 在虚拟3D空间定义视椎体(VIewPort)
  3. 转换显示到屏幕中

1.理解下glViewport(int x, int y, int width, int height ),即改变绘制三角形的第三步

上一篇Android 中使用OpenGL ES进行2D开发(绘制第一个三角形)中这个方法的使用是用下面的值传递进去的。

gl.glViewport(0,0,glView.getWidth(),glView.getHeight());

我们试着来改变传递进去的值

gl.glViewport(50, 50,430, 550);,同样的代码在不同分辨率的手机上最终显示的三角形就不一样了。

T1981(480*800分辨率) A81(640*960分辨率)

其实三角形在虚拟空间中的大小和viewport都未改变



强调下,改变glViewport中的参数,图像在虚拟3D中的变没有变化,只是用opengl转换到屏幕上时,我们指定了具体的位置。一般glViewport中的参数为(0,0,屏幕的宽度,屏幕的高度),这样可以全屏显示,而且在不同分辨率的设备上保持图像类似

2.GL10.glOrthof(int left, int right, int bottom, int top, int near, int far)即改变绘制三角形的第三步


下面的两张图中,虚拟3D空间中的三角形位置是不变的,只是改变viewport
vertices.put( new float[] { 0f, 0f,
320f, 0f, 160f, 480.0f});

gl.glOrthof(0, 320, 0, 480, 1, -1); gl.glOrthof(-160, 160, -240, 240, 1, -1);

在手机屏幕中的样子就是这样的:


3.改变虚拟3D空间定义三个点的坐标位置

vertices.put( new float[] { 0f, 0f,
320f, 0f,
160f, 480.0f});
gl.glOrthof(0, 320, 0, 480, 1, -1);
vertices.put( new float[] { -160f, -240f,
160f, -240f,
0f, 240.0f});
gl.glOrthof(-160, 160, -240, 240, 1, -1);

虽然在屏幕中看起来是一个样子,实际上在 3d 虚拟空间中是不同位置:



原文转自: http://www.waitingfy.com/?p=45

更多相关文章

  1. ANDROID中LISTVIEW仿QQ群组向上滚动特效
  2. Android(安卓)OpenGL ES绘制三角形时角度的控制
  3. Android(安卓)侧边栏开发的方法
  4. Android(安卓)仿2016版京东筛选
  5. 2018-01-22 Android(安卓)屏幕完美适配方案
  6. ANDROID GridView 分页平滑滑动 效果的实现(基于android TV遥控器
  7. ListView和Adapter的基础知识
  8. Android(安卓)Fragment生命周期——多屏幕支持
  9. Android人脸检测类FaceDetector

随机推荐

  1. Android Kotlin ListView的使用
  2. Android(安卓)调用系统Camera 程序照相,获
  3. android usb Host模式下与usb Hid 设备的
  4. Android Studio 1.0 (稳定版) 完全攻略
  5. Android(安卓)_优雅实现元素间的分割线 (
  6. android 从第三方app打开方式添加自己的a
  7. 互联网徐金良:Android为什么能够超越iOS?
  8. 在Android Studio中使用cmake编译FFmpeg
  9. android uiautomator 截取图片
  10. android调用隐藏的网络信息设置菜单实现