【DirectX 11 SDK 学习笔记】3D Spaces



Summary

在之前的例子中,我们成功的在应用程序窗口中渲染了一个三角形。但是我们并没将太多的心思放在之前选择的顶点的位置上,在这个例子中,我们将深入细致的学习3D坐标和变换。

这个例子的输出结果会在窗口上渲染3D对象。

 

3D Spaces

在之前的例子中,三角形的三个点被刻意的完美的排列在屏幕上,当然,不是每种情况都这么美妙。我们需要一个能够在3D空间中表示和显示物体的系统。

在现实世界中,物体存在于3D空间,这意味着如果我们要将一个物体放在世界中的特定位置,我们需要使用坐标系,并且定义和位置一一对应的三维坐标。在计算机图形学中,3D空间通常用笛卡尔坐标系来表示。在这个坐标系中,有两两垂直的三个轴XYZ,能够定义坐标系中的每个点。笛卡尔坐标系又被更进一步的分为left-handedright-handed 坐标系。具体的区别方法,高数或者大物上都有。



现在,我们讨论过了3D空间的坐标。不同位置的不同点坐标不同。在1D空间中,假设我们有一个尺子,然后我们取一个点P,在5尺子的英寸位置处。然后我们将尺子向右移动1英寸,点P现在处在尺子上标记为4英寸的地方。通过移动尺子,使得参照系发生变化,即使不移动点,我们也会得到新的坐标。


3D世界中,空间通常由一个原点和三个相交于原点的3个不同的轴:XYZ。计算机图形学中有一些常见的空间:object space,world space, view space, projection space, screen space.



Object Space


注意到上图的正方体的中心在坐标原点, object space也被称为model space,这是艺术家在创建3D模型的时候使用的空间。通常,艺术家创建的模型都以原点中心,这样可以简化transformation操作,例如旋转变换,参看transformation的讨论。八个点的坐标如下:


    (-1, 1, -1)
    ( 1, 1, -1)
    (-1, -1, -1)
    ( 1, -1, -1)
    (-1, 1,  1)
    ( 1, 1,  1)
    (-1, -1,  1)
    ( 1, -1,  1)


因为艺术家在设计和创建模型的时候,主要使用的是object space,所以存储在磁盘上的模型也也是使用object space。应用程序能够创建表示这些模型的vertex buffer,并用模型数据来初始化对应的vertex buffer。因此,vertexbuffer中的顶点通常也使用object space,意味着vertex shader的输入数据也是使用object space


 


World Space


Word sapce被场景中的所有物体共用。常常用来表示我们想要渲染的物体之间的空间关系。为了让world space更加直观,可以想象我们面朝北方,站在长方体房间的西南角。假设我们站在的角落是原点(0, 0, 0)。右边是X轴,竖直朝上的是Y轴,前方的是Z轴,和我们面向的一个方向。我们这样做之后,房间里面的任意一个点都能够被相应的XYZ坐标来定义。例如,可能在我前方5英尺,右边2英尺的地方有把椅子,在椅子的正上方8英尺处有一个吊灯,那么相对的,我们可以将椅子的坐标表示为(2,0,5),灯的坐标为(2,8,5),就像我们看到的,worldsapce之所以被称为 word sapce,是因为它能告诉我们世界中物体的相互关系。


View Space


View space通常也称做 camera space,和word sapce相似,主要在全部场景中使用。不同的是,在 view space中,原点坐标在观察着或者是摄像机处。观察方向(观察者看像的方向)Z轴正方向,竖直朝上定义为Y轴的正方向。

左边的图片描述了由一个人形物体和一个观察这个物体的观察者(摄像机)组成的场景。其中,world space 的原点和轴是红色。右图中,反应的是 veiw space world sapce的关系。蓝色的是view space。澄清一点,就是右图中的viewspace和左侧的world space方向不同。注意在view space,正方向为观察方向。



Projection Space


Projection space是指在view space应用了projection transformation后得到的空间。在这个空间中,可以认为XY坐标范围从-11Z坐标的从01


 


Screen Space


Screen space通常指 frame buffer中的偏移。Frame buffer通常是2D texture

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值