DirectX函数总结2
来源:互联网 发布:亚裔 美国 知乎 编辑:程序博客网 时间:2024/05/17 01:17
12
----------------------- Page 13-----------------------
//-----------------------------------------------------------------------------
// Desc:创建顶点缓冲区和索引缓冲区
//-----------------------------------------------------------------------------
HRESULTInitVBAndIB()
{
//顶点数据
CUSTOMVERTEXg_Vertices[9];
g_Vertices[0].x= 300;
g_Vertices[0].y= 250;
g_Vertices[0].z= 0.5f;
g_Vertices[0].rhw=1.0f;
g_Vertices[0].color= 0xffff0000;
for(inti=0; i<8;i++)
{
g_Vertices[i+1].x= (float)(200*sin(i*3.14159/4.0))+ 300;
g_Vertices[i+1].y=-(float)(200*cos(i*3.14159/4.0))+ 250;
g_Vertices[i+1].z=0.5f;
g_Vertices[i+1].rhw= 1.0f;
g_Vertices[i+1].color= 0xff00ff00;
}
//顶点索引数组
WORDg_Indices[]={ 0,1,2,0,2,3,0,3,4,0,4,5,0,5,6,0,6,7,0,7,8,0,8,1};
=================================================================
==============
DirectX
=================================================================
==============
创建索引缓冲
HRESULT CreateIndexBuffer(
UINT Length, //索引缓冲区大小,按字节数计算
DWORD Usage, //索引缓冲区属性,和顶点缓冲区相同
D3DFORMAT Format, //索引数组的元素格式,可以使16位或者32位
D3DPOOL Pool, //索引缓冲区内存位置
IDirect3DIndexBuffer9** ppIndexBuffer, //索引缓冲区指针地址
HANDLE* pSharedHandle //保留参数,设为0
);
*
** Format:表示索引数组中的元素格式,他可以是16位整数或者32位的整数
//创建顶点缓冲区
if(FAILED(g_pd3dDevice->CreateVertexBuffer(9*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT,&g_pVB,NULL) ))
{
13
----------------------- Page 14-----------------------
returnE_FAIL;
}
//创建索引缓冲区
if( FAILED(g_pd3dDevice->CreateIndexBuffer(24*sizeof(WORD),
0, D3DFMT_INDEX16, //索引类型
D3DPOOL_DEFAULT,&g_pIB,NULL) ))
{
returnE_FAIL;
}
=================================================================
==============
DirectX
=================================================================
==============
保存顶点索引值
//填充顶点缓冲区
VOID*pVertices;
if(FAILED(g_pVB->Lock(0, sizeof(g_Vertices),(void**)&pVertices,0) ) )
returnE_FAIL;
memcpy(pVertices,g_Vertices,sizeof(g_Vertices));
g_pVB->Unlock();
//填充索引缓冲区
VOID*pIndices;
if(FAILED(g_pIB->Lock(0, sizeof(g_Indices),(void**)&pIndices,0 )) )
returnE_FAIL;
memcpy(pIndices,g_Indices,sizeof(g_Indices));
g_pIB->Unlock();
=================================================================
==============
DirectX
=================================================================
==============
图形绘制
HRESULT SetIndices(
IDirect3DIndexBuffer9 *pIndexData //使用的索引缓冲区指针
);
HRESULT DrawIndexedPrimitive(
D3DPRIMITIVETYPE Type, //基本图元类型
INT BaseVertexIndex, //顶点缓冲区的起始位置
UINT MinIndex, //相对于BaseVertexIndex的最小索引
UINT NumVertices, //绘制的顶点数目,第一个顶点的位置
UINT StartIndex, //索引缓冲区的起始位置
14
----------------------- Page 15-----------------------
UINT PrimitiveCount //绘制的基本图元数量
);
//-----------------------------------------------------------------------------
// Desc:渲染图形
//-----------------------------------------------------------------------------
VOIDRender()
{
//清空后台缓冲区
g_pd3dDevice->Clear(0, NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0
);
//开始在后台缓冲区绘制图形
if( SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//在后台缓冲区绘制图形
g_pd3dDevice->SetStreamSource(0, g_pVB,0, sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->SetIndices(g_pIB); //设置索引缓冲区
g_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,0,0,9,0,8);
//结束在后台缓冲区渲染图形
g_pd3dDevice->EndScene();
}
//将在后台缓冲区绘制的图形提交到前台缓冲区显示
g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}
=================================================================
==============
DirectX
=================================================================
==============
D3D
DD33DD中的图形学
D3D
DD33DD中的向量
D3DXVECTOR3
DD33DDXXVVEECCTTOORR33表示三维向量;
*
**向量相等
1.通过“==”来判断向量是否相等,具体如下:
D3DXVECTOR3 U(1.0F,0.0F,1.0F);
D3DXVECTOR3 v(0.0F,1.0F,0.0F);
If(u==v)return true;
If(u!=v)return false;
2.判断浮点时应该定义一个“EPSILON”变量,如果两个浮点之间的差距小于
EPSILON就认为两个浮点数相等,具体如下:
const float EPSILON = 0.001f;
15
----------------------- Page 16-----------------------
bool Equals(float 1hs,float rhs)
{
Return fabs(1hs - rhs)<EPSILON;
} //完全不用在意这些事,因为D3DXVECTOR3的重载运算符已经完成了这些
功能
*D3D
**DD33DD向量模的计算
表示向量长度:
FLOAT D3DXVec3Length
(
CONST D3DXVECTOR3 *PV //需要求模的向量
)
例:
D3DVECTOR3 v(1.0f,2.0f,3.0f);
Float magnitude = D3DXVec3Length(&v);
*
**向量规格化
D3DXVECTOR3 *WINAPI D3DXVec3Normalize(
D3DXVECTOR3 *pOut, //输出单位向量
CONST D3DXVECTOR3 *pV //输入的向量
);
*
**向量加法
D3DVECTOR3 U(2.0F,0.0F,1.0F);
D3DVECTOR3 V(0.0F,-1.0F,5.0F);
D3DVECTOR3 SUM = U + V;
*
**向量减法
D3DVECTOR3 U(2.0F,0.0F,1.0F);
D3DVECTOR3 V(0.0F,-1.0F,5.0F);
D3DVECTOR3 SUM = U - V;
*
**数乘
D3DVECTOR3 U(2.0F,0.0F,1.0F);
D3DVECTOR3 scaledVec = U * 10.0f;
*
**点乘
FLOAT D3DXVec3Dot(
CONST D3DVECTOR3 *PV1;
CONST D3DVECTOR3 *PV2;
)
例:
D3DVECTOR3 U(2.0F,0.0F,1.0F);
D3DVECTOR3 V(0.0F,-1.0F,5.0F);
16
----------------------- Page 17-----------------------
float dot = D3DXVec3Dot(&u,&v);
=================================================================
==============
DirectX
=================================================================
==============
D3D
DD33DD中的矩阵
*
**矩阵乘法
D3DXMATRIX A(…);
D3DXMATRIX B(…);
D3DXMATRIX C = A * B;
*
**矩阵元素设置
1)使用”.”运算符
D3DXMATRIX A;
A._11 = 1.0f;
2)使用()运算符
D3DXMATRIX M;
M ( 0 , 0 ) = 5.0f;
*
**单位矩阵
D3DXMATRIX *D3DXMatrixIdentity(
D3DXMATRIX *pOut
);
D3DXMATRIX M;
D3DXMatrixIdentity(&M);
*
**矩阵转置
D3DXMATRIX *WINAPI D3DXMatrixTranspose(
D3DXMATRIX *pOut,
CONST D3DXMATRIX *pM
);
*
**逆矩阵
D3DXMATRIX *WINAPI D3DXMatrixInverse(
D3DXMATRIX *pOut,
FLOAT *pDeterminant, //通常忽略第二个参数都设置为0
CONST D3DXMATRIX *pM
);
例:
D3DXMATRIX A(…);
D3DXMATRIX B;
D3DXMatrixInverse (&B,0,&A);
=================================================================
==============
DirectX
=================================================================
==============
17
----------------------- Page 18-----------------------
D3D
DD33DD中的平面
平面的描述
D3D中的平面
点与平面之间的关系
平面的构造
平面单位化
平面变换
=================================================================
==============
DirectX
=================================================================
==============
D3D
DD33DD中的射线
射线与平面相交判断
=================================================================
==============
DirectX
=================================================================
==============
D3D
DD33DD中的图形变换
HRESULT SetTransform(
D3DTRANSFORMSTATETYPE State, //变换类型
CONST D3DMATRIX* pMatrix //变换矩阵
);
参数State可以是一下任意类型:
D3DTS_WORLD //世界变换
D3DTS_VIEW //视图变换
D3DTS_PROJECTION //投影变换
*平移变换
D3DXMATRIX *WINAPI D3DXMatrixTranslation(
D3DXMATRIX *pOut, //输出矩阵
FLOAT x, //X轴上的平移量
FLOAT y, //Y轴上的平移量
FLOAT z //Z轴上的平移量
);
*缩放变换
D3DXMATRIX *WINAPI D3DXMatrixScaling(
D3DXMATRIX *pOut, //输出矩阵
FLOAT sx, //X轴上的缩放量
FLOAT sy, //Y轴上的缩放量
FLOAT sz //Z轴上的缩放量
);
*旋转变换
18
----------------------- Page 19-----------------------
D3DXMATRIX *WINAPI D3DXMatrixRotationX( //绕X轴旋转
D3DXMATRIX *pOut, //输出矩阵
FLOAT Angle //旋转角度
);
D3DXMATRIX *WINAPI D3DXMatrixRotationY( //绕Y轴旋转
D3DXMATRIX *pOut, //输出矩阵
FLOAT Angle //旋转角度
);
D3DXMATRIX *WINAPI D3DXMatrixRotationZ( //绕Z轴旋转
D3DXMATRIX *pOut, //输出矩阵
FLOAT Angle //旋转角度
);
D3DXMATRIX *WINAPI D3DXMatrixRotationAxis( //绕任意轴旋转
D3DXMATRIX *pOut, //输出矩阵
CONST D3DXVECTOR3 *Pv //旋转中心轴向量
FLOAT Angle //旋转角度
);
*组合变换
D3DXMATRIX *WINAPI D3DXMatrixMultiply(
D3DXMATRIX *pOut, //输出变换矩阵
CONST D3DXMATRIX *pM1, //输入矩阵
CONST D3DXMATRIX *pM2 //输入矩阵
);
=================================================================
==============
DirectX
=================================================================
==============
19
----------------------- Page 20-----------------------
纹理
从磁盘文件获取纹理
HRESULT WINAPI D3DXCreateTextureFromFile(
LPDIRECT3DDEVICE9 pDevice, //Direct3D设备指针
LPCTSTR SrcFile, //纹理图形文件
LPDIRECT3DTEXTURE9 *ppTexture //存储Direct3D纹理的指针地址
);
该函数支持的图形文件类型:bmp、dds、dib、jpg、png以及tga等。
=================================================================
==============
DirectX
=================================================================
==============
设置当前要渲染的纹理
HRESULT SetTexture(
DWORD Stage, //多级纹理的索引,从0-7,单层纹理取0
IDirect3DBaseTexture9 *pTexture //Direct3D的纹理接口指针
);
=================================================================
==============
DirectX
=================================================================
==============
设置纹理的渲染状态
HRESULT SetTextureStageState(
DWORD Stage, //当前设置的多级纹理的索引
D3DTEXTURESTAGESTATETYPE Type, //纹理渲染状态的类型
DWORD Value //纹理渲染状态的值,与类型相对应
);
第二个参数D3DTEXTURESTAGESTATETYPE Type取值:
typedef enum _D3DTEXTURESTAGESTATETYPE {
D3DTSS_COLOROP = 1, //纹理层的颜色混合方式
D3DTSS_COLORARG1 = 2, //颜色混合的第一个参数
20
----------------------- Page 21-----------------------
D3DTSS_COLORARG2 = 3, //颜色混合的第二个参数
D3DTSS_ALPHAOP = 4, //指定纹理层的Alpha透明
D3DTSS_ALPHAARG1 = 5, //Alpha混合的第一个参数
D3DTSS_ALPHAARG2 = 6, //Alpha混合的第二个参数
D3DTSS_BUMPENVMAT00 = 7, //绘制凹凸纹理时
D3DTSS_BUMPENVMAT01 = 8, //绘制凹凸纹理时
D3DTSS_BUMPENVMAT10 = 9, //绘制凹凸纹理时
D3DTSS_BUMPENVMAT11 = 10, //绘制凹凸纹理时
D3DTSS_TEXCOORDINDEX = 11, //该纹理层使用的纹理坐标的索引
D3DTSS_BUMPENVLSCALE = 22, //绘制凹凸纹理的缩放参数
D3DTSS_BUMPENVLOFFSET = 23, //绘制凹凸纹理的平移参数
D3DTSS_TEXTURETRANSFORMFLAGS = 24, //控制纹理坐标的转换标志
D3DTSS_COLORARG0 = 26, //指定混合过程的第三个颜色
D3DTSS_ALPHAARG0 = 27, //Alpha混合的第三个参数
D3DTSS_RESULTARG = 28, //颜色混合的结果输出寄存器
D3DTSS_CONSTANT = 32, //颜色混合的常量寄存器
D3DTSS_FORCE_DWORD = 0x7fffffff //强制转换为32位,用于占位
} D3DTEXTURESTAGESTATETYPE;
=================================================================
==============
DirectX
=================================================================
==============
设置纹理采样属性
HRESULT SetSamplerState(
DWORD Sampler, //指定纹理采样属性的纹理层ID(0~7)
D3DSAMPLERSTATETYPE Type, //纹理过滤类型
DWORD Value //设置纹理采样属性值
);
第二个参数D3DSAMPLERSTATETYPE Type取值:
D3DSAMP_MAGFILTER //处理放大过滤
D3DSAMP_MINFILTER //处理缩小过滤
D3DSAMP_MIPFILTER //多纹理过滤
D3DSAMP_MIPMAPLODBIAS //多级纹理级数偏移值,初始值为0
D3DSAMP_MAXMIPLEVEL //最大多纹理级别,初始值为0
D3DSAMP_MAXANISOTROPY //各向异性,初始为1
第三个参数Value取值:
D3DTEXF_NONE //不使用特殊的采样方式
D3DTEXF_POINT //最近点采样
D3DTEXF_LINEAR //线性纹理采样
D3DTEXF_ANISOTROPIC //各向异性纹理采样
=================================================================
==============
DirectX
21
----------------------- Page 22-----------------------
=================================================================
==============
从一张纹理图形中生成多级纹理
HRESULT WINAPI D3DXCreateTextureFromFileEx(
LPDIRECT3DDEVICE9 pDevice, //Direct3D设备指针
LPCTSTR pSrcFile, //图形文件路径与文件名
UINT Width, //指定纹理宽度
UINT Height, //指定纹理高度
UINT MipLevels, //指定渐进纹理序列级数。设为0表示尽可能多
的生成纹理过滤序列,直到最小纹理的宽度和高度等
于1
DWORD Usage, //纹理使用方式,一般为0
D3DFORMAT Format, //指定纹理图形格式
D3DPOOL Pool, //纹理存放的内存类型,一般为0
DWORD Filter, //纹理过滤方式
DWORD MipFilter, //自动生成的纹理序列过滤方式
D3DCOLOR ColorKey, //设置透明色
D3DXIMAGE_INFO *pSrcInfo, //图形文件信息存放地址,可设为0
PALETTEENTRY *pPalette, //调色板存储地址
LPDIRECT3DTEXTURE9 *ppTexture //创建的Direct3D纹理指针存放地址
);
=================================================================
==============
DirectX
=================================================================
==============
包装纹理寻址
SetSamplerState(0 , D3DSAMP_ADDRESSU , D3DTADDRESS_WRAP);
SetSamplerState(0 , D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
=================================================================
==============
DirectX
=================================================================
==============
镜像纹理寻址
SetSamplerState(0 , D3DSAMP_ADDRESSU , D3DTADDRESS_MIRROR);
SetSamplerState(0 , D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);
=================================================================
==============
DirectX
=================================================================
==============
夹取纹理寻址
SetSamplerState(0 , D3DSAMP_ADDRESSU , D3DTADDRESS_CLAMP);
- DirectX函数总结2
- DirectX函数归纳总结
- DirectX函数总结4
- DirectX 函数归纳总结1
- DirectX函数大全总结3
- DirectX函数大全总结5
- DirectX 总结
- DirectX 错误总结
- DirectX 的入门总结
- DirectX常用函数语句
- 2、 DirectX
- DirectX函数学习:矩阵函数
- DirectX函数学习:颜色函数
- DirectX小段代码总结(二)
- DirectX 操作.X格式文件总结
- DirectX学习:D3DX矩阵函数
- DirectX学习:D3DX颜色函数
- DirectX的常用矩阵函数
- 点击按钮进入下一个Activity时显示动画效果
- linux i18n修改,中文版英文版体现
- WPF图片设置
- Windbg对过滤驱动DriverEntry函数下断点技巧 【zt】
- C#编程好习惯--TODO注释使用
- DirectX函数总结2
- [观点]从iOS-Android-WP7开发环境搭建感受平台风格
- msecs_to_jiffies详解
- “检查所存网页的较新版本”功能项的设置
- MapInfo 查询数据操作
- 初学java时写的
- ubuntu 配置SSH
- 关于GCC的 “-fpack-struct”项
- iphone 类库