前言
基础变换包括,旋转(
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
的范围,超过这个范围不会被显示.
- 正射投影(orthographic projection)
GLK_INLINE GLKMatrix4 GLKMatrix4MakeOrtho(float left, float right,
float bottom, float top,
float nearZ, float farZ)
视点与每个点之间的距离对于投影将毫无影响.
- 透视投影(perspective projection)
GLK_INLINE GLKMatrix4 GLKMatrix4MakeFrustum(float left, float right,
float bottom, float top,
float nearZ, float farZ)
所界定的一个平截头体(椎体切去顶端之后的形状)视域。此时,视点与每个位置之间的距离越远,对象越小
- 一个快速创建透视矩阵的函数
GLKMatrix4MakePerspective(float fovyRadians, float aspect, float nearZ, float farZ)
ovyRadians
是视角,它接受一个弧度值,可以用GLKMathDegreesToRadians(30)
,将角度转换为弧度
-
projectionMatrix
和modelviewMatrix
当我们构建好了变换矩阵之后怎么传递的OpenGL呢?
GLKBaseEffect
有一个ransform
的属性,其中有两个矩阵分别是projectionMatrix
和modelviewMatrix
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);
网友评论