查看: 3707|回复: 7

投影矩阵参数与空间座标关系

[复制链接]

该用户从未签到

发表于 2009-2-9 11:31:18 | 显示全部楼层 |阅读模式
在程序中我用视点矩阵确定相机视点(其中参数center为107.96021)。
然后利用正交投影矩阵camera->setProjectionMatrix(osg::Matrix:rtho2d(left,right,bott,top));
(其中left:-28,right:28,bott:-28,top:28)将得到范围转换为图片。
如今我想得到范围内一部分(其中只知道范围参数sector)转换为图片。
1  现在不明白的是setProjectionMatrix()函数中的left,right,bott,top怎么样与空间座标点联系起来得到sector转换的left,right,bott,top数据。
2  setProjectionMatrix()函数中的left,right,bott,top。参数的实际意义。

请高手赐予适当的提示!!!

该用户从未签到

发表于 2009-2-9 12:32:45 | 显示全部楼层
三维空间坐标和它的二维投影的转换公式为:
V' = V * MPW
其中V是任意点的世界坐标,而V'是二维投影面(也就是窗口)上的投影坐标。这中间经过了三个矩阵变换过程,即M(ModelView模型视点变换),P(Pojection投影变换),W(WindowMatrix窗口变换)。

setProjectionMatrix设置的即是投影变换矩阵的值,使用Ortho2D正交投影的话,相当于投影到XY平面上,并设置投影面的左下角和右上角坐标,也就是您所问的那四个参数的意义。

如果您想深入了解的话,建议参照OpenGL红宝书以及三维图形学各类书籍中有关空间变换的部分。

该用户从未签到

发表于 2009-2-9 16:49:39 | 显示全部楼层

解决了

谢谢!虽然没有用到你的方法。不过我也非常感谢!

该用户从未签到

发表于 2009-2-9 18:47:40 | 显示全部楼层
呵呵,MPW矩阵的概念也许并非“某一种”方法,而是gluProject函数以及OSG的相应函数所用到的基本原理所在。个人觉得了解一下还是很有帮助的,不是为了解决某一类特定的问题,而是从根本上解决这方面的疑惑

该用户从未签到

发表于 2009-2-10 08:48:55 | 显示全部楼层
left,bottom -近裁剪面的左下角 right-top,近裁剪面的右下角,center与视点的连线可以认为是穿过裁剪长方体的中心点,并且垂直于裁剪面的直线,再加上远近裁剪面到视点的距离就可以确定裁剪长方体

该用户从未签到

发表于 2009-4-2 10:48:34 | 显示全部楼层
“投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。”--这是许多3d图形学书上的描述,一般也仅止于此。
但不知道这里所谓的“裁剪”是怎么做到的? 比如一个处于视景体外的点齐次坐标(x, y, z, w),经过投影变换后的裁剪坐标是(x', y', z', w'),这个点如何被“裁剪”掉了呢? 是不是使w'=0,即被“裁剪”的点变换后的裁剪坐标是无穷远点,Opengl管线自动抛弃这些无穷远点?
盼望哪位了解的能给予解答!~

该用户从未签到

发表于 2009-4-2 13:03:47 | 显示全部楼层
这个就不好说了,硬件上如何处理的我们谁都不知道~~显示硬件的设计标准是不公开的

该用户从未签到

发表于 2009-4-2 13:42:45 | 显示全部楼层
我的意思是从数学上,这个“裁剪”是怎么做的呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表