透视投影以及分辨率的问题

最近我在做我的基于VTK的分布式数据的分布式渲染的时候遇到一个非常奇怪的问题:

我在算出一个包围盒在透视平面的透视投影的结果都是对的,所有点的坐标在相对位置上都是对的但是最后画出来的结果竟然看上去有问题,其中两个点都是对的,有一个点确出问题了,竟然到了整个屏幕的边上。如下图,左边是现实情况,右边是应该的正确情况:

透视投影以及分辨率的问题_第1张图片

这样的结果让我觉得很诧异,我就开始猜想错误的原因,然后我认为可能是我在算出要画的图形对应的平截头体A,和整体的平截头体B,我在算出要画的图形的平截头体在整体范围占得大小的时候,我要用A去对应B,但是我这个B我开始是把全局包围盒对应的平截头体作为整体的平截头体,这个时候需要注意的是,其实我们所谓的投影平面就是我们显示的平面,而我们显示的平面的分辨率是固定的,所以我们还要调整这个B使其与分辨率的比率一样。这样整个图形就不会扭曲,这样再算size的时候就会有偏差,从而导致出现上面这个现象。

可是事实是我错是错了这点,但是改完之后并没有效果。

最后我才发现,其实上面这幅图就是对的,问题出在分辨率和全屏上:

我在全屏的时候并没有去掉边框,而整体的分辨率是包括屏幕所有的部分的。所以上面和下面的边框都是要占分辨率的,而我们上面和下面被占了一部分,而像素点是从我们的窗口的左下角开始填充的,所以它就没有从屏幕的左下角开始填充,而是从图形显示窗口的左下角开始填充。所以造成虽然它顶到了整个窗口的上面,其实它并不在整个分辨率的上延。所以其实它是对的,但是它应该在size上还是有错的,应该会被拉伸。在形态上是没错的。

下面讲讲我在这里的透视投影:

透视投影我理解,其实就是三维空间上的一个图形在某个透视平面上的投影。就是相机所在的点向空间上的一个点的连线与透视平面的交点。所以就是空间上一条直接与平面的交点的计算,非常简单。

下面我再说下平截头体这里最好的选取吧,应该用包围盒对角线的长作为分辨率中小的那个,另一个也对应扩大就行。平截头体其实也就与包围盒的对角线长度有关,设置好之后就与包围盒没什么关系了。不论旋转,平移,放大缩小都只是改变这个平截头体和相机位置就行。但是我们这里用的部分的frustum,在交互的时候应该要重新计算某个节点上的数据在投影平面上小的平截头体,并且根据所属的窗口分开来画,这部分是需要重新计算的,所以在交互的时候,我们肯定是要修改VTK的交互过程的。

透视投影以及分辨率的问题_第2张图片




你可能感兴趣的:(透视投影以及分辨率的问题)