• opengl的坐标和glFrustumf的设定及参数相关意义


    OpenGL坐标系,如下图:


    我们需要将这个坐标系和我们的GLSurfaceView里的Surface做一个映射关系。
    glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();

    //设置视角大小,注释如下:
    gl.glFrustumf(-400, 400, -240, 240, 0.3f, 100);

    glMatrixMode(GL10.GL_PROJECTION); 是说我们现在改变的是坐标系与Surface的映射关系(投影矩阵)。

    下一句 gl.glLoadIdentity(); 是将以前的改变都清掉(之前对投影矩阵的任何改变)。

    glFrustumf (float left, float right, float bottom, float top, float zNear, float zFar) 这个函数非常Powerful。它实现了Surface和坐标系之间的映射关系。它是以透视投影的方式来进行映射的。


    透视投影的意思见下图:

     

     
    public void onSurfaceChanged(GL10 gl, int width, int height)
    {
    float ratio = (float) width / height;
    //设置OpenGL场景的大小
    gl.glViewport(0, 0, width, height);
    //设置投影矩阵
    gl.glMatrixMode(GL10.GL_PROJECTION);
    //重置投影矩阵
    gl.glLoadIdentity();
    // 设置视口的大小
    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
    // 选择模型观察矩阵
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    // 重置模型观察矩阵
    gl.glLoadIdentity();
     
    }
     

    我们一般不直接设置视口大小,而是利用glviewport 设置场景大小,再利用glFrustumf来设定大小(这里还不是很清楚)

    // 这里的GL10.GL_FIXED是整形数据,即one的大小是投影在第一层时候观察的大小,显示为整个openglsurfaceview的控件中宽的大小

    // 当为folat类型数据时候,1代表的屏幕宽度
     
     
  • 相关阅读:
    mybatis的知识点总结
    orm框架与缓存的关系
    mybatis知识点
    mybatis
    MyBatis的动态SQL详解
    工资谈判技巧
    MySQL 创建函数(Function)
    开始AFNetworking
    hdu 4778 Rabbit Kingdom(减少国家)
    设计模式:代理模式
  • 原文地址:https://www.cnblogs.com/bokeofzp/p/5967611.html
Copyright © 2020-2023  润新知