Direct3D 四大变换(物体坐标系变化,取景变换,投影变化,视口变化)



首先我们先学习如何让物体在世界中(缩放,旋转,平移),  如果要进行其中一个操作就要创建出一个矩阵, 矩阵的名称对应(缩放矩阵,旋转矩阵,平移矩阵等等) ,通过矩阵改变X,Y,Z

我们只需要调用相应的函数,会帮我们创建出想要的矩阵.

平移矩阵:

D3DXMATRIX juzheng;        //创建矩阵变量
D3DXMatrixTranslation(&juzheng,0,0,20);        //调用平移矩阵传入(x,y,z)移动距离,返回一个矩阵表示向z轴前进10米
Device->SetTransform(D3DTS_WORLD,&juzheng); //让物体进行移动

旋转矩阵:

D3DXMATRIX mTransX;
D3DXMATRIX mTransY;
D3DXMATRIX mTransZ;
D3DXMATRIX mTrans;

float fAngle = 50 * (2.0f * D3DX_PI) / 360.0f;    //旋转50度
D3DXMatrixRotationX(&mTransX,fAngle);            //创建绕X轴旋转50°
D3DXMatrixRotationY(&mTransY,fAngle);            //创建绕Y轴旋转50°
D3DXMatrixRotationZ(&mTransZ,fAngle);            //创建绕Z轴旋转50°
mTrans = mTransX * mTransY * mTransZ            //使用矩阵相乘,创建出新的矩阵表示X,Y,Z都旋转50°
Device->SetTransform(D3DTS_WORLD,&mTrans);

缩放矩阵:

D3DXMATRIX mTrans;
D3DXMatrixScaling(&mTrans,1.0f,1.0f,5.0f);            //Z轴放到5
Device->SetTransform(D3DTS_WORLD,&mTrans);

如果你想要一个矩阵具有缩放和旋转, 新矩阵 = 旋转矩阵 * 缩放矩阵;

一般操作物体是 缩放 –> 旋转 –> 平移


接下来学习下如何改变摄像机的视角(取景变化)

D3DXMATRIX matView;
D3DXVECTOR3 vEye(0.0f,0.0f,-10.0f);                //摄像机的位置
D3DXVECTOR3 vAt(0.0f,0.0f,0.0f);                //观察点的位置
D3DXVECTOR3 vUp(0.0f,1.0f,0.0f);                //摄像机向上的向量(0,1,0)代表向前方看
D3DXMatrixLookAtLH(&matView,&vEye,&vAt,&vUp);        //计算出取景变化矩阵
Device->SetTransform(D3DTS_VIEW,&matView);            //改变摄像机的位置

先写到这里=。= 以后在补充未完

时间: 2024-12-11 19:54:21

Direct3D 四大变换(物体坐标系变化,取景变换,投影变化,视口变化)的相关文章

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记7——四大变换

第13章 世界变换,取景变换,投影变换,视口变换 在Direct3D中,如果为进行任何空间坐标变换而直接绘图的话,图形将始终处于应用程序窗口的中心位置,默认这个位置就成为世界坐标系的原点(0,0,0).而且我们也不能改变观察图形的视角方向.默认情况下的观察方向是世界坐标系的z轴正向方向. 世界变换运算是为了能在世界空间中的指定位置来绘制图形 取景变换运算是为了以不同的视角观察图形 投影变换为了将相对较远的图形投影到同一个平面上并体现出"近大远小"的真实视觉效果 视口变换是为了控制显示图

EF更新,数据库值变化,前台页面并不变化,刷新也不变化,重新运行程序则变化----开发中遇到的问题(已解决)

首先说一下我遇到这个情况的代码情景,首先上错误代码 UserInfo userInfo = Session["UserInfo"] as UserInfo; var attentionTopicInfos = userInfo.TopicInfos.Where(t => t.TopicId > 0); 这段代码所呈现的问题正如题目,数据库值变化,前台页面并不变化,刷新也不变化,重新运行程序则变化. 断点调试----看到无论如何更新,查出来的attentionTopicInf

商品详情页面特殊制作,获取网页的高度,collectionView根据内容的变化其高度也随着变化

商品详情页面特殊制作,获取网页的高度,collectionView根据内容的变化其高度也随着变化,首先先看下效果图: 然后我来介绍一下这个界面的总体架构,整个页面上放置一个tableView,下面的网页是tableView的footerview,中间规格所在的区域是一个cell上放置一个collectionView, 问题点1:商品规格可能有很多种,比如颜色.重量.也可能没有规格,所以中间的cell的高度是根据规格的多少而变化的,那么collectionView创建完成以后要怎么通知tableV

顶点法向量从物体坐标系变换到世界坐标系

3维网格模型的顶点的法向量一开始是定义在模型坐标系中的,在将模型布置在场景中后,根据光照模型计算颜色时需要用到顶点法向量,由于光照都是在世界坐标系中进行计算,这时用到的法向量也应该是定义在世界坐标系中.所以我们需要设法将顶点法向量从模型坐标系中转换到世界坐标系中. 我们已经知道通过缩放.旋转.平移三种基本操作合成的model矩阵可以将网格顶点坐标从模型坐标系中转换到世界坐标系中.那么这个model矩阵是否也可以将顶点法向量转换到世界坐标系呢?如果不行,那么需要找到一个可以完成这个任务的矩阵. 1

CSS3 03. 3D变换、坐标系、透视perspective、transformZ、transform-style添加3D效果、backface-visibility元素背面可见、动画animation、@keyfarmes、多列布局

1.左手坐标系 伸出左手,让拇指和食指成"L"形,大拇指向右,食指向上,中指指向前方.这样我们就建立了一个左手坐标系,拇指.食指和中指分别代表X.Y.Z轴的正方向.如下图 CSS中的3D坐标系 CSS3中的3D坐标系与上述的3D坐标系是有一定区别的,相当于其绕着X轴旋转了180度,如下图 左手法则 左手握住旋转轴,竖起拇指指向旋转轴正方向,正向就是其余手指卷曲的方向. 透视 perspective perspective:400px: 电脑显示屏是一个2D平面,图像之所以具有立体感(3

简单的JS多物体的运动---运动和透明度的变化

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://blog.csdn.

swiper 窗口宽度变化,页面宽度高度变化 导致自动滑动 解决方案

又又又又是swiper问题 背景: pc端项目,rem布局,swiper作为步骤条(上一步,下一步)的功能. 发现在屏幕拖动,宽高的变化,窗口大小的变化 会引起swiper自动滑动(到下一步). 在下载文件链接时候回轻微引起一点点宽高的变化,导致直接滑到下一步. Chrome浏览关闭底部下载内容时候也会导致滑动 思考: 1.刚开始以为是某个地方不小心多加了下一步的操作,一直在查找 2.然后以为是下载的方法导致的,更换了多种下载方案 3.实在没有找出,准备debugger的时候发现,屏幕变化也会引

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记8——光照与材质

第14章 绘制出质感的世界--光照与材质 1. 光照与光源 在Direct3D中的光源类型和光照类型是不同的两个概念,光照模型描述的是光线的反射特征,而光源类型主要强调的是能够产生这些光照模型的方式以及光线的位置,方向,强度等特征. 四大光照类型 环境光:基于整个自然界环境的整体亮度,称为环境光或者背景光,没有位置或者方向上的特征,只有一个颜色亮度值,不会衰减,在所有方向和所有物体表面上投射的环境光的数量是恒定不变的(有点像我们白天的自然光).在Direc3D中设置环境光可以直接使用setRen

坐标变换理解

1.简化变换的思想: 使用惯性坐标系(惯性坐标系是世界坐标系平移到物体坐标系的位置)可以简化物体-世界,世界-物体,或者说任何两个坐标系间的转换做一个中间的转换,使问题变得简单.使用嵌套坐标系(父坐标系-子坐标系-子坐标系)也可以分解问题,简化复杂的变换逻辑.其实把问题简单化思考的方法,不外乎实例化,拆分它,转换它,再组合转换抽象回来,就可以很elegant的解决问题了. 很多物体间的方位和运动,需要在同一个坐标系中才能进行,以及渲染管道中本身要求多坐标系间转换来实现渲染. 2.物体变换和坐标系