DirectX
文章平均质量分 85
FreedomRoad~
专注于app底层/架构/算法/业务工作流程,记录进步的足迹和感悟。
展开
-
DX和Shader model/windows关系
一、DX和Shader model关系时至微软发布DirectX 10.1之后,Shader Model 已经有五个版本了:分别是Shader Model 1.0(DirectX8.0)、Shader Model 2.0(DirectX9.0b)、Shader Model 3.0(DirectX9.0c)、Shader Model 4.0(DirectX10)、Shader M原创 2016-05-05 09:47:22 · 1547 阅读 · 0 评论 -
Direct3D Blending融合技术
一、基础概念1. 融合公式将正在提交到表面渲染的像素,和后台缓存表面已经光栅化的像素进行融合。融合的时候主要对alpha透明通道进行融合,同是其它颜色通道也会进行融合。融合公式:OuputPixel = SoucePixel xSourceBlendFactor + DestPixel x DestBlendFactor; x符号是颜色向量的乘法,会对各个颜色分量分别相乘原创 2014-12-14 21:29:26 · 1702 阅读 · 0 评论 -
深度测试Alpha混合方法Alpha测试
转载自:http://blog.csdn.net/xoyojank/article/details/20585661. 深度测试a) 深度缓冲区:屏幕上每个像素点的深度信息的一块内存缓冲区.D3D通过比较当前绘制的像素点的深度和对应深度缓冲区的点的深度值来决定是否绘制当前像素.b) D3DPRESENT_PARAMETERS. Auto转载 2015-07-31 23:35:39 · 4542 阅读 · 0 评论 -
Direct3D纹理映射技术
一、纹理映射的基本概念IDirect3DTexture9来表示,纹理是类似于表面的像素矩阵,与表面不同的是它可以被映射到三角形单元中。1.纹理坐标系是2D纹理图像中的uv坐标系,因为直到三角形顶点光栅化时,三角形已经被映射到屏幕坐标系了,纹理映射才会真正进行,所以uv坐标系类似屏幕坐标系,坐标系原点在图像的左上角,u往右递增,v往下递增,uv大小都在[0,1]的值域范围内。2.三角形顶原创 2014-12-13 21:41:43 · 2702 阅读 · 0 评论 -
Direct3D Stencil模板缓存技术
一、概念和应用Blend融合是源像素上固定区域给与透明度,实现透明效果,也可以隐藏自身或者隐藏目标像素(标记来自于源像素固定区域的)。模板缓存是提供一个模板缓存(和深度缓存一起,和后台缓存对应),对渲染到后台缓存的像素进行过滤,标记来自于目标像素,后写入的像素就被过滤到后台缓存渲染。总之,Blend目标是融合透明度,过滤像素可以通过源像素和像素的透明度;Stencil目标是过滤渲染到后原创 2015-05-10 23:09:57 · 4195 阅读 · 1 评论 -
拾取技术和图形管道逆变换
总结:关于向量和点变换:3D数学中,向量可以表示点也可以表示向量,当表示点时候进行矩阵变换要用coord需要考虑平移w=1,当表示向量时候进行矩阵变换用normal不需要考虑平移w=0,用齐次向量常数是0表示向量不包括平移,非齐次向量常数是1表示的是空间点包括平移。关于投影变换:矩阵变换:将屏幕空间捕获到的位置,转换为游戏世界坐标系中的位置世界坐标系->观察坐标系->投影坐原创 2015-07-19 14:21:54 · 1043 阅读 · 0 评论 -
D3D变换的理解
1.简化变换的思想:使用惯性坐标系(惯性坐标系是世界坐标系平移到物体坐标系的位置)可以简化物体-世界,世界-物体,或者说任何两个坐标系间的转换做一个中间的转换,使问题变得简单。使用嵌套坐标系(父坐标系-子坐标系-子坐标系)也可以分解问题,简化复杂的变换逻辑。其实把问题简单化思考的方法,不外乎实例化,拆分它,转换它,再组合转换抽象回来,就可以很elegant的解决问题了。很多物体间的方位和运原创 2015-05-16 22:14:06 · 5456 阅读 · 0 评论 -
D3D的绘制函数总结
关于绘制batch和性能优化每个设置设备状态到发出绘制命令的转换都将产生一个Batch( [bætʃ]一批 )。动态顶点缓冲的推荐使用模式是一个可以合并Batch的模式,即不断地填充顶点数据,但不立刻绘制,在缓冲填满时才提交绘制一次,当然能合并的前提是各个batch都使用相同的设备状态,即纹理、材质、RenderStates、变换矩阵等。DrawPrimitive渲染一个没有索引编制的序列,在数据原创 2015-07-19 23:37:10 · 6382 阅读 · 0 评论 -
D3D地图Terrain类构建思想和实现
地图类的构建思想:其实无论平原,山地,丘陵,沙漠,沙滩都可以用地图网格来表示,巨大的地形网格(网格有顶点向量信息,材质光照,纹理信息)和场景物体,摄像机位置等信息来表达就可以了(2D中需要用45度地图实现3D场景效果,3D中不需要的)。实现网格信息的步骤:1.地图高度:从raw灰色图中读取高度图,直接从二进制图片中读取,BYTE转换为int存储因为会放大高度。2.顶点缓存:在地原创 2015-07-06 23:31:10 · 2337 阅读 · 0 评论 -
HLSL Shader编程基础总结
基本前提概念 Shader是一种映射到GPU硬件汇编语言上的高级语言,Shader中的数据类型是要声明类型和用途的,用途其实就是和着色器寄存器关联,输入位置寄存器,输出位置寄存器,输出颜色寄存器等。Shader HLSL中的颜色是rgba的类型,不要弄错了。Shader中的每一个类型,函数,字符串都是有含义的。 顶点和像素着色器中,常量表用SetDefault传原创 2015-07-27 23:07:15 · 8681 阅读 · 0 评论 -
高级纹理映射知识汇总
参考整理自:http://17de.com/library/d3d_6im/d3dim6_20.htmhttp://www.cppblog.com/lovedday/archive/2008/05/22/50782.html多阶层纹理的基本概念纹理拥有一个surface表面和格式大小等数据,后台缓存也有一个surface,是可以从后台缓存获取surf原创 2015-08-03 08:56:49 · 3831 阅读 · 0 评论 -
从勾画轮廓边深入三角网格邻接信息
勾画轮廓边,描边总结的三角网格邻接信息网格的绘制和拆分:可以先绘制网格,如果网格需要修饰那么需要拆分重组网格,那么需要深入了解网格的索引缓存,顶点缓存,邻接信息,属性子集材质和纹理,优化后的属性表等,这里主要讲邻接信息。理解网格操作中重要的邻接信息:根据当前的面片信息,得到当前的邻接信息,因为邻接信息和索引缓存对应的,邻接信息下标(3*i, 3*i + 1, 3*i +原创 2015-08-01 09:01:01 · 1836 阅读 · 0 评论 -
D3DXMatrixLookAtLH视图变换函数详解
/*D3DXMatrixLookAtLH函数返回的是世界->视图变换矩阵。视图坐标系和局部坐标系是一样的,都是世界坐标系转换为指定的局部坐标系,从局部点到世界点需要先旋转后平移Mx*My*Mz*P的变换矩阵,而从世界点到局部点要进行先平移后旋转的逆过程P-1Mz-1My-1Mx-1的变换矩矩阵(PMzMyMx是重用局部点到世界的变换).矩阵是重新分解和组合空间位置和方位的空间变原创 2014-12-07 21:20:08 · 6944 阅读 · 0 评论 -
3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解
作用:Builds a left-handed perspective projection matrix based on a field of view.获得指定参数的透视投影矩阵。D3DXMATRIX* D3DXMatrixPerspectiveFovLH( _Inout_ D3DXMATRIX *pOut, _In_ FLOAT fovy, _In原创 2014-11-25 22:54:23 · 4208 阅读 · 0 评论 -
左右手坐标系区别和联系
本文是分析,所谓的右手坐标系转换为左手坐标系需要的:z轴取反;x轴取反(或者改变摄像机位置); 渲染绕序改变,其中的进一步的原因。1.三角网格顶点数据改变记得左手坐标系中摄像机坐标系是z轴正方西向里的,右手坐标系中摄像机坐标系是z轴负方西向里的,所以:1)经典:右手坐标系转换为左手的时候需要三角网格数据z轴翻转2)美术软件中:3DS MAX中却要y-z相互翻原创 2015-08-09 23:37:42 · 9039 阅读 · 4 评论 -
D3D网格(一)
1.D3D网格基础(顶点缓存,索引缓存,属性缓存,获取邻接信息,网格优化,优化后产生属性表缓存)D3D网格就是指三角索引网格,包括了三角形列表信息和顶点信息,也就是包含了顶点缓存(顶点位置、uv、点法向量、材质),索引缓存,纹理信息,材质信息用于光照,网格的操作,点焊接简单焊接优化三角形,面拆分着色;边坍塌消减三角形,点拆分反演边坍塌生成LOD网格。 除此之外,还包括了属性缓存原创 2015-07-04 23:35:34 · 1852 阅读 · 0 评论 -
D3D网格(二)
从网格XFile文件中导入网格数据,并渲染出来;实际中一般自定义自己的二进制格式文件,实现导出模块,和加载模板,包括了模型和动画。计算网格中的顶点法向量。ID3DXPMesh渐进式网格的创建和使用。用网格顶点创建网格包围体,AABB或球体;实际中很多是在3ds max中创建好包围盒导出,并跟随物体网格一起移动。1.从XFile文件中导入ID3DXMesh网格函数为D3D原创 2015-07-05 10:56:27 · 1766 阅读 · 0 评论 -
D3D动画相关接口理解
一、D3DXFRAME接口这里的frame不是帧keyFrame,而是动画子网格和变换的节点Node有包含了本节点的静态变换,节点关联的网格容器(一个或多个网格),frame网格节点名字,拓展D3DXFRAME_EX中还包含了Combined matrix 框架节点中的组合变换(累积变换,包括从原始数据(模型坐标系)TransformationMatrix变换开始),Com原创 2015-09-27 13:31:45 · 1577 阅读 · 0 评论 -
HLSL效果框架实例之高斯模糊
实例目的// 1.提高了一个完整的fx框架编写Shader,解决掉了编写过程中遇到的所有问题。验证了在FX框架可以不用GetParameterByName获取句柄的,直接用字符串作为句柄即可。// 2.对高斯模糊图片提供了一个思路,就是高斯过滤矩阵通过程序设置给Shader,相比在Shader中做高斯运算性能更高// 或者相比在Shader中写死高斯过滤矩阵,但是这样会不够灵活。/原创 2015-07-31 23:22:03 · 5681 阅读 · 1 评论 -
骨骼动画原理和实例之MD5SkeletalAnimation
项目说明和代码已经上传至git hub,见:https://github.com/Jeromecen/MD5SkeletalAnimation原创 2015-09-26 21:29:53 · 1733 阅读 · 0 评论 -
顶点动画原理和实例之MD2FrameAnimation
项目已经上传github,见:https://github.com/Jeromecen/MD2FrameAnimation原创 2015-09-26 18:32:14 · 1026 阅读 · 0 评论 -
D3D摄像机类和非摄像机类需要进行摄像机操作的思路
1.摄像机类的实现思想摄像机类的实现,主要是因为D3DXMatrixLookAtLH()求取的是指定摄像机位置和观察坐标系向量的矩阵,但如果摄像机位置和观察坐标系向量是根据用户输入来确定的,那么D3DXMatrixLookAtLH显得力不从心。原因:D3DXMATRIX* D3DXMatrixLookAtLH( _Inout_ D3DXMATRIX *pOut,原创 2015-07-05 16:17:43 · 1856 阅读 · 0 评论 -
D3D绘制字体
1.ID3DXFont绘制字体(用GDI支持中文,用FreeType得到的中文字体效果更佳)1)ID3DXFont简单的设置字体ID3DXFont是基于GDI接口的字体绘制,绘制速度比较慢,但是能够处理复杂的字体设置和格式。图形应用程序底层都是使用GDI或DirectX或者Opengl图形图像库来绘制字体,图形图像,模型,视频动画的。关键是 D3DXFONT_DESCA结构原创 2015-07-04 09:56:45 · 8204 阅读 · 1 评论 -
Direct3D开启光照和使用材质绘制物体
如果开启光照(默认是开启的),那么就不用指定顶点的颜色。而是Direct3D将顶点送入light engine, 根据光源类型、材质material和物体表面相对光源的朝向,计算出每个顶点的颜色值。原创 2014-12-12 22:28:43 · 1901 阅读 · 0 评论 -
Direct3D数学基础函数
一、向量:1.直接相等加减直接D3DXVec3LengthD3DXVec3Normalize数乘直接2.点乘D3DXVec3Dot点乘D3DXVec3Dot,主要计算夹角(投影角)V1( x1, y1).V2(x2, y2) = x1*x2 + y1*y2A.B = |A||B|Cos(θ)FLOAT D3DXVec3Dot( _In_原创 2014-12-07 21:04:41 · 1541 阅读 · 0 评论 -
D3D创建基本图元函数解析
1.CreateVertexBuffer创建一个顶点缓存Device->CreateVertexBuffer( 3 * sizeof(Vertex), // size in bytes D3DUSAGE_WRITEONLY, // flags Vertex::FVF, // vertex format D3D原创 2014-12-02 23:56:58 · 1410 阅读 · 0 评论 -
Direct3D的Adapter显卡性能检测类
//一、D3DCheckAdapter.h文件#ifndef _D3DCHECKADAPTER_H_#define _D3DCHECKDISPLAY_H_#include"D3DUtility.h"class D3DCheckAdapter{private: D3DCheckAdapter(){};public: ~D3DCheckAdapter()原创 2014-11-23 21:25:15 · 3582 阅读 · 1 评论 -
D3DPRESENT_PARAMETERS详解
翻译自:http://msdn.microsoft.com/en-us/library/windows/desktop/bb172588(v=vs.85).aspxDescribes the presentationparameters.定义后台缓存表面的参数(包括深度模板缓存是否定义和像素格式).typedef structD3DPRESENT_PARAMETERS { UIN翻译 2014-11-30 22:34:56 · 10265 阅读 · 0 评论 -
Direct3D的Runtime/Driver运行时机制整理
一、Runtime/Driver中的命令缓存Command buffer和Driver Buffer 缓存翻译指令: 当应用程序调用一个D3D API时,RUNTIME将调用转换成设备无关的命令,然后将命令缓冲到这个COMMANDBUFFER中。这个BUFFER的大小是根据任务负载动态改变的,当这个BUFFER满员之后,RUNTIME会让所有命令FLUSH到KERNEL模式下的驱动原创 2014-11-23 10:52:25 · 3160 阅读 · 0 评论 -
D3DPOOL详解
定义资源缓存的存储位置。 VIDEO MEMORY(VM):显卡上的显存,CPU只能通过AGP或PCI-E总线访问,读写速度都是非常慢的,CPU连续写VM稍微快于读,因为CPU写VM时会在CACHE中分配32或64个字节(取决于CACHE LINE长度)的写缓冲,当缓冲满后会一次性写入VM。SYSTEM MEMORY(SM):就是系统内存,存放在System Memory上的R翻译 2014-11-23 10:26:25 · 5295 阅读 · 0 评论 -
D3DLOCK详解
一个或者多个组合的锁定选项,用来描述资源锁定类型的表现。D3DLOCK_DISCARD:使用方式会强制为:D3DUSAGE_DYNAMIC。应用程序将会丢弃锁定区域内的所有内存。对于顶点和索引缓存,整个缓存都会被丢弃。这个选项只有对用D3DUSAGE_DYNAMIC使用方式创建的资源是合法的。 D3DLOCK_DONOTWAIT:当显卡驱动没有能够马上锁定表面的时候,允翻译 2014-11-23 10:40:16 · 4139 阅读 · 0 评论 -
Direct3D基础概念和模型整理
模型主要是物理组成,数据传输和固定图形管道模型;概念主要包括IDirect3D, Adapter, Device, swap chain,surface后台缓存、前台缓存、深度和模板缓存,资源,资源类型_D3DRESOURCETYPE,格式_D3DFORMAT,资源存放的内存区域Pool,资源的使用标识Usage。0.图形模型1) 显卡物理组成和数据传输:基本物理组成模型:(原创 2014-11-14 00:32:02 · 3955 阅读 · 0 评论 -
IDirect3DDevice9::Present函数
// Swapthe back and front buffers.交换后台缓存和前台缓存,并提交到渲染管道,将后台缓存内容渲染出来。HRESULT Present(// 参数1: NULL值是全部的后台缓存矩形表面,若D3DPRESENT_PARAMETERS的SwapEffect为D3DSWAPEFFECT_COPY,则可不为NULL。// 如果指定的矩形表面,大于后台缓存矩形表面原创 2014-11-11 00:03:35 · 7294 阅读 · 0 评论 -
CreateDevice函数详解
翻译自:http://msdn.microsoft.com/en-us/library/windows/desktop/bb174313%28v=vs.85%29.aspxCreates a device torepresent the display adapter.创建一个设备对象代表显示的显卡。HRESULT CreateDevice( [in] UI翻译 2014-11-25 23:59:23 · 7639 阅读 · 0 评论 -
d3d渲染状态
转载自:http://www.cnblogs.com/konlil/archive/2010/10/17/1956655.htmld3d渲染状态在渲染循环中,在渲染物体之前需要设置好dx的渲染环境,其中调用的最频繁的api莫过于用于切换渲染状态的函数:IDirect3DDevice::SetRenderState(). SetRenderState函数用于设置各种不同类型的渲染转载 2014-12-08 18:44:14 · 5211 阅读 · 0 评论 -
D3D粒子系统设计关键要点
粒子系统设计思想用D3D8以后用点精灵来指定一个粒子,而不是D3D8以前的需要用公告板平面(四个顶点)来模拟一个粒子。点精灵粒子的大小,纹理颜色,都可以用渲染状态来改变。粒子系统的渲染信息结构(位置和颜色)和粒子系统的属性(包括了位置和颜色变化、速度加速度和生命期),粒子属性会每帧更新且拷贝到粒子系统信息结构体渲染即可(不拷贝不需要那么多消息,拷贝了又会影响性能)。1. 使用点精灵原创 2015-07-08 20:48:59 · 1376 阅读 · 0 评论 -
Direct3D颜色
1. D3DCOLOR表示16进制每个颜色8bit的32位颜色typedef DWORD D3DCOLOR;D3DCOLOR的创建:1).D3DCOLOR brightRed = D3DCOLOR_ARGB(255, 255, 0, 0);2).D3DCOLOR brightGreen = D3DCOLOR_XRGB(0, 255, 0);#define D3DCOLOR_XR原创 2014-12-10 23:22:06 · 1925 阅读 · 0 评论 -
Direct3D基础回顾
Direct3D基础概念渲染接口机制IDirect3D9 + 显卡适配器 + 窗口/全屏模式和窗口句柄+设备类型和顶点运算类型+ D3DPRESENT_PARAMETERS + D3DCAPS9= device对象device对象存在工作状态和丢失状态。device创建资源缓存到表面,设置DX状态命令操作资源,渲染出来(渲染部分程序一直绘制)。资源管理原创 2015-05-10 23:23:45 · 1243 阅读 · 0 评论 -
Direct3D Draw函数 异步调用原理解析
转载自:http://www.cnblogs.com/lingjingqiu/p/3170727.html概述在D3D10中,一个基本的渲染流程可分为以下步骤:清理帧缓存;执行若干次的绘制:通过Device API创建所需Buffer;通过Map/Unmap填充数据到Buffer中;将Buffer设置到DeviceContext中;调用Draw执行绘制过程;转载 2015-05-17 10:32:49 · 1232 阅读 · 0 评论 -
IDirect3DDevice9::Clear函数
HRESULT Clear(// pRects 裁剪四边形的个数,pRects等于NULL时,Count是0;其它情况不能取0。 [in] DWORD Count,// 是后台缓存用屏幕坐标来描述的四边形区域对象指针,所有区域是经过视口坐标系裁剪的(在视口内),0是整个后台缓存。 [in] const D3DRECT *pRects, // 一个或多个缓存,包括D3DC原创 2014-11-06 15:02:01 · 3034 阅读 · 0 评论