VTK笔记-相机vtkCamera-投影方式与裁剪范围

  • Post author:
  • Post category:其他




投影方式中物体在View上的投影位置

在之前对多边形数据进行裁剪时《

VTK笔记-裁剪分割-不规则闭合圈选裁剪-vtkImplicitSelectionLoop类

》,显示的下图的效果;在圆球上进行垂直于视平面的一个五边形的裁剪,一开始的目的是在视平面上将五边形范围内的数据进行删除。却没想到最终的效果是下图这个样子,可以看到五边形的裁剪范围向图像的中心方向偏移;这个是正确的呢?还是错误的呢?

在这里插入图片描述

先说结论,是正确的。在认真学习VTK的相机正交模式和透视模式后,得知一般情况下相机是

使用透视模式获取物体在前后裁剪平面范围内的像素投射在以相机为中心方向上与前裁剪平面上的交点位置,构成了一个由透视投影得到的二维渲染图像




如果是采用正交投影,那么就不会有这种远小近大的视觉效果,在视平面上的裁剪就是选择范围内的裁剪。



例如,在以焦点为中心的立方体上,以视平面上的一个长方形范围进行裁剪,这里只使用水平面上的投影示意图为例。如果是要裁剪掉投影在前裁剪平面上的所有显示像素,就不能根据垂直与前裁剪平面的范围裁剪立方体,如果按照这种方式进行裁剪,就会在前裁剪平面上生成一个类似上图的效果,可以看到黑色范围投影在前裁剪平面是和选定的范围有偏移。

在这里插入图片描述

真正要裁剪的范围是以相机为中心,连接相机坐标和前裁剪平面上选择范围上点的坐标,与后裁剪平面上的交点形成了后裁剪平面上的圈选范围,这两个选择范围与立方体的交集就是要被裁剪掉的范围。这样在前裁剪平面形成的渲染图像就是一个看上去被圈选删除的结果。

在这里插入图片描述

在这里插入图片描述

上图,是一个相机的锥视体的示意图。其中eye是眼睛位置也就是相机位置,np是近裁剪平面(前裁剪平面/视平面),fp是远裁剪平面(后裁剪平面)。N是相机到近裁剪平面的距离,F是相机到远裁剪平面的距离。投影面可以选择任何平行于近裁剪平面的平面,这里我们选择近裁剪平面作为投影平面。p是视椎体的前后裁剪平面中间的点,p’是经过相机变换后投影在前裁剪平面上的点。

p经过怎么样的计算才能得到p’呢,

首先由相机坐标(eye)和p坐标形成一条直线,直线与视平面np相交与p’,可以通过vtkPlane或者vtkPlaneSource计算出这个相交点的世界坐标,该坐标可以换算成相机上的view坐标;同样与平面fp相交一点,就是p在fp上的投影,前面两个实际裁剪范围就是由前裁剪平面和后裁剪平面形成的椎体范围。



参考资料

1.

图形学扫盲–(2)透视投影(Perspective Projection)



版权声明:本文为liushao1031177原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。