几个经典的数学库之一学习---VCGlib(3)
Camera and shot abstraction for managing views
视图的定义,以及mesh的操作说明。
Shot(镜头) and camera(相机)
shot摄像结构以及camera库。对于相机模块预览之后,shot (镜头)类的所有组件将会被介绍。然后给出重要操作的例子,如投影Projection 与 Un-Projection。以及在镜头之间与镜头与轨迹制件的部分。最后,单镜头的例子展示。
The camera model
一般情况下,摄像机参数可以分为以下两组:
(1)Extrinsic (or external) parameters:外部参数, 即相机的位置等参数。
(2)Intrinsic (or internal) parameters:内部参数,即与特别的相机特征,如焦距的长短等.

透视相机模式:perspective camera model
实际上,一个简单的透视相机模式,外部的参数用来将世界坐标系(world-coordinates )中的点(Xw,Yw,Xw)转化为相机3D坐标系中的点(X,Y,Z):

外部参数是3X3的旋转矩阵R, 以及一个转移向量 T。即定义相机的朝向(正方向)与位置。为了将相机3D坐标系中的点专为2D图像平面坐标系Plane Coordinates(Xu,Yu), 需要知道View Point(视点)与图像平面(投影平面)的距离,即图中的OO1所示的距离。这个值,标记为f,作为 focul length(焦距长度),则在相机坐标与图像坐标中的点之间的关系是下面的关系:
即:透视的效果,Z越远,则显示在XY面的投影越小;焦距f越大, 在投影片面的坐标Xu,Yu越大。
透镜引入的失真(the distortion introduced by the lenses):

总结:一个十分精确的相机模型可以进行以下描述:
- 一个3X3的旋转矩阵,一个转移向量T 作为外部参数;
- 焦炉的长度, 透镜误差的中心,以及一个或者多个的误差系数 ,作为内部参数。
这些条件只是一个基本的保证,如果需要更精确的表征,则还需要其他内容(www.cnblogs.com/icmzn)
The VCG Shot
VCGlib中的镜头模型定义,可以在文件: vcg/math/shot.h中。
shot(镜头)可以由两个元素组成:
1. Extrinsics 参数组: 在类Shot中(ReferenceFrame框架引用)且包含ViewPoint, 与View Direction。作为 旋转矩阵 rot,以及转移向量 tra。 注意,tra对应 View Point , 且 rot 对应 引用框架的坐标轴,如下:
rot[0][0 1 2] == X axis
rot[1][0 1 2] == Y axis
rot[2][0 1 2] == Z axis矩阵由坐上的3X3矩阵rot 并且第4列与(0.0.0.1)在底部行变换世界坐标到镜头应用框架坐标一致。
2.Instrinsica 参数, 以Camera type 类型保存, vcg/math/camera.h文件。决定了在 camera中的 point的投影在2D的投影平面中。这些参数与外部extrinsic 参数无关,因为存在许多的shot(镜头)能够分享 intrinsic parameters 集合。
Camera 属性如下:
Code Examples
http://vcg.isti.cnr.it/vcglib/group__code__sample.html#details
给出了一些小栗子,来展示VCGlib的特性。
在vcglib/apps/sample. , 可以使用qmake *。pro project 文件来编译每个文件。
endl;
几个经典的数学库之一学习---VCGlib(3)的更多相关文章
- 几个经典的数学库之一学习---VCGlib(2)
几个经典的数学库之一学习---VCGlib(2) 1. Optional Component(可选的组件) 有许多Vertex和Face的属性并不是一直都是必要的,如Face-Face的邻接关系.VC ...
- 几个经典的数学库之一学习---VCGlib(1)
1. VCG Libary是Visulization and Computer Graphics Libary(可视化与计算机图形学库)的缩写,是一个开源的C++模板库,用于三角网格和四面体网格的控制 ...
- DirectX11 学习笔记6 - 使用D3DXMATH数学库的一个样例
这个样例是在之前的样例基础上 .把之前d3dx10math数学库换成了最新的d3dxmath.长处就不说了.先上效果图 所有代码.以及效果文件 文件结构 所有代码: 依照上图的文件顺序 #pragma ...
- <泛> C++3D数学库设计详解 向量篇
// 注:本内容为作者原创,禁止在其他网站复述内容以及用于商业盈利,如需引用,请标明出处:http://www.cnblogs.com/lv_anchoret/ Preface 为了支持光线追踪的学习 ...
- GEOS库的学习之一:介绍和编译
对GEOS库的学习,源于一个项目:要在c++中判断二维平面中两个多边形的关系(无论凹凸).也就是判断两个多边形是否相交.相容等.听起来很简单,可实现起来却比较难,而项目又催得紧.于是我去搜索了一下,看 ...
- 标准模板库(STL)学习探究之stack
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- 微软数学库XNAMATH(DirectXMath)
这篇文章只是对着MSDN文档的一些吐槽和总结记录,个人笔记之类的 运行库与头文件 老实说,这个数学库微软还是更像蛮频繁的,我这里有的最早版本是伴随DX9的,在这个头文件里面 最近在使用DXUT,顺便也 ...
- 一个很cool的C#的高性能数学库
High Performance Math Library for C# and .NET是一个很cool的C#的高性能数学库,3D效果也很不错,下图是首页上的一个例子.他也有一个交互的网页,你可以自 ...
随机推荐
- mysql in 过滤 解决转义问题
IF(headUser!='',instr(concat(',',headUser,','),concat(',',cr.headUser,',')),TRUE);
- js函数中变量声明提前
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- rook 记录
更改rook 集群的配置 https://github.com/rook/rook/blob/master/design/cluster-update.md rook集群升级流程 https://ro ...
- 破解版ps
http://www.sdifen.com/adobe-photoshop-cc.html
- Java的继承与接口
为什么Java里面只允许单一继承,但允许实现多个接口? 1,为什么不能实现类的多继承?主要是防止多个类有相同的方法名,然而方法体不一样,子类就比较难选择了.所以java和C#不支持类的多继承2,允许具 ...
- collections系列之Counter
collections模块中有一个叫做Counter的类,该类的作用就是计数器,Counter是对dict的加工,所有Counter继承了dict的方法 1.创建一个Counter,需要import ...
- 27-x的y次方的后三位数
题目内容: 输入描述 数据分n组,对于每组数据有两个正整数x和y(x的y次方必须大于100) 输出描述 对于每组输出,输出一个值,即x的y次方结果的最后三位数 提示:13的13次方为:30287510 ...
- git设置别名alias
每次用git拉去版本库都很烦,特别是要从非origin源,非master分支, 例如 git pull gitlab mybranch ,这样很蛋疼. 1.写个sh去处理 2.可以通过git的别名设置 ...
- jquery源码学习-初始(1)
最近几天一直在研究jquery源码,由于水平太低看得昏头转向.本来理解的也不是很深刻,下面就用自己的想法来说下jquery是如何定义构造函数初始化的.如果有什么不对的地方,希望个位高手指出. 首先要了 ...
- jDeveloper运行慢
最近在使用 Jdeveloper 10.1.3.3 版本时发现速度奇慢无比,后经Google,发现如下解决方案:在 jdev.conf 文件的末尾加上如下两行,速度即可得到显著的提高. AddVMOp ...

