Directx 开发
Directx 开发
装逼是种天赋@#E@$
一直在装逼,从未打死
展开
-
directx数学基础1
向量(vector):在游戏中通常表示位置,移位,方向,速度和作用力 矩阵(matrix):在游戏中提供高效的变换方式,几何变换与坐标变换(请看directx数学基础2)向量(同具有大小和方向的物理量)坐标系(directx为左手坐标系) 看上去就像图中z向量相反向量长度(length)几何学: 有向线段的长度 代数方式: 毕达哥拉斯定理(’不规则’勾股定理) 单位向量(normalize:原创 2017-02-09 19:04:23 · 493 阅读 · 0 评论 -
directx前言
说在前面的话为什么学directx?原因很简单:对游戏开发的热爱,是游戏开发者必学的一门功课 为什么选择directx?跟directx相比有opengl,还有gdi等,虽然directx不支持跨平台,但是实际开发或者个人游戏也好,用unity之类的引擎解决就好, directx其他方面还是远超opengl,文档也很多。至于gdi,,gdi的性能就是很大的瓶颈,directx直接基于com的效率原创 2017-02-09 18:47:55 · 480 阅读 · 0 评论 -
directx数学基础2
向量(vector):在游戏中通常表示位置,移位,方向,速度和作用力(请看directx数学基础1) 矩阵(matrix):在游戏中提供高效的变换方式,几何变换与坐标变换矩阵(矩形实数数组)矩阵乘法(a中的行向量的维数必须与b中的列向量的维数相同)例如: 转置矩阵(transpose: 对一个矩阵的行和列进行互换)标记为T单位矩阵(identity: 除了对角线上的元素为1外,其他元素均为0)单位原创 2017-02-09 19:15:42 · 483 阅读 · 0 评论 -
directx初第一卷
配置环境下载Directx SDK(directx sdk june10就可以了),在VS(vs2013差不多了)中新建win32空项目, 然后在视图->属性管理器找到 Debug|Win32->Microsoft.Cpp.Win32.user, 双击,选择vc++目录,设置包含目录和库目录为刚刚下的directx sdk目录中include,lib\x86 的路径 选择链接器,设置附加依原创 2017-02-09 19:18:13 · 372 阅读 · 0 评论 -
directx初第二卷
初始化添加头文件#include <Windows.h>#include <d3dx9.h> 声明变量LPDIRECT3D9 g_pD3D = NULL;LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;关键代码//创建directx接口if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) retu原创 2017-02-09 19:19:06 · 271 阅读 · 0 评论 -
directx初第三卷
固定功能渲染流水线顶点处理:非T&L顶点(未经过坐标变换和光照处理的顶点)->[第一阶段]坐标变换和光照处理(世界变换->取景变换->光照处理->投影变换->视口变换) 光栅化计算:T&L顶点(经过坐标变换和光照处理的顶点)->[第二阶段]光栅化处理(纹理映射->图元处理->内部函数改变渲染状态) 像素处理:片段处理器->显存帧缓冲->显示 可编程渲染流水线镶嵌处理:顶点->镶嵌器 顶点处理原创 2017-02-09 19:20:21 · 253 阅读 · 0 评论 -
directx初第四卷
顶点缓存声明变量LPDIRECT3DVERTEXBUFFER9 g_vertexBuffer = NULL; 设计顶点结构struct d3dVertex{ float x, y, z, rhw; //经过变换的坐标 unsigned long color; //颜色};//(FVF)灵活的顶点格式#define d3dfvf_vertex (D3DFVF_XYZRHW |原创 2017-02-09 19:21:31 · 313 阅读 · 0 评论 -
directx初第五卷
索引缓存声明变量IDirect3DVertexBuffer9* vb = 0;IDirect3DIndexBuffer9* ib = 0; 设计顶点结构struct vertex { float _x, _y,_z; vertex(){} vertex(float x, float y, float z) { _x = x; _y = y; _z原创 2017-02-09 19:24:30 · 264 阅读 · 0 评论 -
directx初第六卷
坐标变换世界变换(局部坐标系转换到世界坐标系)缩放D3DXMATRIX scale;//缩放矩阵(把生成的缩放矩阵存到矩阵变量中,x,y,z)D3DXMatrixScaling(&scale, 2, 1, 1);//设置变换(世界矩阵变换类型,和参数1矩阵右乘的矩阵)g_pd3dDevice->SetTransform(D3DTS_WORLD,&scale); 旋转D3DXMATRIX r原创 2017-02-09 19:27:07 · 276 阅读 · 0 评论 -
directx初第七卷
光照处理光照类型环境光(ambient) 环境光就是场景中物体表面产生的反射光的统一光照,环境光没有位置和方向,并且值为常量。//设置渲染状态(环境光,颜色)g_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(100, 100, 100));漫反射光(diffuse)由光照方向以及顶点法向量计算得到镜面反射光(specular)原创 2017-02-09 19:28:42 · 299 阅读 · 0 评论 -
directx初第八卷
材质创建几何体通过顶点缓存和索引缓存 请看前面的章节通过内置几何体ID3DXMesh* mesh;//创建立方体(设备指针,宽度,高度,深度,把结果存到网格指针,无三角形索引指针)D3DXCreateBox(g_pd3dDevice, 2, 2, 2, &mesh, 0);//创建茶壶(设备指针,把结果存到网格指针,无三角形索引指针)D3DXCreateTeapot(g_pd3dDev原创 2017-02-09 19:29:23 · 286 阅读 · 0 评论 -
directx初第九卷
纹理纹理映射 声明变量IDirect3DTexture9* texture = 0;创建纹理贴图//读取纹理图片(设备指针,纹理图片地址,把结果存到贴图指针)D3DXCreateTextureFromFile(g_pd3dDevice, "UnityPlayerIcon.png", &texture);//读取纹理图片(设备指针,纹理图片地址,使用贴图宽度,使用贴图高度,渐进纹理级数,标志,纹原创 2017-02-09 20:03:43 · 312 阅读 · 0 评论 -
directx初第十卷
混合alpha混合//开启alpha混合g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);//设置融合因子g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,原创 2017-02-18 12:52:18 · 246 阅读 · 0 评论 -
directx初第十一卷
深度深度测试声明变量 ID3DXMesh* box = 0;ID3DXMesh* wall = 0;设置网格D3DXCreateBox(g_pd3dDevice, 8, 8, 8, &box, NULL);D3DXCreateBox(g_pd3dDevice, 10, 10, 0.5f, &wall, NULL);开启深度测试g_pd3dDevice->SetRenderState(D3DRS原创 2017-02-18 12:53:15 · 340 阅读 · 0 评论 -
directx初第十二卷
模版声明变量ID3DXMesh* Teapot = 0;ID3DXMesh* Mirror = 0;创建模版缓冲区跟深度一样清除模版缓冲区//其中D3DCLEAR_STENCIL清除模版区缓存g_pd3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, D3DCOLOR_XRGB(0, 0, 25原创 2017-02-19 20:51:25 · 319 阅读 · 0 评论 -
directx初第十三卷
Shadow声明变量ID3DXMesh* mesh;ID3DXMesh* wall; 开启深度缓存不再赘述绘制场景D3DXMATRIX T;D3DXMatrixTranslation(&T, 1, 1, 0);g_pd3dDevice->SetTransform(D3DTS_WORLD, &T);g_pd3dDevice->SetMaterial(&red_mtrl);mesh->Dra原创 2017-02-22 16:51:13 · 392 阅读 · 0 评论 -
directx中第一卷
DirectInput接口略(个人觉得直接用win32自带的更好)原创 2017-02-22 16:51:48 · 424 阅读 · 0 评论 -
directx中第二卷
字体、文本2D字体声明变量ID3DXFont* font = 0; 创建字体D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, "黑体", &font);绘制文本RECT rect = { 0, 0, width, height };原创 2017-02-22 16:52:45 · 297 阅读 · 0 评论 -
directx中第三卷
Model声明变量ID3DXMesh* mesh = 0;vector<D3DMATERIAL9> Mtrls(0);vector<IDirect3DTexture9*> Textures(0);DWORD numMtrl = 0;加载模型HRESULT hr = 0;ID3DXBuffer* adjbuffer = 0;ID3DXBuffer* mtrlbuffer = 0;//加载x原创 2017-02-22 16:53:46 · 329 阅读 · 0 评论 -
directx中第四卷
渐进网格声明变量ID3DXPMesh* PMesh = 0;产生渐进网格加载模型hr = SourceMesh->OptimizeInplace( D3DXMESHOPT_ATTRSORT| D3DXMESHOPT_COMPACT| D3DXMESHOPT_VERTEXCACHE, (DWORD*)adjbuffer->GetBufferPointer(),原创 2017-02-25 16:29:54 · 320 阅读 · 0 评论 -
directx中第五卷
包围盒定义包围盒struct BoundBox{ BoundBox(); bool isPointInside(D3DXVECTOR3& p); //是否包含点 D3DXVECTOR3 _min; D3DXVECTOR3 _max;};BoundBox::BoundBox(){ _min.x = -Infinity; _min.y = -Infin原创 2017-02-25 16:32:44 · 463 阅读 · 0 评论