美文网首页OpenGL
0011--OpenGL ES-基础变换

0011--OpenGL ES-基础变换

作者: 清风烈酒2157 | 来源:发表于2020-07-27 14:43 被阅读0次

    前言

    基础变换包括,旋转(roration),平移(translation),缩放(scale),透视(perspective),既可以单独使用,也可以组合使用.

    相关函数

    所有的基础变换矩阵,都可以通过GLKit/GLKMatrix4.h里的函数构建.

    • 平移
    
    GLK_INLINE GLKMatrix4 GLKMatrix4MakeTranslation(float tx, float ty, float tz)
    
    

    返回一个平移矩阵,tx,ty,tz分别对应方向上平移的距离.

    • 旋转
    
    GLK_INLINE GLKMatrix4 GLKMatrix4MakeRotation(float radians, float x, float y, float z)
    
    

    返回一个旋转矩阵,radians接受的弧度值,GLKMathDegreesToRadians(30)可以将旋转角度转成弧度值.x,y,z,绕哪个轴旋转,设置为1.

    • 缩放
    
    GLK_INLINE GLKMatrix4 GLKMatrix4MakeScale(float sx, float sy, float sz)
    
    

    返回一个缩放矩阵,sx,sy,sz对应轴上的缩放因子.

    • 透视

    视域(viewing volume):在OpenGL视域决定哪些内容显示在屏幕上,如果视图在区域外,将被丢弃,不会显示.

    投影(prohection):分为正投影和透视投影,我们通过设置投影矩阵来设置视域.在OpenGL中,默认投影矩阵是一个立方形,x,y,z分别是-1~1的范围,超过这个范围不会被显示.

    1. 正射投影(orthographic projection)
    
    GLK_INLINE GLKMatrix4 GLKMatrix4MakeOrtho(float left, float right,
                                                     float bottom, float top,
                                                     float nearZ, float farZ)
    
    

    视点与每个点之间的距离对于投影将毫无影响.

    1. 透视投影(perspective projection)
    GLK_INLINE GLKMatrix4 GLKMatrix4MakeFrustum(float left, float right,
                                                       float bottom, float top,
                                                       float nearZ, float farZ)
    
    

    所界定的一个平截头体(椎体切去顶端之后的形状)视域。此时,视点与每个位置之间的距离越远,对象越小

    1. 一个快速创建透视矩阵的函数
    
    GLKMatrix4MakePerspective(float fovyRadians, float aspect, float nearZ, float farZ)
    
    

    ovyRadians是视角,它接受一个弧度值,可以用GLKMathDegreesToRadians(30),将角度转换为弧度

    • projectionMatrixmodelviewMatrix

    当我们构建好了变换矩阵之后怎么传递的OpenGL呢?GLKBaseEffect有一个ransform的属性,其中有两个矩阵分别是projectionMatrixmodelviewMatrix

    
    cEffect.transform.modelviewMatrix = GLKMatrix4MakeRotation(GLKMathDegreesToRadians(angle), 0.3, 1, -1.7);
        CGFloat aspect = [UIScreen mainScreen].bounds.size.width / [UIScreen mainScreen].bounds.size.height;
        cEffect.transform.projectionMatrix = GLKMatrix4MakePerspective( 35.0f,
                                                                     aspect,
                                                                    1.0f,
    
                                                                     500.0f);
    
    

    相关文章

      网友评论

        本文标题:0011--OpenGL ES-基础变换

        本文链接:https://www.haomeiwen.com/subject/uluzlktx.html