Mapping Coordinates for Drawn Objects(为绘制对象映射坐标)

在Android 设备上护照图形的一个基本问题就是Android设备的大小和形状各式各样。OpenGL假设一个正方形的,唯一的系统坐标系。并且,默认会更喜欢把这些坐标绘制到你的典型的非正方形的屏幕上,就把他当成一个完美的正方形一样。


表1,左边的一个缺省的OpenGL坐标映射到右边一个典型的Android设备屏幕上


上面的例子左边演示了在OpenGL中一个假设的一个唯一坐标系统,然后右边显示的是这些坐标映射到了一个典型的横屏设备上。要解决这个映射问题,你可以应用OpenGL的投影模式和视点转换来转换坐标,这样的话你的图像不管怎么显示都会有合适的坐标。
要使用投影和视点转换,你要创建一个投影矩阵和一个视点转换矩阵并把他们应用到OpenGL的渲染管道。投影矩阵会计算你图形的坐标,这样他们就会映射到屏幕上的正确位置。而视点转换矩阵则会创建一个转换从某个特定的角度影响物体。

Projection and camera view in OpenGL ES 1.0

在OpenGL ES 1.0中,你可以通过创建投影和相机的视图矩阵并把他们添加到的你OpenGL环境中来应用他们。

1、Projection matrix:创建投影矩阵需要用到设备屏幕的几何尺寸(长、宽),因为需要根据他们的尺寸来计算对象的坐标,这样他们会被以合适的比例绘制。如下的代码是一个这方面的例子,显示了如何通过修改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、Camera transformation matrix(相机转换矩阵),一旦你通过投影矩阵进行了合适的坐标转换,你也必须应用一个视点转换。如下的代码显示了如何修改GLSurfaceView.Renderer的onDrawFrame方法来应用一个模型视景矩阵并且通过使用GLU.gluLookAt()实用方法来创建一个类似相机位置的视图转换:

    public void 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);
        ...
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值