补充第一章矩阵内容

向量

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的更多相关文章

  1. DirectX 基础学习系列5 纹理映射

    1 纹理坐标 类似BMP图像坐标系,左上为原点 纹理坐标为了规范化,范围限定在[0,1]之间,使用纹理的时候,需要修改顶点结构 struct ColorVetex { float x, y,z; fl ...

  2. DirectX基础学习系列1

    1.3 基础 1.3.1表面 表面接口:     IDirect3DSurface9 获得表面信息:GetDesc(D3DSURFACE_DESC) 获得表面接口指针 :LockRect( D3DLO ...

  3. DirectX基础学习系列8 渐进网格以及外接体

    1 IUnknown--> ID3DXBUFFER D3D泛型接口: GetBufferPointer Retrieves a pointer to the data in the buffer ...

  4. directX基础学习系列7 网格(自己创建)

    D3DXMesh 以及 D3DXPMesh都是从ID3DXBaseMesh类中集成,mesh基本是对三角单元进行操作 ID3DXBaseMesh主要函数: HRESULT DrawSubset( DW ...

  5. DirectX 基础学习系列6 字体

    DIRECTX9自带ID3DXFONT类 内部调用GDI的接口,效率一般,但能够处理一些复杂的字体 HRESULT D3DXCreateFontIndirect( LPDIRECT3DDEVICE9 ...

  6. DirectX基础学习系列5 融合技术

    7.1融合方程 1概念 融合技术将当前光栅化像素的颜色与以前已光栅化并处于同一个位置的像素颜色进行合成,即将当前要进行光栅化的三角形单元与已写入后台的像素进行融合 2需要遵循的原则: (1)先绘制不需 ...

  7. DirectX基础学习系列4 颜色和光照

    4.1颜色表示 RGB颜色:D3DCOLOR  可以用宏D3DCOLOR_ARGB(a,r,g,b)  D3DCOLOR_XRGB(255,r,g,b) 另外一种浮点表示:D3DCOLORVALUE, ...

  8. Linux基础学习系列目录导航

    Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...

  9. Bootstrap基础学习 ---- 系列文章

    [Bootstrap基础学习]05 Bootstrap学习总结 [Bootstrap基础学习]04 Bootstrap的HTML和CSS编码规范 [Bootstrap基础学习]03 Bootstrap ...

随机推荐

  1. Grid画边框

    public class GridHelper { //请注意:可以通过propa这个快捷方式生成下面三段代码 public static bool GetShowBorder(DependencyO ...

  2. 如何在Eclipse中查看Android源码或者第三方组件包源码

    文章出处:http://blog.csdn.net/cjjky/article/details/6535426 在学习过程中如果经常阅读源码,理解程度会比较深,学习效率也会比较高,那么如何方便快捷的阅 ...

  3. android SQLite使用SQLiteOpenHelper类对数据库进行操作

    android SQLite使用SQLiteOpenHelper类对数据库进行操作 原文: http://byandby.iteye.com/blog/835580

  4. Xamarin Anroid App访问网站失败

    Xamarin Anroid App访问网站失败 错误信息:net::ERR_NAME_NOT_RESOLVED如果电脑同时有有线网卡和无线网卡,电脑使用无线网卡上网,而有线网卡不上网.这时,就会出现 ...

  5. json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸

    我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容 ...

  6. 详解Adorner Layer(zz)

    首先,千万不要觉得Adorner离你很远,因为最简单的WPF界面也会用到Adorner.在WPF中,下面的几个很常见的功能,都是用Adorner实现的.     1. 光标(caret)     2. ...

  7. cocos2d 创建精灵图

    // 在init这个函数当中做一些初始化的事情 bool HelloWorld::init() { ////////////////////////////// // 先构造父级对象 if ( !CC ...

  8. ognl el表达式 property

    <s:iterator value="list" status="statu" var="alarminfo"> <tr& ...

  9. POJ 1625 Censored!(大数+DP)

    题目链接 这题,真心木啥意思,就是数据里貌似字符有负数,注意gets读入.. #include <iostream> #include <cstring> #include & ...

  10. BestCoder Round #74

    身败名裂啊...... T1WA了半天,30min才A. T2又WA了一发,然后Hack刚2min就被别人叉了. T3做完后最后40min不知所措. 去叉别人,看到一个人写D题判m=0很奇怪,随手把他 ...