0 引言

在利用PCL的交互功能解决尺寸关联几何的指定问题时,涉及到一些显示上的操作。目前的需求是:将投影到注释平面上的点云,以与屏幕平齐的方式,显示在屏幕正中,这样方便用户进行操作。但是,在运用setCameraPosition 对点云视图进行设置时,由于不了解参数意义,所以无法达到目的。

setCameraPosition 的API如下所示。

        /** \brief Set the camera pose given by position, viewpoint and up vector
* \param[in] pos_x the x coordinate of the camera location
* \param[in] pos_y the y coordinate of the camera location
* \param[in] pos_z the z coordinate of the camera location
* \param[in] view_x the x component of the view point of the camera
* \param[in] view_y the y component of the view point of the camera
* \param[in] view_z the z component of the view point of the camera
* \param[in] up_x the x component of the view up direction of the camera
* \param[in] up_y the y component of the view up direction of the camera
* \param[in] up_z the y component of the view up direction of the camera
* \param[in] viewport the viewport to modify camera of (0 modifies all cameras)
*/
void
setCameraPosition (double pos_x, double pos_y, double pos_z,
double view_x, double view_y, double view_z,
double up_x, double up_y, double up_z, int viewport = );

其中,参数中涉及到两个位置和一个方向,分别是 camera location / view point /view up direction. 

1 PCL/VTK中的相机投影系统

在每个三维点的坐标、纹理和颜色获取之后,为了将世界坐标系中的三维场景投影到二维的屏幕上,需要建立相机模型。

先上图

              

position 和 focal point定义了相机的位置和投影方向,Front Clipping Plane为CCD镜头平面(图像平面),Back Clipping Plane平面为物体平面。

2 PCL/VTK中的坐标系统

先上图吧

              

(1)模型坐标系 model coordinate system

  模型坐标系固定在模型上,该坐标系在建模时由建模者指定。

(2)世界坐标系 world coordinate system

  模型所处的位置,采用世界坐标系来描述。通常每个模型都有自己的坐标系,但是只有一个世界坐标系。在对模型进行旋转、平移、缩放时,世界坐标是不变的,但模型坐标系相对于世界坐标系的空间位置关系发生了变化。通常相机与光源也在世界坐标系中定义。

(3)视点坐标系 view coordinate system

  视点坐标系能够表达对相机可见的场景,其x和y坐标的范围在(-1,1)之间,z代表深度值。世界坐标系到视点坐标系之间的转换用4*4的相机矩阵来表达。

(4)屏幕坐标系 display coordinate system

  屏幕坐标系即图像坐标系,其坐标轴方向与视点坐标系一致,但是其x,y坐标值为像素坐标值。窗口尺寸决定了视点坐标与像素坐标的投影关系。不同的viewports(范围:0~1)能将同一个视点坐标系下的物体投影到不同的屏幕坐标系下。

(5)全过程

  物体最初在模型坐标系下建立,并展示在世界坐标系中。通过相机空间变换矩阵投影到视点坐标系下,并经viewport展示在屏幕上。

3 OpenGL中的坐标系

(1)世界坐标系

  在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的。你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。

  长度单位这样来定:窗口范围按此单位恰好是(-1,-1)到(1,1),即屏幕左下角坐标为(-1,-1),右上角坐标为(1,1)。

(2)模型坐标系(又称绘图坐标系)  

  是绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘图坐标系是重合的。当用glTranslatef(),glScalef(), glRotatef()等对当前绘图坐标系进行平移、伸缩、旋转变换之后,世界坐标系和当前绘图坐标系不再重合。注意,这里的平移旋转是将当前绘图坐标系看做一个整体在世界坐标系中进行旋转平移。然后,改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相对当前绘图坐标系来讲的。

4 利用VTK调整点云视图效果

将点云投影到某一个平面上,并使其平行于屏幕显示,方便用户在该平面上与点云进行交互。

37 VTK中的坐标系系统的更多相关文章

  1. ArcGIS中的坐标系定义与转换 (转载)

    原文:ArcGIS中的坐标系定义与转换 (转载) 1.基准面概念:  GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐 ...

  2. ArcGIS中的坐标系:基本概念和常用操作(一)

    本文呢是主要是借鉴李郎平李大大的博士论文和百度百科,里面还有一点点我自己的理解,希望能帮助自己加深对于坐标系的认识. 李大大的博客:http://blog.sciencenet.cn/u/Brume ...

  3. VTK中获取STL模型点的坐标以及对其进行变换

    VTK是一个基于面向对象的开源三维绘图软件包,和其它的的三维绘图引擎如OSG.OGRE不同之处在于,VTK可视化对象主要是各种数据,更加注重对数据分析处理后的可视化,可视化的内容是人们无法直接感受到的 ...

  4. GIS中的坐标系定义与转换

    GIS中的坐标系定义与转换 青岛海洋地质研究所 戴勤奋 2002-3-27 14:22:47 ----------------------------------------------------- ...

  5. Unity 中的坐标系

    说明: 注意几点: 0 行向量右乘矩阵与列向量左乘矩阵,两个矩阵互为逆矩阵 1 法线转换与mul,mul函数左乘矩阵当列矩阵计算,右乘当行矩阵计算 2 叉乘与左右手系,左手系用左手,右手系用右手,ax ...

  6. 聊聊GIS中的坐标系|再版

    本文约6500字,建议阅读时间15分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/ ...

  7. Cesium中的坐标系及转换

    在我们开始学习Entity之前,我们首先需要先学习下Cesium中的坐标系,Cesium中有多个坐标系,在进行添加Entity时经常会使用到. 一.坐标系介绍 我们先来列举下Cesium中的坐标系:W ...

  8. JAVA中获取当前系统时间及格式转换

    JAVA中获取当前系统时间   一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; publi ...

  9. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

随机推荐

  1. logo的普遍写法

    h1为了搜索引擎优化<div class="logo"> <h1> <a href="#">XX</a> < ...

  2. 历史上最详细的SpringCloud搭建微服务的过程。(包括注册中心,服务提供者和服务消费者)

    首先搭建注册中心,创建一个springboot的maven工程. 工程创建完成之后,先在资源文件中的application.properties中写配置文件. server.port= spring. ...

  3. Mysql安装多版本数据库

    1.下载对应版本压缩包 2.解压缩文件 3.到解压缩文件,添加my.ini文件,修改相关的配置,如端口,文件路径等 # For advice on how to change settings ple ...

  4. magento开发必备插件列表汇总

    magento和wordpress一样,因为开放而倍加优秀 ,搜集下常用的magento插件以便大家使用时更加方便快捷 导航放到右侧:magento-community/RicoNeitzel_Ver ...

  5. bzoj1001 [ICPC-Beijing 2006]狼抓兔子

    我满心以为本题正解为最短路,结果到处都是最大流…… 几乎所有的都写了什么“对偶图”跑最短路,但我真的不知道什么叫做对偶图---------------------------------------- ...

  6. homebrew -- mac os 系统下的 apt-get、yum

    linux下有很方便的包管理器如:apt-get.yum,mac下也有类似的工具:Homebrew 和 Fink.MacPort.Flink是直接编译好的二进制包,MacPorts是下载所有依赖库的源 ...

  7. 使用ionic来build安卓apk时,报CordovaError: Requirements check failed for JDK 1.8 or greater

    本地配置了JDK和jre的本地环境变量之后,在命令行中运行Java.javac等都能正常输出,但是在使用ionic cordova build android 来打包ionic的程序时,会提示 Cor ...

  8. Linux环境进程间通信----信号与管道

    一.信号: 信号主要用来通知进程异步事件的发生.可以使用“kill -l ”命令来显示系统中的信号.进程可以忽略大部分信号,但是有两个是不能忽略的: (1)SIGSTOP:这个信号将中断进程的执行. ...

  9. 深入理解PHP原理之Opcodes(PHP执行代码会经过的4个步骤是什么)

    深入理解PHP原理之Opcodes(PHP执行代码会经过的4个步骤是什么) 一.总结 一句话总结: 1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens) 2.Parsin ...

  10. postgresql修改自增序列

    ----删除前先解除 id 对该序列的依赖ALTER TABLE tablename ALTER COLUMN id SET DEFAULT null;DROP SEQUENCE IF EXISTS ...