2024-06-23 16:11:14
首先 不用 glPushMatrix();会导致当前操作的矩阵被改变..
这些坐标变换都是通过操作矩阵来实现的,而矩阵相乘是会叠加的
(不用glPushMatrix();你会发现不是原来想要的位置)
gluLookat函数 就相当于 一个 捕捉图片的摄像机 (世界/三维坐标 )
void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
前三个参数 是摄像机世界坐标的位置 ... 确定了摄像机的原点 ..
第二组centerx,centery,centerz 决定了相机的照射的方向...
第三组坐标决定了相机的的角度 ...(是以相机的正上方为基准..)
角度 跟偏移量不同 看到图像当然也不同 ..
参考资料: OpenGL编程宝典第七版第三章:视图
2024-06-23 16:36:05
眼坐标:来自观察者的观察点,与可能发生的任何变换无关,可以把它们视为“绝对”屏幕坐标。因此并不是真正的坐标,而是代表一个虚拟的固定坐标系,用作参考的公共框架。大部分变换都是根据它们相对于眼坐标系的效果来描述的。
opengl中的gluLookat函数生成的图像,就是利用gluLookat函数改变眼坐标来实现图像的变化。
osg中camera->setViewMatrixAsLopengl 的函数相当于opengl中的glulookat
openGL变换小节:
视图:指定观察者或摄像机的位置
模型:在场景中移动对象
模型视图:描述视图变换盒模型变换的对偶性
投影:对视见空间进行修剪和改变大小
视见区: 对到窗口的最终输出进行缩放
2024-06-23 15:45:51