3D游戏基础 Direct3D(三) 固定管线之变换

在前面的章节已经说到过,在固定管线中,第一步动作便是对图元做坐标变换。所谓图元(primtive),就是一堆顶点,这些顶点构成了特定的几何形状,这就叫做图元。

所以,我们做变换的对象说到底,就是顶点。
在固定管线中,变换分成2个步骤:
       局部坐标系到世界坐标系 和  世界坐标系到观察坐标系。
局部坐标系:就是建模坐标系,它是在建模时由3DMAX之类的工具定义的;
世界坐标系:用来统一场景中各个object的位置、尺寸等规格;
观察坐标系:也就是摄像机的坐标系。

局部坐标系到世界坐标系变换:
这个变换是为了把在不同建模工具或者有用不同规格的建模尺寸下设计的模型,都统一到一个通用的坐标系下面。这个动作的作用,就像秦始皇统一度量衡一样。从局部坐标系到世界坐标系 这个变换的动作,通常是在游戏设计时,由 游戏工具(如:场景编辑器)来预先计算,并且为每个模型都计算出一个变换矩阵(即 记录模型在游戏场景中的 大小、朝向、位置),叫做世界坐标变换矩阵。在渲染时,实时的应用这些矩阵来参与运算,写法:
D3DXMATRIX worldMatrix; //这个矩阵就从文件中读进来
Device->SetTransform(D3DTS_WORLD, &worldMatrix);
注意,使用宏 D3DTS_WORLD


从世界坐标系到观察坐标系变换:
这个变换动作,实际上是为了简化运算而做的。这样变换之后,所有的顶点也就可以直接转换为向量,非常的便于某些计算。这个动作通常是,将摄像机平移到世界坐标系原点,再旋转摄像师,使它的光轴与世界坐标系z轴方向一致。与此同时,空间中的所有几何体都要随摄像机一同变换,以确保摄像机的视场不变。这个变换叫取景变换,变换后得到观察坐标系。
写法如下:
D3DXMATRIX ViewMatrix;
D3DXVECTOR3 position, targetPoint, worldUp;
D3DXMatrixLookAtLH(&ViewMatrix,  //[OUT], 计算出的变换矩阵
                                        &position, //摄像机位置
                                        &targetPoint, //摄像机的观察朝向
                                        &worldUp);//摄像机的y朝向,也就是头的朝向
Device->SetTransform(D3DTS_VIEW, &ViewMatrix);
注意宏,D3DTS_VIEW
其实,D3DXMatrixLookAtLH()函数只是类似功能函数中的一个,注意后缀 LH 这表示左手坐标系,对应的还有一个右手坐标系,它们的区别在于:左手系 其z轴向里为正;右手系向外为正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值