图形学中,场景模型渲染到屏幕主要包括以下流程:首先通过模型矩阵变换模型位位置朝向和大小,确定模型在世界坐标中的位置,然后通过视图矩阵将模型的世界坐标位置转换到视点坐标下,接着通过投影矩阵将视点坐标下的模型转换视口空间,最后将视口位置变换到屏幕位置上:模型空间到世界空间,世界空间到摄像机空间,摄像机空间到投影空间,投影空间到屏幕空间。此外,对于使用法线贴图的模型,还需要一个TBA矩阵,来变换法线的朝向。
模型视图矩阵
模型视图矩阵包括模型矩阵和视图矩阵,模型矩阵将模型变换到世界坐标,视图矩阵将世界坐标下的物体坐标变换到视口坐标,这两个矩阵本质一样。老版本的opengl使用下面的代码实现视图矩阵。2.0以后的版本开始支持动态管线渲染,各种矩阵需要自己在程序中计算好传入道shader中,至于矩阵的旋转平移丶缩放丶矩阵的实现,请参https://blog.youkuaiyun.com/dcrmg/article/details/53088617。
glMatrixMode(GL_MODELVIEW)
glLoadIdentity();
glulookat();
投影矩阵栈
投影矩阵栈,实现将视口坐标下的模型坐标投影到裁剪视口,老版本的opengl使用下面的代码实现投影矩阵,2.0以后的版本需要自己手动传入投影矩阵,投影矩阵的参数个实现参考https://www.cnblogs.com/wonderKK/p/569