最近学习OSG到第7章观察我们的世界,与之前学习的OpenGL有一些区别,当然学OpenGL时就一直不太懂各种坐标系以及变换。看了很久,现将内容整理如下。内容来自《OpenGL编程指南》+《OpenSceneGraph三维渲染引擎设计与实践》
一、视图基础知识
计算机图形学的要点就是创建三维物体的二维图像,因为要在屏幕上显示,所以必须是二维的。我理解就是要让屏幕里的东西看起来是三维的。
但无须太早考虑如何在平面的二维屏幕上显示最终图像,要尽量在三维空间里想象物体的形状。
三维世界与屏幕像素的变换可以与照相机拍照过程类比:
(1)设置相机位置:视点变换,即观察者是从什么方向以及位置来观察物体的。
在OpenGL中是通过gluLookAt()函数来确定视图变换,这个函数的参数表示照相机的位置,朝向,以及那个方向是up方向
gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz)
eye:代表了相机的位置
center代表了视线方向上任意一点,由此和eye的坐标确定了相机瞄准的哪个位置。
up:表示哪个方向是朝上的,也就是相机是正着拿还是反着拿。
在OSG中,我们使用osg::Camera节点来实现,视点变换矩阵又称为观察矩阵。Camera类保存大量的相机设置参数,如视口、投影矩阵、和背景颜色等。
(2)调整物体位置:模型变换,即选定模型位置,对场景进行安排。