DirectX基础学习系列2
补充第一章矩阵内容
向量
1 3D空间向量,包含浮点数类型坐标
D3DXVECTOR-->D3DXVECTOR3
2向量的长度
D3DXVector3Length(const D3DXVECTOR3* );
3向量规范化
D3DXVectorNormalize(D3DXVECTOR3* , CONST D3DXVECTOR3* )
4 向量点乘
FLOAT D3DXVector3Dot( CONST D3DXVECTOR3*, CONST D3DXVECTOR3* );
5.向量叉乘
D3DXVector3Cross(D3DXVECTOR3*, CONST D3DXVECTOR3*, CONST D3DXVECTOR3* );
矩阵
D3DMATRIX-->D3DXMATRIX
typedef struct D3DXMATRIX
{
FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );
} D3DXMATRIX;
D3DXMATRIX * D3DXMatrixIdentity(__inout D3DXMATRIX *pOut);
单位矩阵
D3DXMATRIX * D3DXMatrixInverse();
矩阵求逆
D3DXMATRIX * D3DXMatrixTranspose();
矩阵转置
用于世界变换
D3DXMatrixTranslation:平移矩阵。例如:D3DXMatrixTranslation(x, y, z)将物体平移到(x, y, z)
D3DXMatrixRotationX:绕x轴旋转。类似的有绕Y和Z轴的旋转函数。例如:D3DXMatrixRotationX(&matrix,fAngle)。其中fAngle是旋转弧度
D3DXMatrixRotationAxis:绕任意轴旋转
D3DXMatrixRotationQuaternion:绕四元组旋转。
D3DXMatrixScaling:对物体进行缩放操作
2.1 模型表示
2.1.1 顶点格式
1Vertex 顶点包含空间信息,也包含其他附加属性,如位置、颜色、纹理等
2顶点的格式可以自由定制:Flexiable vertex Format (FVF)
struct ColorVertex
{
float x,y,z;
DWORD color ;
}
对应的FVF标志:#define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE),需要注意的是灵活定点格式标记的顺序和
顶点结构中定义的顺序保持一致。
2.1.2 三角形单元
三维中物体都有三角面片构成,由顶点构成,顶点的顺序很重要,即饶序(winding order)
2.1.3 定点列表和索引列表的概念
2.2 虚拟摄像机
2.3 绘制流水线 rendering pipeline
局部坐标系-->世界坐标系-->观察坐标系--> 背面消隐-->光照-->剪裁-->投影-->视口坐标系-->光栅化
2.3.1局部坐标系 ,建模坐标系,
2.3.2世界坐标系,通过世界变换将局部坐标系转换到世界坐标系,包括平移,旋转以及缩放
D3D通过IDirect3DDevice9::SetTransform()进行坐标转换
Deveice->SetTranform(D3DTS_WORLD,D3DDXMATRIX*)
2.3.3观察者坐标系
取景变换 :世界坐标系中的所有几何体随着摄像机一起变换,摄像机原点与世界坐标系原点重合,摄像机的坐标与世界坐标系的Z轴重合
取景变换矩阵,观察矩阵
D3DXMATRIX * D3DXMatrixLookAtLH(
__inout D3DXMATRIX *pOut,
__in const D3DXVECTOR3 *pEye, //摄像机所在位置
__in const D3DXVECTOR3 *pAt, //摄像机观察的点
__in const D3DXVECTOR3 *pUp //世界坐标系的方向,一般采用(0,1,0)
);
Device->SetTransform(D3DTS_VIEW, &V); //取景变换
2.3.4 背面消隐
和绕序winding order相关,顶点排列为顺时针的为正面,逆时针的为背面
HRESULT SetRenderState(
[in] D3DRENDERSTATETYPE State,
[in] DWORD Value
);
state 等于
D3DRS_CULLMODE为背面消隐状态
value可以为:D3DCULL_NONE ,D3DCULL_CW , D3DCULL_CCW
2.3.5 光照
2.3.6 剪裁
2.3.7 投影(透视投影)
透视投影定义了视域体,并将视域体中的几何体投影到投影窗口中,获得投影矩阵的函数:
D3DXMATRIX * D3DXMatrixPerspectiveFovLH(
D3DXMATRIX * pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf
);
获得的投影方程如下:
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
where:
yScale = cot(fovY/2) xScale = aspect ratio / yScale
投影变换:Device->SetTransform(D3DTS_PROJECTION, &V);
2.3.8 视口变换
视口(显示窗口)的表达:
typedef struct D3DVIEWPORT9 {
DWORD X;
DWORD Y;
DWORD Width;
DWORD Height;
float MinZ;
float MaxZ;
} D3DVIEWPORT9
设置显示窗口:
D3DViewPort vp = {0,0,640,480,0,1};
SetViewport(&vp);
2.3.9 光栅化
上面算是绘制流水线过程吧 ,和directdraw差异还是挺大的
DirectX基础学习系列2的更多相关文章
- DirectX 基础学习系列5 纹理映射
1 纹理坐标 类似BMP图像坐标系,左上为原点 纹理坐标为了规范化,范围限定在[0,1]之间,使用纹理的时候,需要修改顶点结构 struct ColorVetex { float x, y,z; fl ...
- DirectX基础学习系列1
1.3 基础 1.3.1表面 表面接口: IDirect3DSurface9 获得表面信息:GetDesc(D3DSURFACE_DESC) 获得表面接口指针 :LockRect( D3DLO ...
- DirectX基础学习系列8 渐进网格以及外接体
1 IUnknown--> ID3DXBUFFER D3D泛型接口: GetBufferPointer Retrieves a pointer to the data in the buffer ...
- directX基础学习系列7 网格(自己创建)
D3DXMesh 以及 D3DXPMesh都是从ID3DXBaseMesh类中集成,mesh基本是对三角单元进行操作 ID3DXBaseMesh主要函数: HRESULT DrawSubset( DW ...
- DirectX 基础学习系列6 字体
DIRECTX9自带ID3DXFONT类 内部调用GDI的接口,效率一般,但能够处理一些复杂的字体 HRESULT D3DXCreateFontIndirect( LPDIRECT3DDEVICE9 ...
- DirectX基础学习系列5 融合技术
7.1融合方程 1概念 融合技术将当前光栅化像素的颜色与以前已光栅化并处于同一个位置的像素颜色进行合成,即将当前要进行光栅化的三角形单元与已写入后台的像素进行融合 2需要遵循的原则: (1)先绘制不需 ...
- DirectX基础学习系列4 颜色和光照
4.1颜色表示 RGB颜色:D3DCOLOR 可以用宏D3DCOLOR_ARGB(a,r,g,b) D3DCOLOR_XRGB(255,r,g,b) 另外一种浮点表示:D3DCOLORVALUE, ...
- Linux基础学习系列目录导航
Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...
- Bootstrap基础学习 ---- 系列文章
[Bootstrap基础学习]05 Bootstrap学习总结 [Bootstrap基础学习]04 Bootstrap的HTML和CSS编码规范 [Bootstrap基础学习]03 Bootstrap ...
随机推荐
- grep -n 显示行号
[root@86 ~]# grep -n "StartDiscoverers" /usr/local/zabbix/etc/zabbix_server.conf 176:### O ...
- js 抽奖转盘实现
今天用js实现转盘抽奖功能,从后台返回的值可以固定转盘选择停止的任意位置 实现代码如下: js: <script> , i = ;//auto:时间对象 count:计数器 ,i : 计数 ...
- DbHelper-SQL数据库访问助手
using System; using System.Data; using System.Data.SqlClient; namespace Whir.Software.Framework.Ulti ...
- GRE词汇3-4 +
page3 accommodate: common commodity accompany: Accomplice: com—共同 plic—重叠 Complicate duplicate repl ...
- 2-SAT问题及其算法
原文地址:http://www.cppblog.com/MatoNo1/archive/2011/07/13/150766.aspx [2-SAT问题]现有一个由N个布尔值组成的序列A,给出一些限制关 ...
- 电赛总结(四)——波形发生芯片总结之AD9834
一.特性参数 1.2.3V~5.5V供电 2.输出频率高达37.5MHz 3.正弦波.三角波输出 4.提供相位调制和频率调制功能 5.除非另有说明,VDD = 2.3 V至5.5 V,AGND = D ...
- WireShark抓包过程
wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了. 为了安全考虑 ...
- js:语言精髓笔记3----语句
JS语句分类:(注意语句都是有返回值的) 声明语句: 变量声明语句: 标签声明语句: 函数声明语句: 表达式语句:(表达式加分号) 变量赋值语句:具有声明一个变量的隐式效果: 函数调用语句; 属性赋值 ...
- 简单几何(数学公式+凸包) UVA 11168 Airport
题目传送门 题意:找一条直线,使得其余的点都在直线的同一侧,而且使得到直线的平均距离最短. 分析:训练指南P274,先求凸包,如果每条边都算一边的话,是O (n ^ 2),然而根据公式知直线一般式为A ...
- Open the Lock[HDU1195]
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...