首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于Virtex-5的3D体感互动游戏设计(4)

基于Virtex-5的3D体感互动游戏设计(4)

谈完了上次的动作捕获部分,鉴于图像处理的复杂性,模式识别现在对于我们的动作不活并不能达到很好的稳定性和普适性,我就用加速度传感器和角速度传感器结合的方法来探讨我们的设计。

下面首先我们来谈一谈3D显示的内容, 3D就是three-dimensional的缩写,译为三维图形,在计算机里显示3d图形,就是说在平面里显示三维图形。不像现实世界里,真实的三维空间,有真实的距离空间。计算机里只是看起来很像真实世界,因此在计算机显示的3d图形,就是让人眼看上就像真的一样。人眼有一个特性就是近大远小,就会形成立体感。计算机屏幕是平面二维的,我们之所以能欣赏到真如实物般的三维图像,是因为显示在计算机屏幕上时色彩灰度的不同而使人眼产生视觉上的错觉,而将二维的计算机屏幕感知为三维图像。基于色彩学的有关知识,三维物体边缘的凸出部分一般显高亮度色,而凹下去的部分由于受光线的遮挡而显暗色。这一认识被广泛应用于网页或其他应用中对按钮、3d线条的绘制。比如要绘制的3d文字,即在原始位置显示高亮度颜色,而在左下或右上等位置用低亮度颜色勾勒出其轮廓,这样在视觉上便会产生3d文字的效果。具体实现时,可用完全一样的字体在不同的位置分别绘制两个不同颜色的2d文字,只要使两个文字的坐标合适,就完全可以在视觉上产生出不同效果的3d文字,另外,在1839年英国科学家查理-惠斯顿爵士根据人类双眼成像不同的理论发明了立体眼镜,让人们的左眼和右眼在看同样图像时产生不同效果,这就是当今3D眼镜的基础原理。3D也有两种:
(1)我们平常在显示器上看到一些所谓的3D立体图像,其实只是3D立体图像的投影
仅仅是一个平面上的3D。因为我们的左眼睛和右眼睛看到的画面是相同的,我们并不能从这些画面里体会到场景的纵度以及深度。那么要看到真正的画面应该怎么办呢?必须要让我们的两只眼睛在同一时间看到不同的画面,才能体验从其中体验到真正的立体虚拟世界。
(2)视觉移位创造真实场景3D影像的产生归结起来就是“视觉移位”
人的两眼左右相隔在6厘米左右,在观看一个物体时,由双眼的左右视点分别观看。左眼将看到物体的左侧,而右眼则会看到其中间或右侧。当两眼看到的物体在视网膜上成像时,左右两面的印象合起来,就会得到最后的立体感觉。而这种获得立体感的效应就是“视觉位移”。
在拍摄3D影像时,需要用两台摄影机模拟双眼,分别拍摄两条影片,然后将这两条影片同时放映到银幕上,通过一定的技术手段,使观众左眼只能看到左眼图像,右眼只能看到右眼图像。这样根据“视觉移位”原理我们就能看到立体的画面了。这就是我们所说的3D影像。下面就来列出了几种不同的3D:红绿滤色透镜;分像偏光立体影像;主动式数字立体影像;被动式DLP圆偏振技术;裸眼3D立体图像
下面我要谈到的实际上是3D立体图像的投影,仅仅是一个平面上的3D 。这个的实现需要进行3D图形的渲染,对于它的实现有两种方式,硬件的方式和软件的方式,现在的3D游戏都是通过软件渲染的方式来实现的,用FPGA设计的可以用硬件来设计3D渲染的模块,通用的处理器及MPU都是用软件的方式来实现,在这里我先谈一下用硬件的方式来实现的方法:
(1)用硬件来实现:3D图形在屏幕上的显示,实际上是一个将离散的模型和关卡放置到适当的空间位置、再从人眼所观察到的角度将它们投影到正确的平面位置、最后填充像素点的过程。因此,3D元素要经过一系列的变换过程,下面用图形来描述了这个过程:

由上图所依据几何变换3D几何加速引擎的步骤,可以知道他的相对应的框架,本文的3D几何加速引擎包括几何模型变换模块,光照模块,图元形成模块和显示处理模块。
局部坐标是3D实体在其局部坐标系中的坐标。在创建3D物体时,它通常有自己的一组坐标轴,一般情况下物体的中心位于局部坐标系的原点。世界坐标表示的是物体在虚拟空间中的实际位置,世界坐标是绝对坐标,有固定的大小,它不随着观察者方向的变化而变化I”I。将局部坐标变换为世界坐标,就是将每个物体的中心平移到世界空间中所需的位置。相机坐标是以操作者的观察点和观察方向为参考的坐标,是相对坐标。操作者操作使得观察点和观察方向发生变化,世界空间内各点的观察坐标也就发生变化。一般将采用相机坐标的空问称为观察空间。世界坐标到相机坐标的变换指的是对世界坐标系进行移动,使得相机位于世界坐标系的原点,为建立相机坐标需定义一个视景体,用于表示通过相机的虚拟镜头可以拍摄到的范围。视景体是由近裁剪面和远裁剪面以及水平和垂直视野定义的。位于视景体内的物体将被渲染到屏幕上。
物体剔除指的是将物体删除,以免在整个流水线中对其进行处理。物体剔除可以在世界空间中进行,也可以在相机空间中进行。这是3D引擎流水线中最重要的步骤,因为在大多数情况下,只有几个物体位于场景中,其他物体要么在视野范围外,要么在观察者后面,不需要对他们处理。背面消除指的是删除背向视点的多边形。这种测试通常是在世界空间而不是相机空间进行,这样可通过背面消除删除大量的多边形,避免对它们进行世界坐标到相机坐标变换。
当完成世界坐标到相机坐标的转换后,相机为于相机坐标的原点,且观察角度为0度,相机坐标到透视坐标的变换指的是将物体的顶点投影到视平面上。如果给定视平面与投影点之间的距离,可以通过三角形相似很容易计算出物体上任何一点和视点之间的连线与视平面的交点。
透视坐标到屏幕坐标变换是指将视平面映射到屏幕,是3D流水线的最后一个阶段。它将视平面坐标进行缩放,变成屏幕坐标。而且,大多数光栅屏幕的原点位于左上角,Y轴的方向与标准2D笛卡尔坐标系相反。当然,如果在透视变换中,视平面的大小与视口相同,则无需执行缩放操作,但在大多数情况下,需要执行平移,并反转Y轴,在投影时,假设视平面的中心为原点,其+x轴指向右方,+y轴指向上方,而光栅屏幕的原点位于左上角,Y轴方向与此相反。因此,无论在什么情况下,都需要执行某种形式的视口变换。经过3D流水线光栅化前面的步骤后,多边形面的3D空间信息,纹理信息,光照信息都已经对应到屏幕上的像素点,光栅化就是把这些存储在内存中的信息显示在计算机显示设备上。


附件大小12.jpg32.4 KBshixian.jpg20.01 KB3DShi_Xian_.jpg52.8 KB
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表