2012年4月23日

Per-Pixel Lighting

摘要: 利用pixel计算tangent进行bumpmap 阅读全文

posted @ 2012-04-23 20:32 Meta.Grfx 阅读(604) 评论(0) 推荐(0) 编辑

2012年4月7日

你又不杀狼人,何必非要银弹?

摘要: 银弹是个好东西,但是在生活中,在项目中我们真的离不开它吗?比如参数传引用还是传指针,比如“++i”还是“i++”,甚至是java和c++的效率比较。它们之中,总能分出伯仲。但是,丧失了那小数点后n位的效率提升,你的产品就能让用户兴奋,真的让用户感受到在高速公路上驰骋的快感么?有的人觉得指针很不错,我的看法是:如果人人都会走钢丝,那么走钢丝就不算是绝技,而且人人也不需要都会走钢丝。你何必为了因为C#是垃圾回收型内存管理机制就觉得用C++的指针就胜人一筹呢?用指针,你要考虑如何释放,如何防止内存泄漏。但是垃圾回收做了这一切。在多数项目上,我们不得不承认,指针的内存泄漏问题是最难定位也不好避免的。同 阅读全文

posted @ 2012-04-07 11:49 Meta.Grfx 阅读(1847) 评论(11) 推荐(0) 编辑

2012年4月1日

如何高效更新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 阅读(1469) 评论(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 阅读(8266) 评论(4) 推荐(0) 编辑

2012年3月24日

读取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 阅读(10516) 评论(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 阅读(995) 评论(0) 推荐(0) 编辑

2012年3月23日

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 阅读(3047) 评论(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 阅读(935) 评论(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 阅读(2621) 评论(4) 推荐(0) 编辑

2012年3月16日

Mercurial(hg) 个人开发者的利器

摘要: 阅读全文

posted @ 2012-03-16 22:32 Meta.Grfx 阅读(594) 评论(0) 推荐(0) 编辑

导航