2024-09-18 04:53:17
这是一篇OpenGlES 系统学习教程,记录自己的学习过程。
环境: Xcode10.2 + OpenGL ES 3.0
目标: 3D 立方体
这里 是demo,你的star和fork是对我最好的支持和动力。
主要有5个不同的坐标系统:
变换
为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是 模型 (Model)、 观察 (View)、 投影 (Projection)三个矩阵。我们的顶点坐标起始于 局部空间 (Local Space),在这里它称为 局部坐标 (Local Coordinate),它在之后会变为 世界坐标 (World Coordinate), 观察坐标 (View Coordinate), 裁剪坐标 (Clip Coordinate),并最后以 屏幕坐标 [图片上传中...(坐标系变换.png-d41a13-1555986546530-0)]
(Screen Coordinate)的形式结束。下面的这张图展示了整个流程以及各个变换过程做了什么:
透视投影
在现实生活中近大远小的效果称之为 透视 。如铁轨的两条轨道,由于透视,在很远的地方看起来会相交一样,这就是透视投影想要模仿的效果,它通过 透视投影矩阵 来完成,推导过程可以看 这里 。
正交投影
当使用正射投影时,每一个顶点坐标都会直接映射到裁剪空间中而不经过任何精细的透视除法(它仍然会进行透视除法,只是w分量没有被改变(它保持为1),因此没有起作用)。因为正射投影没有使用透视,远处的物体不会显得更小,所以产生奇怪的视觉效果。由于这个原因,正射投影主要用于二维渲染以及一些建筑或工程的程序,在这些场景中我们更希望顶点不会被透视所干扰
把以上每个步骤创建的变换矩阵:模型矩阵、观察矩阵和投影矩阵组合起来。一个顶点坐标将会根据以下过程被变换到剪裁坐标系:
注意矩阵运算的顺序是相反的(记住我们需要从右往左阅读矩阵的乘法)。最后的顶点应该被赋值到顶点着色器中的gl_Position,OpenGL将会自动进行透视除法和裁剪。
顶点数据
矩阵变换过程
最后注意点