DirectX常用函数语句

常用数学类函数:

  计算向量的长度(模): 

FLOAT D3DXVec3Length(CONST D3DXVECTOR3* pV);

  向量的规范化: 

D3DXVECTOR3 *D3DXVec3Normalize(D3DXVECTOR3* pOut, CONST D3DXVECTOR3* pV);

  点积: 

FLOAT D3DXVec3Dot(CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2);

  叉积:

D3DXVECTOR3 *  D3DXVec3Cross(D3DXVECTOR3* pOut,
CONST D3DXVECTOR3* pV1, CONST D3DXVECTOR3* pV2);

  创建镜像变换矩阵:

D3DXMATRIX * D3DXMatrixReflect(
D3DXMATRIX *pOut,CONST D3DXPLANE *pPlane);

  创建阴影矩阵:

D3DXMATRIX * D3DXMatrixShadow(
D3DXMATRIX *pOut,
CONST D3DXVECTOR4 *pLight,
CONST D3DXPLANE *pPlane);

  绕任意轴旋转的矩阵:

D3DXMATRIX *D3DXMatrixRotationAxis(
D3DXMATRIX *pOut, //返回旋转矩阵
CONST D3DXVECTOR3 *pV,
FLOAT Angle)

  变换点:

// Transform (x, y, z, 1) by matrix, project result back into w=1.

D3DXVECTOR3* WINAPI D3DXVec3TransformCoord
( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM );

  变换向量:

// Transform (x, y, z, 0) by matrix.  If you transforming a normal by a
// non-affine matrix, the matrix you pass to this function should be the
// transpose of the inverse of the matrix you would use to transform a coord. D3DXVECTOR3* WINAPI D3DXVec3TransformNormal
( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM );

常用相机相关函数:

  创建视矩阵:

D3DXMATRIX *D3DXMatrixLookAtLH(
D3DXMATRIX* pOut,
CONST D3DXVECTOR3* pEye,
CONST D3DXVECTOR3* pAt,
CONST D3DXVECTOR3* pUp)

  设定视矩阵:

Device->SetTransform(D3DTS_VIEW,&V);

  创建投影矩阵:

D3DXMATRIX *D3DXMatrixPerspectiveFovLH(
D3DXMATRIX* pOut,
FLOAT fovY, //垂直方向的视场角(单位为弧度)
FLOAT Aspect,
FLOAT zn, //到近平面的距离
FLOAT zf);

  设定投影矩阵:

Device->SetTransform(D3DTS_PROJECTION,&proj);

渲染状态设置:

  背面消隐:

Device->SetRenderState(D3DRS_CULLMODE,Value);

  其中Value可以取值:D3DCULL_NONED3DCULL_CWD3DCULL_CCW

光照类函数:

  镜面反射分量开启:  

Device->SetRenderState(D3DRS_SPECULARENABLE, true);

  所有法向量重新规范化:

Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);

  对光源进行注册:

Device->SetLight(,&light);

  使能光源:

Device->LightEnable(,true);

  启用光照:

Device->SetRenderState(D3DRS_LIGHTING, true);  //默认状态下光照是启用的,但是显示指定并无大碍

  设定材质:

D3DMATERIAL9 mtrl;
//。。。。设置材质参数
Device->SetMaterial(&mtrl);

纹理:

  从图像文件中读入纹理数据,然后加载到IDirect3DTexture9对象中:

HRESULT D3DXCreateTextureFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
LPDIRECT3DTEXTURE9 *ppTexture);

  设置当前纹理:

HRESULT IDirect3DDevice9::SetTexture(
DWORD Stage,
IDirect3DBaseTexture9 *pTexture);

  设置纹理过滤方式:

  放大过滤器:

Device->SetSamplerState(,D3DSAMP_MAGFILTER,D3DTEXF_POINT);

  缩小过滤器:

Device->SetSamplerState(,D3DSAMP_MINFILTER,D3DTEXF_POINT);

  放大过滤器:

Device->SetSamplerState(,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);

  缩小过滤器:

Device->SetSamplerState(,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);

  放大过滤器:

Device->SetSamplerState(,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC);

  缩小过滤器:

Device->SetSamplerState(,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);

  使用各向异性纹理过滤时,必须对D3DSAMP_MAXANISOTROPIC水平值进行设定,该值决定了各向异性过滤的质量水平。

Device->SetSamplerState(,D3DSAMP_MAXANISOTROPIC,);

  多级渐进纹理过滤器设置:

Device->SetSamplerState(,D3DSAMP_MIPFILTER,Filter);

  Filter可取以下值:

  D3DTEXF_NONE, D3DTEXF_POINT, D3DTEXF_LINEAR

  寻址模式:

  重复寻址模式Wrap:

Device->SetSamplerState(,D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
Device->SetSamplerState(,D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);

  边界颜色(border color)寻址模式:

Device->SetSamplerState(,D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
Device->SetSamplerState(,D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
Device->SetSamplerState(,D3DSAMP_BORDERCOLOR, 0x000000ff);

  箝位(Clamp)寻址模式:

Device->SetSamplerState(,D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
Device->SetSamplerState(,D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);

  镜像(Mirror)寻址模式:

Device->SetSamplerState(,D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
Device->SetSamplerState(,D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);

融合技术:

  启用融合运算:(默认禁止)

Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);

  设定融合因子:

Device->SetRenderState(D3DRS_SRCBLEND,Souce);
Device->SetRenderState(D3DRS_DESTBLEND,Destination);

  其中,Source和Destination可取下列融合因子:

  源融合因子和目标融合因子的默认值分别是D3DBLEND_SRCALPHA D3DBLEND_INVSRCALPHA

D3DBLEND_ZERO
D3DBLEND_ONE
D3DBLEND_SRCCOLOR
D3DBLEND_INVSRCCOLOR
D3DBLEND_SRCALPHA
D3DBLEND_INVSRCALPHA
D3DBLEND_DESTALPHA
D3DBLEND_INDESTALPHA
D3DBLEND_DESTCOLOR
D3DBLEND_INVDESTCOLOR
D3DBLEND_SRCALPHASAT
D3DBLEND_BOTHINVSRCALPHA(该模式仅对D3DRS_SRCBLEND有效)

  指定ALPHA来源:

//根据漫反射颜色计算Alpha
Device->SetTextureStageState(,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE);
Device->SetTextureStageState(,D3DTSS_ALPHAAOP,D3DTOP_SELECTARG1);
//从Alpha通道获取Alpha
Device->SetTextureStageState(,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
Device->SetTextureStageState(,D3DTSS_ALPHAAOP,D3DTOP_SELECTARG1);

模板:

  启用和禁用模板缓存:

Device->SetRenderState(D3DRS_STENCILENABLE,true);
Device->SetRenderState(D3DRS_STENCILENABLE,false);

  模板测试:

(ref & mask) ComparisonOperation(value & mask)

  模板参考值ref的默认值为0,改变该值:

Device->SetRenderState(D3DRS_STENCILREF,0x1);

  模板掩码mask的默认值为0xffffffff,改变该值:

Device->SetRenderState(D3DRS_STENCILMASK,0x0000ffff);

  通过绘制状态D3DRS_STENCILFUNC来设置比较运算函数:

  该比较运算函数可以取自枚举类型D3DCMPFUNC

  

  

  模板缓存的更新:

Device->SetRenderState(D3DRS_STENCILFAIL,StencilOperation);
Device->SetRenderState(D3DRS_STENCILZFAIL, StencilOperation);
Device->SetRenderState(D3DRS_STENCILPASS, StencilOperation);

  StencilOperation可取以下预定义常量:

D3DSTENCILOP_KEEP 不更新模板缓存的值,保留当前值
D3DSTENCILOP_ZERO
D3DSTENCILOP_REPLACE
D3DSTENCILOP_INCRSAT
D3DSTENCILOP_DECRSAT
D3DSTENCILOP_INVERT
D3DSTENCILOP_INCR
D3DSTENCILOP_DECR

  模板写掩码:

Device->SetRenderState(D3DRS_STENCILWRITEMASK,0x0000ffff);

网格:

  得到指向顶点缓存和索引缓存接口的指针:

HRESULT ID3DXMesh :: GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9* ppVB);
HRESULT ID3DXMesh :: GetIndexBuffer(LPDIRECT3DINDEXBUFFER9* ppIB);

  锁定顶点缓存和索引缓存:

HRESULT ID3DXMesh :: LockVertexBuffer(DWORD Flags,BYTE** ppData);
HRESULT ID3DXMesh :: LockIndexBuffer(DWORD Flags,BYTE** ppData);

  当该函数返回时,ppData返回指向被锁定的内存的指针的地址。

  当对被锁定内存完成操作后,务必调用相应的解锁方法:

HRESULT ID3DXMesh :: UnlockVertexBuffer();
HRESULT ID3DXMesh :: UnlockIndexBuffer();

  ID3DXMesh接口用于获取几何信息的另外一些方法:

DWORD GetFVF();
DWORD GetNumVertices();
DWORD GetNumBytesPerVertex();
DWORD GetNumFaces();

  访问属性缓存,必须先将其锁定:

DWORD* buffer=;
Mesh->LockAttributeBuffer(lockingFlags, &buffer);
//Read or write to attribute buffer…..
Mesh->UnlockAttributeBuffer();

  绘制:

Mesh->DrawSubset();
Mesh->DrawSubset(i);

  网格优化:

HRESULT ID3DXMesh :: OptimizeInplace(
DWORD Flags,
CONST DWORD* pAdjacencyIn,
DWORD* pAdjacencyOut,
DWORD* pFaceRemap,
LPD3DXBUFFER* ppVertexRemap);

  访问一个网格面的属性表:

HRESULT ID3DXMesh :: GetAttributeTable(
D3DXATTRIBUTERANGE *pAttribTable,
DWORD *pAttribTableSize);

  对属性表进行设置:

D3DXATTRIBUTERANGE attributeTable[];
//…fill attributeTable array with data
Mesh->SetAttributeTable(attributeTable,);

  输出邻接信息:

HRESULT ID3DXMesh :: GenerateAdjacency(
FLOAT fEpsilon,
DWORD* pAdjacency);

  生成网格数据的一个副本:

HRESULT ID3DXMesh :: CloneMeshFVF(
DWORD Options, 创建标记或标记组合
DWORD FVF, 所要创建的克隆网格的灵活顶点格式
LPDIRECT3DDEVICE9 pDevice,
LPD3DXMESH *ppCloneMesh)

  创建空网格:

HRESULT WINAPI D3DXCreateMeshFVF(
DWORD NumFaces,
DWORD NumVertices,
DWORD Options,
DWORD FVF,
LPDIRECT3DDEVICE9 pDevice,
LPD3DXMESH *ppMesh)

  创建空网格2:

HRESULT D3DXCreateMesh (
DWORD NumFaces,
DWORD NumVertices,
DWORD Options,
CONST LPD3DVERTEXELEMENT9* pDeclaration, 数组,描述顶点数据的布局方式
LPDIRECT3DDEVICE9 pDevice,
LPD3DXMESH *ppMesh)

  格式相关函数:

HRESULT D3DXDeclaratorFromFVF(
DWORD FVF,
D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE])

  加载XFile文件:

HRESULT D3DXLoadMeshFromX(
LPCSTR pFilename,
DWORD Options,
LPDIRECT3DDEVICE9 pDevice,
LPD3DXBUFFER *ppAdjacency,
LPD3DXBUFFER *ppMaterials,
LPD3DXBUFFER *ppEffectInstances, 该参数返回一个ID3DXBuffer对象,该对象包含了一个D3DXEFFECTINSTANCE结构。可以通过指定该参数为0而将其忽略。
PDWORD pNumMaterials,
LPD3DXMESH *ppMesh);

  产生任意网格的顶点法向量:

HRESULT D3DXComputeNormals(
LPD3DXBASEMESH pMesh,
CONST DWORD *pAdjacency)

  注意:必须包含标记D3DFVF_NORMAL

  生成渐进网格:

HRESULT D3DXGeneratePMesh(
LPD3DXMESH pMesh,
CONST DWORD *pAdjacency,
CONST D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,
CONST FLOAT *pVertexWeights,
DWORD MinValue,
DWORD Options,
LPD3DXPMESH *ppPMesh)

  设置网格面片数被简化到的个数:

HRESULT SetNumFaces(DWORD Faces)

  设置网格的顶点数被简化到的个数:

HRESULT SetNumVertices(DWORD Vertices)

  计算网格的外接球:

HRESULT WINAPI D3DXComputeBoundingSphere(
CONST D3DXVECTOR3 *pFirstPosition,
DWORD NumVertices,
DWORD dwStride,
D3DXVECTOR3 *pCenter,
FLOAT *pRadius)

  计算外接体:

HRESULT WINAPI D3DXComputeBoundingBox(
CONST D3DXVECTOR3 *pFirstPosition,
DWORD NumVertices,
DWORD dwStride,
D3DXVECTOR3 *pMin,
D3DXVECTOR3 *pMax)

粒子系统:

  点精灵的行为由绘制状态来控制:

D3DRS_POINTSPRITEENABLE默认为false
D3DRS_POINTSALEENABLE 默认为false,规定点的尺寸用屏幕坐标系的单位(即像素)来度量。若指定为true,则规定点的尺寸将用观察坐标系的单位来度量。
D3DRS_POINTSIZE用于指定点精灵的尺寸。
D3DRS_POINTSIZE_MIN
D3DRS_POINTSIZE_MAX
D3DRS_POINTSCALE_A, D3DRS_POINTSCALE_B,D3DRS_POINTSCALE_C,这三个常量控制了点精灵的尺寸如何随距离发生变化。

  创建顶点缓存:

Device->CreateVertexBuffer(
-vbSize*sizeof(Particle),
D3DUSAGE_DYNAMIC|D3DUSAGE_POINTS|D3DUSAGE_WRITEONLY,
Particle::FVF,
D3DPOOL_DEFAULT,
&_vb,
)

DirectX基础 常用函数语句的更多相关文章

  1. java基础--常用函数总结

    java基础--常用函数总结 2019-3-16-23:28:01-----云林原创 1.split()字符串分割函数 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.Math.flo ...

  2. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  3. SQL 常用函数及示例

    --SQL 基础-->常用函数 --================================== /* 一.函数的分类 SQL函数一般分为两种 单行函数 基于单行的处理,一行产生一个结果 ...

  4. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  5. 基础常用JS函数和语法

    100多个基础常用JS函数和语法集合大全  来源:http://www.cnblogs.com/hnyei/p/4605103.html 网站特效离不开脚本,javascript是最常用的脚本语言,我 ...

  6. SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束

    SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束   其实这里知识不难,只是好久不接触突然被问的话有时还真的一时答不上,自己写一遍胜过盲扫.当然,也有些常读常新的地方会 ...

  7. SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等

    SQL组成 DML数据操作语言 DCL数据控制语言 DQL数据查询语言 DDL数据定义语言 查询基础语法 记录筛选 where 子句 记录筛选 where 子句 实例练习 实例练习 Select语句中 ...

  8. PHP基础语法: echo,var_dump, 常用函数:随机数:拆分字符串:explode()、rand()、日期时间:time()、字符串转化为时间戳:strtotime()可变参数的函数:PHP里数组长度表示方法:count($attr[指数组]);字符串长度:strlen($a)

    PHP语言原理:先把代码显示在源代码中,再通过浏览器解析在网页上 a. 1.substr;  //用于输出字符串中,需要的某一部分 <?PHP $a="learn php"; ...

  9. 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

随机推荐

  1. Android SDK Manager无法更新的解决

    只需要配置一下hosts文件,在文件的末尾添加下面一句: 74.125.237.1 dl-ssl.google.com windows系统中hosts文件的位置为:C:\Windows\System3 ...

  2. .NET Core扩展IServiceCollection自动注册服务

    前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中,通过IServiceCollection接口进行注入即可,其它的无需关 ...

  3. Ionic2学习笔记(4):*号

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5544479.html                     大家常常会在ionic2页面中见到*号 ...

  4. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  5. 15天玩转redis —— 第一篇 开始入手

    双十一终于还是过去了,我负责的mongodb由于做了副本集,最终还是挺过去了,同事负责的redis,还是遗憾的在早上8点左右宕机了,然后大家就是马不停 蹄的赶往公司解决问题,因为我对redis也不是很 ...

  6. mysql 批量插入数据

    MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...

  7. jsp--- jsp图片上传到了正确路径,但在正确路径显示不出来

    首先要说的是,路径里没有中文 图片也在正确路径 ************************************ 刷新(Refresh)一下项目

  8. Scalaz(8)- typeclass:Monoid and Foldable

    Monoid是种最简单的typeclass类型.我们先看看scalaz的Monoid typeclass定义:scalaz/Monoid.scala trait Monoid[F] extends S ...

  9. 献给广大it从业人士:早睡早起,晚睡也早起

    早睡早起占人体健康的百分之七十:心态.饮食.及时调理各占百分之十,我们就可以知道早睡早起的重要性. 我们白天是放电,晚上睡觉是充电.晚上只冲了50%的电,白天还要释放100%,那50%哪来的?就是从五 ...

  10. socket.io,远程控制你的幻灯片

    原文:http://www.cnblogs.com/xiezhengcai/p/3964455.html 中秋休息了几天,今天又开始捣鼓socket.io了.今天的任务是通过socket.io控制你的 ...