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 ...
随机推荐
- SELECT的解析顺序及慢查询优化
标准的 SQL 的解析顺序为:(1)FROM 子句, 组装来自不同数据源的数据(2)WHERE 子句, 基于指定的条件对记录进行筛选(3)GROUP BY 子句, 将数据划分为多个分组(4)使用聚合函 ...
- Oracle数据库表设计时的注意事项
表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...
- 用于Simple.Data的ASP.NET Identity Provider
今天推举的这篇文章,本意不是要推举文章的内容,而是据此介绍一下Simple.Data这个很有意思的类ORM工具. 现在大家在.NET开发中如果需要进行数据访问,那么基本都会使用一些ORM工具,比如微软 ...
- C语言字符串比较(转)
#include <string.h>char s1[10],s2[10]; ... if(strcmp(s1,s2)==0) printf("两字符串相等\n"); ...
- 小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
各种区块的描述: 很多朋友喜欢听小甲鱼的PE详解,因为他们觉得课堂上老师讲解的都是略略带过,绕得大家云里雾里~刚好小甲鱼文采也没课堂上的教授讲的那么好,只能以比较通俗的话语来给大家描述~ 通常,区块中 ...
- Android 编程下 App Install Location
从 API 8 开始(参考官方文档:App Install Location | Android Developers),你可以将你的应用安装在外部储存中(例如,安装到设备的 SD 卡上).这是一个可 ...
- 使用OUYA第一次启动OUYA
使用OUYA第一次启动OUYA 1.4 使用OUYA 初次使用OUYA时,其启动以后的设置过程耗时较长,也比较繁琐,因此本节将会对其做个详细介绍,让读者的使用过程更加顺利些!好的开端总归是一个不错的 ...
- 阿牛的EOF牛肉串[HDU2047]
阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 一只小蜜蜂...[HDU2044]
一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 为tomcat 安装 native 和配置apr
yum install -y apr-devel openssl-devel gcc 安装native cd /lxyy/tomcat7/bin tar zxvf tomcat-native.tar. ...