随笔分类 -  DirectX Journal

更关注渲染方面~
PE渲染引擎 一
摘要: 阅读全文

posted @ 2015-03-29 16:57 Meta.Grfx 阅读(1149) 评论(0) 推荐(0) 编辑

一个256行代码的第一人称引擎(Direct2D移植版)
摘要: 阅读全文

posted @ 2014-06-19 20:51 Meta.Grfx 阅读(6196) 评论(0) 推荐(0) 编辑

谈一谈AGP
摘要:typedef enum D3DPOOL { D3DPOOL_DEFAULT = 0, D3DPOOL_MANAGED = 1, D3DPOOL_SYSTEMMEM = 2, D3DPOOL_SCRATCH = 3, D3DPOOL_FORCE_DWORD = 0x7fffffff} D3DPOOL, *LPD3DPOOL;D3DPOOL_DEFAULT在"显存(video memory)"中,包括"本地显存(local video memory)"和"AGP内存",表明资源将按照"设备访问(Device Acess)&qu 阅读全文

posted @ 2013-12-11 11:03 Meta.Grfx 阅读(740) 评论(0) 推荐(0) 编辑

FFT Ocean Rendering
摘要:CPU Calc FFT. 阅读全文

posted @ 2013-06-15 20:59 Meta.Grfx 阅读(510) 评论(0) 推荐(0) 编辑

用dx11检查你的硬件设备中有几个适配器(adapter)
摘要:HRESULT EnumAdapters( [in] UINT Adapter, [out] IDXGIAdapter **ppAdapter); 下面是使用的例子:1 UINT i = 0; 2 IDXGIAdapter * pAdapter; 3 std::vector <IDXGIAdapter*> vAdapters; 4 while(pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND) 5 { 6 vAdapters.push_back(pAdapter); 7 ++i; 8 } 如此一. 阅读全文

posted @ 2012-06-24 17:57 Meta.Grfx 阅读(636) 评论(0) 推荐(0) 编辑

多重采样与dx11检查硬件多重采样能力的API
摘要:由于显示器是由离散的栅格组成的,所以在显示图形时候就会有“锯齿”产生。为了解决这个问题,人们想到了一个方法去“反走样(anti-aliasing)”。它叫“超级采样(supersampling)”,工作方式就如它的名字蕴含的一样,需要"超级"的能力才能工作的很好.当用这种技术时候,"后备缓冲(back buffer)"和"深度缓冲(depth buffer)"的大小被设定为屏幕分辨率的X倍.然后3D场景就渲染到后备缓冲,当要把后备缓冲的内容显示到屏幕上时,后备缓冲中的像素会进行混合操作,比如X个像素混合为一个像素的颜色.这种方法比较暴 阅读全文

posted @ 2012-06-23 19:40 Meta.Grfx 阅读(1565) 评论(0) 推荐(0) 编辑

如何高效更新Direcx11的各种资源与状态
摘要:在DX9时代,很多渲染瓶颈就出现在状态与资源的更新,大量本该简化的Draw调用。虽然DX10后对draw进行了一些优化,但是还不足以让你可以忽略draw的调用方式与次数。我们应该在应用程序的调试版本中恰当使用debug runtime,根据debugRT提供的性能警告来优化程序。为什么说draw调用的方式很影响性能呢?因为每当你调用一次draw,都会牵一发而动全身,影响到其他状态的更新。一般draw都会引起如下状态的变动:1.const buffer的更新。2.资源的变化(顶点缓冲,索引缓冲,纹理等等)。3.InputLayout的变化。Constant Buffer常量缓冲是保存shader 阅读全文

posted @ 2012-04-01 17:26 Meta.Grfx 阅读(1543) 评论(0) 推荐(0) 编辑

根据模型顶点坐标计算法线
摘要:虽然读取了3ds文件,但是3ds文件里并不包含顶点法线。为了计算光照,我们需要手工计算法线。过程如下:三个不共线点构成一个三角形:计算方法:向量ab与向量ac的叉乘得到过点a垂直于三角形abc所在平面的一条直线,这条垂线就是顶点a的法线。下面就是代码:【修正了法线计算bug,2012.04.04】 1 void CModel3ds::CalcNormals() 2 { 3 for(int i = 0; i<m_PolygonNum; ++i) 4 { 5 Vector3 v1 = Vector3_Sub(Vector3(m_pVBbuff[m_pIBbuff[i... 阅读全文

posted @ 2012-04-01 15:34 Meta.Grfx 阅读(8433) 评论(4) 推荐(0) 编辑

读取3ds文件
摘要:3ds文件是3D Max的一种二进制存储格式,它始终没被官方公开,但是也基本被大家hack出来了大半。其“格式”总的来说非常简单,这里介绍一个概念:chunk。3ds文件里的数据都是按chunk一块一块隔离的。每个chunk都有两个标记:2个字节大小的chunkId,用来标识这个chunk存的是什么数据。接着是一个4个字节大小的chunkLen,它根据chunkId不同,可能表示该chunk的大小,也可能表示下一个chunk的位置偏移。-----------------------------chunk Id 2 Bytechunk Len 4 Byte----------------... 阅读全文

posted @ 2012-03-24 20:27 Meta.Grfx 阅读(10569) 评论(0) 推荐(1) 编辑

HLSL Matrix变量的存储方式
摘要:默认情况下,Matrix是Column-major的。也就是说矩阵的每一列存储在一个常量寄存器中。如果是Row-major的话。矩阵的每一行会被存在一个常量寄存器中。我们可以使用#pragmapack_matrix指示符, 或者row_major与col_major关键字来指定矩阵的主排列方式。行矩阵的排列方式(一行为一个寄存器):11121314212223243132333441424344列矩阵的排列方式(一行为一个寄存器):11213141122232421323334314243444行或列为主序只在数据被读进寄存器时起到影响,一旦被读取后,主序将不再影响shader中的代码对数据的 阅读全文

posted @ 2012-03-24 00:09 Meta.Grfx 阅读(1053) 评论(0) 推荐(0) 编辑

HLSL 变量语法定义
摘要:在HLSL中声明变量的语法如下:[Storage_Class] [Type_Modifier] Type Name[Index] [: Semantic] [: Packoffset] [: Register]; [Annotations] [= Initial_Value]Storage_Class:提示编译器该变量的作用域与生命周期,可按任意方式排列。ValueDescriptionexternMark a global variable as an external input to the shader; this is the default marki... 阅读全文

posted @ 2012-03-23 23:51 Meta.Grfx 阅读(3127) 评论(0) 推荐(0) 编辑

Hieroglyph3 框架分析2
摘要:前篇的框架中,有一个事件处理函数:virtual bool HandleEvent( IEvent* pEvent );这个回调函数用于在自己的应用程序中响应各种事件, IEvent的定义如下:class IEvent { public: virtual std::wstring GetEventName( ) = 0; virtual eEVENT GetEventType( ) = 0; };主要用到GetEventType来获取事件类型,目前支持的有:enum eEVENT { //GUI_CURSOR_OVER, ... 阅读全文

posted @ 2012-03-23 18:10 Meta.Grfx 阅读(938) 评论(0) 推荐(0) 编辑

Hieroglyph3(基于DirectX 11的开源渲染引擎) 框架分析
摘要:Hieroglyph3是一个基于微软最新图形API:DirectX 11的渲染引擎,同时也是《Practical Rendering and Computation with Direct3D 11》的配套教材。它对DX11进行了更加方便易用的二次封装,使得dx的使用更加方便,不必每次都手工重复敲那些冗长且大多数不变的代码。Glyph3的运行框架基于类Application,其定义如下:View Code 1 namespace Glyph3 2 { 3 class Application : public IEventListener 4 { 5 public: 6... 阅读全文

posted @ 2012-03-23 14:45 Meta.Grfx 阅读(2637) 评论(4) 推荐(0) 编辑

菜鸟生活在次时代
摘要:“如何入门DX呢?”这句话不知道被说过多少次。“看红龙书。”这句话也不知道被说过多少次。这就是一个菜鸟在次时代的困惑,而那个答案,也许是对的,但绝对不适合所有人。DX11已经几个年头,这到底是个什么东西呢?本菜决定去看看究竟:传送门:DX11教程1这个教程言简意赅,所有重要的也都说了(虽然是用英语说- -!),我不知道大家怎么样,我时常抓不住重点,从小上课就是,所以我决定这次自己总结下重点。撇开使用win32 api创建窗口部分,单纯说说DX11的基础使用流程。其实你不必担心自己会不会窗口创建哪部分代码,因为它其实跟初始化DX一样是固定流程,然后你以后写代码的时候会一次又一次的遇到,现在不必可 阅读全文

posted @ 2011-03-29 21:43 Meta.Grfx 阅读(1048) 评论(1) 推荐(1) 编辑

Direct3D 11 中的资源介绍
摘要:资源是组建场景的材料。它包含了大多数D3D用于解析和渲染场景的数据。所谓资源就是一片内存区域,这个区域可以被Direct3D管线访问。你可以创建强类型或者无类型的资源,也可以控制资源是否同时拥有读和写的访问,还可以使资源仅能被CPU或者GPU访问,或者使两者都可以访问。每一个管线阶段可用最大128个资源。Direct3D资源的生命周期是:# 使用ID3D11Device接口中的方法创建资源。# 使用一个上下文和ID3D11DeviceContext中的方法把一个资源和管线绑定。# 调用资源的Release方法释放一个资源。强类型与弱类型有两种方式去指定一个资源的内存布局结构:# 有类型的(Ty 阅读全文

posted @ 2011-03-15 22:50 Meta.Grfx 阅读(2125) 评论(0) 推荐(1) 编辑

Direct3D 11 中的软件层
摘要:Direct3D 11 运行时由层(Layer)构成。一条基本的准则是在层中添加功能,但不影响已存在的行为。举例来说,核心函数在独立的调试层中有相同的返回值,甚至还会有附加的调试信息。可调用D3D11CreateDevice 或者 D3D11CreateDeviceAndSwapChain 并提供一个或多个D3D11_CREATE_DEVICE_FLAG值在创建device的同时创建层。Direct3D 11 提供以下运行时层:#核心层(Core Layer)#调试层(Debug Layer)Core Layer核心层默认存在,在api和device之间提供一层很薄的映射,最小化高频率调用函数 阅读全文

posted @ 2011-03-14 23:12 Meta.Grfx 阅读(906) 评论(0) 推荐(1) 编辑

Direct3D11中的Device介绍(MSDN中D3D11的教程翻译)
摘要:Direct3D11中对象的建模把资源的创建和渲染功能分割到到一个device和一个或多个context中。这种分离的设计是为了便于多线程。DeviceDevice用来创建资源和枚举一个显示适配器性能。在Direct3D 11中,device用接口ID3D11Device表示。每个程序必须至少有一个device,大部分程序一般也只创建一个device。可以通过调用D3D11CreateDevice 和 D3D11CreateDeviceAndSwapChain来创建一个device,并通过D3D_DRIVER_TYPE标记来指明它要对应于存在于你机器上的那个特定硬件。每个device可以根据需 阅读全文

posted @ 2011-03-14 22:38 Meta.Grfx 阅读(3535) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示