Android 中使用OpenGL ES进行2D开发(绘制第一个三角形番外篇)

绘制三角形需要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虚拟空间中是不同位置:
45

One Response to Android 中使用OpenGL ES进行2D开发(绘制第一个三角形番外篇)

  1. Khaliif说道:

    We need more insigths like this in this thread.

Leave a Reply

Name and Email Address are required fields.
Your email will not be published or shared with third parties.