3D Camera一点介绍
来源:互联网 发布:d3.js demo显示 编辑:程序博客网 时间:2024/04/19 07:20
原文链接:http://www.badlogicgames.com/wordpress/?p=1550
Camera是通过在3D空间中的位置定义的, 方向由指向特定方位的单位向量组成。想象一个箭头从你的头顶指向天空,这个就是指向上的方向向量。同样的,把你的头指向左边和右边。你能想象出方向的改变吗? 方向向量(direction vector)能够让我们告诉OpenGL 如何设置Camera的方位。而位置向量(position vector)则定义了Camera 在3D世界中的位置。
位置和方位只是Camera其中的一部分。Camera 另个一重要的属性就是视锥(view frustum)。在上面的图片中,可以看到一个椎体在视点(图中眼睛的位置)被截去了顶端,这个就是视椎。所有在这个截头锥体(frustum)里面的东西都会被显示在屏幕上。这个截头锥体被6个切面(clipping planes)所定义,分别为:near, far, left, right, top and bottom。在上面的图片中的所看到截头锥体只是整个椎体的一侧。对于近切面它有一个特殊的作用:你可以把它想象成一个Camera 生成图画的表面(surface),这个把3D空间转换为2D平面过程,称为投影(projection)。
正交投影(Orthographic projection) 通常被用于2D图形。不管物体距离Camera有多远,在屏幕都会被显示成一样的大小。
而透视投影(Perspective projection)是真实世界中的投影:距离我们眼睛越远的物体,看起来会越小。
这种有趣的现象,在我们Camera属性中,其实就是改变视椎的形状。在透视投影中,视椎就像上面图片中的一样;而在正交投影中,视锥其实是一个盒子。真正的投影过程其实非常简单:对于物体上的每个点,我们画一条线连接至Camera的位置,并计算出哪里触碰到视锥的近切面。下面的图片展示了两种投影的原理:
透视投影 正交投影
(绿色的部分就是看到的投影后的物体)
你可以看出在透视投影中,物体在投影后缩小了,而在正交投影中物体的尺寸并没有改变,你知道这是为什么吗? 没错,造成这种差异的就是视锥的形状!在OpenGL里不管你用的是SpriteBatch还是绘制一些字体,你永远都是在3D的世界中。技巧就在于,当你使用正交相机(orthographic camera)时,你就假装Z-axis并不存在。下面是一个在3D空间中的2DSprite:
所以请忘记2D 与 3D 的区别吧。其实它们没有区别。当你通过SpirteBatch绘制图形,并且没有设置任何的矩阵(matrices)时,那么你的2D 视锥就像下面的图片所示的那样:
就是一个简单的盒子!我们所有的Sprite都忽略了z-axis,只在X/Y平面上移动,从而产生好像在2D空间中的错觉。
透视相机(perspective camera)使用两个属性来定义自身的投影: 视野(the field of view) 和 宽高比(aspect ratio)。
视野其实是一个定义 视锥应该开多大的角度,如下右图:
而宽高比就是视窗(viewport)的宽度和高度的比值。 视窗就是Camera渲染图像的矩形区域(如上左图)。所以如果的屏幕分辨率为480*320 pixels,那么你的宽高比就是 480/320。
对于正交相机(orthographic camera)的投影仅仅就是由视窗的尺寸所决定,就像之前的图片所表示那样(看上去像个盒子那张)。
0 0
- 3D Camera一点介绍
- JavaFX 3D部分介绍(2) Camera
- JavaFX 3D部分介绍(2) Camera
- Camera 3D旋转效果
- Android Camera 3D效果
- Android Camera 3D效果
- Android Camera 3D效果
- Android Camera 3D效果
- 3d 鼠标控制Camera
- android.graphics.Camera 仿3D效果
- Unity 3D--Camera摄像机组件
- android camera 实现3d效果
- 转载:Android Camera 3D效果
- Camera实现3D翻转效果
- camera 3d特效 详解与进阶
- 3-D Mapping With an RGB-D Camera粗译
- Android2.3的Camera架构介绍
- RGB-D Camera 汇总
- utime
- 再谈casperjs截图, 使用代理
- 仿射变换和仿射线性群
- linux建立网桥
- utimes
- 3D Camera一点介绍
- 计算机常用术语解释
- 虚函数、虚继承、sizeof
- 剪花布条
- 【Leetcode】Binary Tree Inorder Traversal
- Hadoop-2.4.1学习之高可用ResourceManager
- 使用Hibernate需要导入的包
- 牛顿-拉夫逊法进行潮流计算matlab源程序
- R6034错误,C Runtime Error