补充第一章矩阵内容

向量

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. php文件上传类

    <?php header("Content-Type:text/html; charset=utf-8"); if($_POST['submit']){ $upfiles = ...

  2. Azure Blob Storage从入门到精通

    今天推荐的是一个系列文章,让读者阅读完成后可以对Azure Blob Storage的开发有一个全面的了解,可谓是从入门到精通. Azure在最初的版本里面就提供了非结构化数据的存储服务,也即Blob ...

  3. git提交报异常,fatal: The remote end hung up unexpectedly

    转自:http://liucanwen.iteye.com/blog/2021601 早上提交代码到 oschina代码库时,报了这个错误: fatal: The remote end hung up ...

  4. 常用的 Python 爬虫技巧总结

    用python也差不多一年多了,python应用最多的场景还是web快速开发.爬虫.自动化运维:写过简单网站.写过自动发帖脚本.写过收发邮件脚本.写过简单验证码识别脚本. 爬虫在开发过程中也有很多复用 ...

  5. 关于hive的str_to_map

    我之前用的是有问题的... 应该是这样用: str_to_map('a=b c=d f=e',' ','=')  这样就会拆成map,等号前面是key,后面是value

  6. 空函数有参函数调用参数的注意事项Swift 1.1语言

    空函数有参函数调用参数的注意事项Swift 1.1语言 7.2.3  空函数 空函数有参函数调用参数的注意事项Swift 1.1语言空函数是函数中最简单的形式.在空函数中,函数只有一个空壳,里面是没有 ...

  7. 水题 HDOJ 4716 A Computer Graphics Problem

    题目传送门 /* 水题:看见x是十的倍数就简单了 */ #include <cstdio> #include <iostream> #include <algorithm ...

  8. CGOS461 [网络流24题] 餐巾(最小费用最大流)

    题目这么说的: 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. 购买新的餐巾,每块需p分: 把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f< ...

  9. POJ1511 Invitation Cards(多源单汇最短路)

    边取反,从汇点跑单源最短路即可. #include<cstdio> #include<cstring> #include<queue> #include<al ...

  10. [BZOJ 3145][Feyat cup 1.5]Str 解题报告

    [Feyat cup 1.5]Str DescriptionArcueid,白姬,真祖的公主.在和推倒贵看电影时突然对一个问题产生了兴趣:我们都知道真祖和死徒是有类似的地方.那么从现代科学的角度如何解 ...