应用投影和相机视图

物理的视图模拟伴随绘制对象坐标的数学的转换:
投影:转换调整绘制对象的坐标基于GLSurfaceView宽和高。没有计算。由OpenGLES绘制的对象被视图黄口不平等的歪曲。一个投影转换一般不被计算,当OpenGL视图比例被建立或在onSurfaceChanged()方法改变的时候。
相机视图:这转换调整绘制对象的坐标基于虚拟相机位置。重要的注意到openGLES 没有定义一个真是的相机对象,但是替代提供了效用的方法模拟了一个相机通过绘制对象的展示。相机视图转换可能被计算当你建立你的GLSurfaceView的时候,或者动态的基于你的行为或程序函数的改变。

投影转换的数据计算在你的GLSurfaceView.Renderer 类的onSurfaceChanged()方法。下面例子的代码使用GLSurfaceView的高和宽并且使用Matrix.frustumM()方法计算投影矩阵。

// mMVPMatrix is an abbreviation for "Model View Projection Matrix"
private final float[] mMVPMatrix = new float[16];
private final float[] mProjectionMatrix = new float[16];
private final float[] mViewMatrix = new float[16];

@Override
public void onSurfaceChanged(GL10 unused, int width, int height) {
    GLES20.glViewport(0, 0, width, height);

    float ratio = (float) width / height;

    // this projection matrix is applied to object coordinates
    // in the onDrawFrame() method
    Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}

定义相机视图矩阵
完成转换绘制对象的步骤通过添加一个相机视图转换作为渲染器绘制过程的一部分。在在面的代码中,相机视图转换使用Matrix.setLookAtM()方法计算,并且然后结合先前计算的投影矩阵。结合的转换矩阵。结合的转换矩阵传递给绘制的形状。

public void draw(float[] mvpMatrix) { // pass in the calculated transformation matrix
    ...

    // get handle to shape's transformation matrix
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");

    // Pass the projection and view transformation to the shader
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

    // Draw the triangle
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);

    // Disable vertex array
    GLES20.glDisableVertexAttribArray(mPositionHandle);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值