D3DX 9.9 LEARNERNOTO
DirectX 9.0 3D游戏开发编程基础
一、开发工具:vs2013 or VC++2005 Direct3D API http://msdn.microsoft.com/directx/sdk DirectX SDK
二、俩种运行程序方式:REF和硬件
三、开发环境配置:DirectX应用程序的工程类型是WIN32 Application,在vs2013中需指定DirectX头文件和库文件所在路径。
四、D3DX可用于开发类型广泛的3D应用程序。
五、重点学会使用Direct SDK 文档 和SDK 例程 本书网站:www.moon-labs.com 相关的配套文件:www.wordware.com/files/dx9下载
第一部分、基础知识,主要提供预备的数学知识介绍
3D空间中的向量
向量在粒子系统中,可以用来表示粒子速度和加速度,相比于其他3D图像学应用中,向量大多表示方向,例:光线的方向,摄像头的方向,多边形的朝向等。
左手坐标系:z轴正方向穿进纸面
右手坐标系:z轴正方向穿出纸面
用于描述向量的坐标称为分量(component)
4个特殊的3D向量,零向量,x,y,z轴上的单位向量(unit vector)
D3DX库中,我们用类D3DXVECTOR3表示3D空间中的向量,向量也有其自身的代数运算。
掌握向量的求模公式,向量的规范化(变为单位向量)normalizing,可以通过将向量的每个分量都除以该向量的模实现规范化。
D3DX库中,用函数实现向量的规范化,该函数返回指向变换结果的指针,所以该函数可以作为另一个函数的参数来使用。在大部分情况下,除非特别声明,一个D3DX数学函数均返回一个指向结果的指针。
只有维数相同的向量才能加法和减法,在各个分量上运算。
数乘:标量可以与向量相乘,该运算可对向量进行放缩。
点积:俩向量(维数相同)点积,等于对应坐标相乘的和,或者两向量的点积等于二者夹角的余弦再乘以两个向量的模的乘积。如果u和v都是单位向量,则u 和 v就等于u,v夹角的余弦。D3DXVec3Dot(&v,&u);
点积结果是标量,叉积结果是向量,如果取俩向量的叉积,运算所得出的向量与这俩向量彼此正交。
叉积的运算规则:叉积不具备交换性。可用左手法则来判断叉积的方向。
分量形式:P=U*V
Px=(UyVz - UzVy)
Py=(UzVx - UxVz)
Pz=(UxVy - UyVx)
D3DXVECTOR3 *D3DXVec3Cross()
矩阵
一个m*n矩阵是一个m行,n列的矩阵数组。
我们用行和列组成的双下标来标识矩阵的元素,第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引。
一个矩阵仅包含单行或单列。这样的矩阵称为行向量或者列向量。
矩阵相等是俩个矩阵维数相同且对应元素也相同,则二者相等。
矩阵数乘是用该标量乘以矩阵的每个元素。
两个矩阵只有维数相同时,方可进行减法或加法运算。
矩阵乘法是矩阵在3D图形学中最重要的运算。借助矩阵乘法,我们能够对向量实施转换,也可将几个变化进行组合。
为计算矩阵乘积AB,矩阵A的列数必须等于矩阵B的行数。矩阵乘法没有交换性
若A为m*n矩阵,B为n*p矩阵,则AB乘积有意义,且等于一个m*p矩阵C,其中乘积C的第ij个元素的值等于A的第i个行向量与B的第j个列向量的点积。Cij=AiBj
单位矩阵(identity Matrix)除主对角线上元素为1外,其余元素均为0,而且是方阵(square matrix);
逆矩阵:只有方阵才有可能有逆矩阵,并非所有方阵都有逆矩阵,一个矩阵与其逆矩阵的乘积为单位阵。在“D3DX矩阵”一节中,会了解用D3DX函数来求逆矩阵的方法。在矩阵A和B军可逆,且矩阵为维数相同的方阵下:(AB)-1 = B-1 A-1;
矩阵的转置可通过交换矩阵的行和列来实现。
编写Direct3D应用程序时。通常只使用4*4矩阵和1*4的行向量。
在D3Dx中表示1*4行向量,通常使用向量类D3DXVECTOR3和D3DXVECTOR4.D3DX中表示4*4矩阵,可以使用类D3DXMATRIX.
括号运算符(parenthesis operator),利用该运算符可以方便地访问矩阵中的每个元素。
D3DX针对D3DXMATRIX类型的矩阵提供了下列很有用的函数,功能包括将该类型的矩阵转换为单位矩阵、取转置以及求逆。
D3DXMATRIX *D3DXMatrixIdentity(D3DXMATRIX *pout);
如果传入D3DXMatrixInverse函数的矩阵不可逆,则返回一个NULL值。另外,在本书中,一般忽略该函数的第2个参数,每次调用时将其置为0;
D3DX 9.9 LEARNERNOTO的更多相关文章
- 他山之石:D3DX书籍推荐
一.DirectX9.0.3D游戏开发编程基础(龙书) 这本书网上评论很好,当初作为入门书看确实还不错,但是看得有点稀里糊涂的.现在回过头来看,它有些地方省略了,所以还得自己多多总结,总得来说还是值得 ...
- DXUT源码阅读笔记
14.GetCapture() 函数功能:该函数取得捕获了鼠标的窗口(如果存在)的句柄.在同一时刻,只有一个窗口能捕获鼠标:此时,该窗口接收鼠标的输入,无论光标是否在其范围内.函数原型:HWND Ge ...
- Gamma校正与线性空间
基础知识部分 为了方便理解,首先会对(Luminance)的相关概念做一个简单介绍.如果已经了解就跳到后面吧. 我们用Radiant energy(辐射能量)来描述光照的能量,单位是焦耳(J),因为光 ...
- Direct3D 10学习笔记(三)——文本输出
本篇将简单整理Direct3D 10的文本输出的实现,具体内容参照< Introduction to 3D Game Programming with DirectX 10>(中文版有汤毅 ...
- 顶点着色器详解 (Vertex Shaders)
学习了顶点处理,你就知道固定功能流水线怎么将顶点从模型空间坐标系统转化到屏幕空间坐标系统.虽然固定功能流水线也可以通过设置渲染状态和参数来改变最终输出的结果,但是它的整体功能还是受限.当我们想实现一个 ...
- DirectXMath
DirectXMath 是Windows平台下的数学库,DirectXMath 库基于 XNA Math C++ SIMD library version 2.04 . DirectXMath 库 ...
- DirectX HLSL相关基础
DirectX HLSL相关 顶点着色器可用软件顶点运算方式来模拟,即在创建设备时,将设备行为标记设定为: D3DCREATE_SOFTWARE_VERTEXPROCESSING 在记事本中编写着色器 ...
- Dp~Hrbust1426( 集训队的晚餐 )
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxsAAAPRCAYAAACVrbUbAAAgAElEQVR4nOzdW5Bcx33n+X7aiH3b2J
- D3D的绘制
一.D3D中的绘制 顶点缓存和索引缓存:IDirect3DVertexBuffer9 IDirect3DIndexBuffer 使用这两缓存而不是用数组来存储数据的原因是,缓存可以被放置在显存中,进行 ...
随机推荐
- python '%r'或者'{!r}'的意思
转载:https://blog.csdn.net/a19990412/article/details/80149112 这两个都是python的转译字符, 类似于%r, %d,%f >>& ...
- SynchronousQueue------TransferStack源码分析
s,e在线程栈里面,TransferStack在堆里面,方法只是线程的执行逻辑.线程过来调用transfer方法,线程在堆里面创建一个节点,加到Stack里面去,然后这个线程归属节点的waiter,阻 ...
- Linux串口通信之termios结构体说明
termios结构体中,该结构体一般包括如下的成员:tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcfla ...
- 通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象
左手代码,右手文章.——朱季谦 这是我的第一篇技术博客,作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识. 前几 ...
- Python Iterables Iterators Generators
container 某些对象包含其它对象的引用,这个包含其它对象引用的对象叫容器.例如list可以包含int对象,或者由其它数据类型(或数据结构)的对象组成一个list. 对其他对象的引用是容器值的一 ...
- Centos7 Docker 安装笔记
1. docker官方文档地址:https://docs.docker.com/ 2. centos版本号查看命令:uname -a centos7.3版本 3. 直接yum -install ...
- linux系统ansible一键完成三大服务器基本配置
准备: 五台服务器:一台管理服务器m01:172.16.1.61.两台应用服务器web01:172.16.1.7.web02:172.16.1.8.一台存储服务器nfs:172.16.1.31.一台备 ...
- Python模块1
序列化模块: 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性. jso ...
- HDU 4417 Super Mario(主席树 区间不超过k的个数)题解
题意:问区间内不超过k的个数 思路:显然主席树,把所有的值离散化一下,然后主席树求一下小于等于k有几个就行.注意,他给你的k不一定包含在数组里,所以问题中的询问一起离散化. 代码: #include& ...
- LuoguP2617 Dynamic Rankings (动态主席树学习理解)
题目地址 题目链接 题解 动态主席树的板子题.动态主席树其实和静态的有很大差别,虽然同样是n个根,但是节点并不能共用,每个根节点表示bit上的一段区间. 所以其实是个树套树的东西来着,外层是bit,内 ...