![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Direct3D
IIIIIIIIIIIIIOO
这个作者很懒,什么都没留下…
展开
-
基于FBX SDK的FBX模型解析与加载-(一)
1. 简介FBX是Autodesk的一个用于跨平台的免费三维数据交换的格式(最早不是由Autodesk开发,但后来被其收购),目前被 众多的标准建模软件所支持,在游戏开发领域也常用来作为各种建模工具的标准导出格式。Autodesk提供了基于C++(还有Python)的SDK来实现对FBX格式的各种读写、修改以及转换等操作,之所以如此是因为FBX的格式不是公开的,这也是FBX的诟病之一。与F转载 2013-10-06 21:47:00 · 2270 阅读 · 0 评论 -
四叉树空间索引原理及其实现
四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率,因此四叉树是GIS中常用的空间索引之一。常规四叉树的结构如图所示,地理空间对象都存储在叶子节点上,中间节点以及根节点不存储地理空间对象。转载 2013-12-05 11:37:06 · 863 阅读 · 0 评论 -
Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)
Deferred Shading,看过《Gems2》 的应该都了解了。无论是Unreal3、Crysis还是星际2,都已经支持或者准备支持这个技术。不过因为国内这种环境,真正在项目中能用到的可能并不多,不知道这次星际2出来后,情况会不会有所变化。^_^本文是对Gems2这篇文章的一个补充,小生在做此次外包的时候,由于需要,翻译了这篇文章,不敢独享,遂贴于此,望能抛砖引玉,愿众位前辈不吝赐教转载 2013-12-29 18:38:07 · 2414 阅读 · 0 评论 -
IDirect3DDevice9::SetClipPlane
HRESULT SetClipPlane( DWORD Index, CONST float * pPlane);虽然DX SDK上面有,但还是有很多朋友不喜欢看那些拉丁字母,我也顺便就记录一下吧。参数:第一个是索引,不用说了。第二个是存着 A B C D的数组。这个数组最后会用来构建 Ax+By+Cz+Dw = 0;平面。然后顶点会根据自已转载 2014-02-22 14:24:06 · 792 阅读 · 0 评论 -
HLSL固有函数
Intrinsic Functions (DirectX HLSL)The following table lists the intrinsic functions available in HLSL. Each function has a brief description, and a link to a reference page that has more detail abou转载 2014-02-17 23:21:13 · 1399 阅读 · 0 评论 -
推导正交投影变换
之前我们在《深入探索透视投影变换》以及《深入探索透视投影变换(续)》中研究了OpenGL、D3D以及M3G的透视投影变换的原理以及生成方法。这些方法在当前的主流图形API中得到了普遍使用。但关于投影应用,还有一类经常使用的投影方式需要我们深入理解——正交投影,我们在本篇文章里面研究它(这里假设读者已经看过前两篇文章,并理解了绝大多数的理论,因为正交投影比透视投影的推导关系简单得多,因此我们的推导会转载 2014-03-29 02:03:23 · 727 阅读 · 0 评论 -
深入探索透视纹理映射(上)
在这篇文章中,我们将探讨图形流水线中另一个复杂的主题——透视纹理映射(Perspective Texture Mapping)。你可能听说过仿射纹理映射(Affine Texture Mapping)(没听过?没关系,我会让你理解的),并且知道在大多数情况下仿射的已经足够了,但如果不能很好的理解透视纹理校正,可能某一天当你在3D空间中移动相机的时候,突然发现你所熟悉的一些场景开始在屏幕上剧烈地“蠕转载 2014-03-29 02:07:35 · 1122 阅读 · 0 评论 -
深入探索透视纹理映射(下)
在上一篇文章中,我们探讨了学习透视纹理映射所需要的基础知识。我们知道了顶点在通过透视投影变换之后,是如何一步一步通过流水线进入屏幕空间的。也知道了一个非常简单的三角形扫描线转换算法,以及通过线性插值实现的仿射纹理映射。尽管我们使用的这个流程非常的直接、简洁,还有大量的细节没有添加(片元操作、雾化、颜色累加、混合等等等等),但这些真的就是组成一个固定流水线的简单光栅器的基本步骤了。但我们目前所提及的转载 2014-03-29 02:08:19 · 1031 阅读 · 0 评论 -
深入探索3D拾取技术
3D拾取在游戏中,玩家需要通过点击2D屏幕来选择3D物体,这个过程就是拾取(picking)。拾取是3D游戏必不可少的基本操作,它实现了玩家和游戏世界内对象的交互。虽然拾取技术很基本,但它却迷惑了很多3D初学者。很多朋友都问过我关于拾取的细节问题,这让我觉得很有必要具体探讨一下该技术。 其实,拾取之所以让很多开发者感到复杂,主要原因在于它跨域了流水线的多个阶段,并且是逆流水转载 2014-03-29 02:09:39 · 622 阅读 · 0 评论 -
D3D中.X文件的解析
一个完整的.X文件类似这样的结构:xof 0303txt 0032//定义模板template FVFData {DWORD dwFVF;DWORD nDWords;array DWORD data[nDWords];}template EffectInstance {STRING EffectFilename;[...]}templ转载 2013-12-09 10:13:39 · 1875 阅读 · 0 评论 -
Animated Crowd Rendering 骨骼动画模型的批量渲染
Animated Crowd RenderingBryan Dudash NVIDIA CorporationWith game rendering becoming more complex, both visually and computationally, it is important to make efficient use of GPU hardware. Us转载 2013-11-30 12:17:17 · 1460 阅读 · 0 评论 -
Shadow Map在DirectX9.0 SDK Sample 的实现方法
很宝贵的资料,总结的相当不错。目前原创作者未知,如有知情者肯请告知,感激不尽~ 一.前言这个教程主要面对DirectX9.0的初学者,文中代码说明部分以DirectX9.0c SDK(August2006)中的ShadowMap Sample 为例进行讲解。如果没有D3D矢量运算基础,HLSL,或是对D3D流程不熟悉的朋友推荐《3D游戏程序设计入门》(翁云兵转载 2013-10-20 23:37:54 · 985 阅读 · 0 评论 -
游戏引擎中的各种剔除算法
在引擎中最影响渲染效率的是场景管理,剔除算法又是其中的最主要的内容。这里简单总结一下各种流行的遮挡剔除的算法,只是为了我的游戏引擎而做的一点功课。1。bsp。Binary space partition。优势在于这种算法的数据结构十分简单(二叉树),而且在效率方面非常好,因为强调了离线计算(即场景保存为bsp的数据格式,在渲染前就加载生成bsp树)。比较麻烦的是它的实现非常的复杂,而且用dx来转载 2013-10-22 21:48:58 · 1046 阅读 · 0 评论 -
加速&优化技术
加速&优化技术 译者序:这是一篇讲解3D引擎中,某些细节优化的文章,文中使用的方法同样适用于其他场合。不过因为本人对这方面的技术和词汇不是很熟悉,所以这篇翻译可能存在很多谬误,希望大家多加批评指正。原文:Speed-up & Optimization Techniques绪论 在这个页面,我收集了一些不同的加速3D引擎的小窍门。我会先介绍一些显而易见的,因为许多人会转载 2013-10-22 21:50:12 · 560 阅读 · 0 评论 -
DirectX 性能优化
1 只在必须的时候Clear。 IDirect3DDevice9::Clear函数通常需要花费较多的时间,因此要尽量少调用,而且只清空的确需要清空的缓存。 2 尽量减少状态切换。并且将需要进行的状态切换组合在一起设置。 状态包括RenderState,SamplerState,TextureStageState等 3 纹理尺寸尽可能小 4 从前至后渲染场景中转载 2013-11-21 01:19:07 · 1338 阅读 · 0 评论 -
四元数
1. 数学分析1) 四元数是什么东西?这个东西算盘、矩阵、复数是一类东西,即数学工具,数学家们创造了这个东西来解决一些数学问题。其实四元数是一种超复数,他不是只有一个虚数的复数,而是有三个虚数的复数。我们先回顾一下复数吧。 2) 虚数的来源实数集中没有-1的平方根,因为没有哪个实数的平方等于-1,所以数学家们就创造它——虚数i,并且定义了i * i = -1转载 2013-11-20 23:39:34 · 1052 阅读 · 0 评论 -
DIRECTX中的四元数
四元数是从复数中演变过来的,不过,感觉四元数的研究好像还不是很系统。好在,我们只要会用四元数就可以了,更深的复数概念完全可以不必理会。四元数最大的好处就是线性插值,其次是可以避免欧拉角表示方位时的所谓万向锁(Gimbal Lock)问题。这里把自己的学习小结一下。1、定义。typedef struct D3DXQUATERNION { FLOAT x; FLOAT y; FLOAT z;转载 2013-11-21 00:54:55 · 1987 阅读 · 0 评论 -
四元数-Quaterion
1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域。四元数在3D图形学中主要用于旋转,骨骼动画等。简单地来说,四元数描述了一次旋转:绕任意一个轴旋转一个角度。 四元数的定义形式:(w, x, y, z)。假如,绕轴向量v(_x,_y,_z)正向(右手旋转法则)旋转角度p,则对应转载 2013-11-21 01:16:24 · 1177 阅读 · 0 评论 -
深入探索透视投影变换
透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感转载 2014-03-29 02:04:29 · 601 阅读 · 0 评论 -
推导相机变换矩阵
一些网友写信给我希望能够了解固定流水线中世界空间到相机空间变换矩阵的具体推导过程。其实之前我在《向量几何在游戏编程中的使用6》中已经简单的把相机变换作为一个使用基理论的例子进行了说明,但可能仍然不够具体。这篇文章中,我会尽力阐述相机变换的整个来龙去脉。希望能够对正在学习固定流水线的朋友们有所帮助。这里我们仍然会在推导相机变换之前介绍几个理论知识,目的是为了更好的理解推导过程。我们马上开始!什么转载 2014-03-29 02:06:36 · 781 阅读 · 0 评论 -
深入探索透视投影变换(续)
在上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL所使用的透视投影矩阵的生成方法。正如我们所说,不同的图形API因为左右手坐标系、行向量列向量矩阵以及变换范围等等的不同导致了矩阵的差异,可以有几十个不同的透视投影矩阵,但它们的原理大同小异。这次我们准备讨论一下Direct3D(以下简称D3D)以及J2ME平台上的JSR184(M3G)(以下简称M3G)的透视投影矩阵,主要出于以下几个目转载 2014-03-29 02:05:30 · 482 阅读 · 0 评论 -
fxc的使用及shader调试技巧
如果当前使用的版本是dx10的fxc,则当前fxc不支持ps_1_x的shader,在编译该类shader时需加上/Gec,fxc会自动的把ps_1_x版本的shader编译成ps_2_x的版本。当然该shader只能在支持shader2的机器上运行。如果要使用传统版本的fxc即dx9下的fxc,这时要使用/LD,此时就支持ps_1_x到ps_3_x的所有的shader版本。查看所转载 2014-10-13 23:41:35 · 1722 阅读 · 0 评论 -
用fxc.exe编译shader文件(*.fx, *.hlsl)的设置
原文出自:http://msdn.microsoft.com/en-us/library/windows/desktop/bb509709(v=vs.85).aspx#Profiles 拿DX11 SDK中BasicCompute11为例子右击BasicCompute11.hlsl -> properities -> Custom Build Tool -> command l转载 2014-10-13 23:44:24 · 2471 阅读 · 0 评论 -
在VS中让Shader自动编译
将Shader文件加入工程,在文件属性中找到Custom Build Step(自定义生成步骤)设置如下Vertex ShaderCommand Line:"%DXSDK_DIR%\Utilities\Bin\x86\fxc.exe" /nologo /O1 /LD /Zpr /Tps_3_0 /Fo"$(OutDir)\$(InputName).wpu" "$(InputPa转载 2014-10-13 23:42:43 · 1344 阅读 · 0 评论 -
Understanding GPU Derivatives(ddx,ddy)
Complex filtering depends on knowing just how much of the texture (or shading) we need to filter. Modern GPUs such as the GeForce FX provide partial derivative functions to help us. For any value转载 2015-02-08 16:43:27 · 1418 阅读 · 0 评论 -
D3DPOOL详解
定义资源缓存的存储位置。 VIDEO MEMORY(VM):显卡上的显存,CPU只能通过AGP或PCI-E总线访问,读写速度都是非常慢的,CPU连续写VM稍微快于读,因为CPU写VM时会在CACHE中分配32或64个字节(取决于CACHE LINE长度)的写缓冲,当缓冲满后会一次性写入VM。SYSTEM MEMORY(SM):就是系统内存,存放在System Memor转载 2015-05-27 22:38:12 · 1293 阅读 · 0 评论 -
D3DLOCK详解
翻译自:http://msdn.microsoft.com/zh-cn/library/windows/desktop/bb172568(v=vs.85).aspx一个或者多个组合的锁定选项,用来描述资源锁定类型的表现。D3DLOCK_DISCARD:使用方式会强制为:D3DUSAGE_DYNAMIC。应用程序将会丢弃锁定区域内的所有内存。CPU不会因锁定而等待,可以有转载 2015-05-27 22:39:48 · 755 阅读 · 0 评论 -
D3DUSAGE详解
翻译自:http://msdn.microsoft.com/en-us/library/windows/desktop/bb172625(v=vs.85).aspx显存与非D3DUSAGE_DYNAMIC:创建缓存时,如果未使用标记 D3DUSAGE_DYNAMIC ,则称所创建的缓存为静态缓存(static buffer)。静态缓存一般被放置在显存中,以保证存储于其中的数据得到最转载 2015-05-27 22:40:38 · 1025 阅读 · 0 评论 -
D3DPOOL(资源池)
D3DPOOL(资源池)D3DPOOL定义了资源对应的内存类型,资源可以是texture surface, vertex buffer等,从内存的角度来看,资源有以下几种类型。D3DPOOL_DEFAULTD3DPOOL_MANAGEDD3DPOOL_SYSTEMMEMD3DPOOL_SCRATCHD3DPOOL_FORCE_DWORDD3DPOOL转载 2015-05-27 23:19:19 · 661 阅读 · 0 评论 -
一个简单实用的SSAO实现
by José María Méndez 原文链接: http://www.gamedev.net/reference/programming/features/simpleSSAO/ 绪论 全局照明(global illumination, GI)是一个计算机图形学术语, 它指的是所有表面之间相互作用的光照现象(光线来回跳动, 折射, 或者被遮挡), 例如: 渗色(col转载 2014-09-03 12:37:27 · 665 阅读 · 0 评论 -
Deferred Shading VS Deferred Lighting
鉴于传统的Forward Rendering对于多光源渲染时的低效问题,各种Deferred Rendering的方法被提出并且广泛使用。比如Deferred Shading以及其之后的Deferred Lighting。Deferred方法相对于传统Forward Rendering最主要区别都是提高了对多光源渲染时的效率,它是是将光源的计算转到屏幕空间来进行,进而不浪费无效的光源着色。转载 2014-09-14 22:28:19 · 825 阅读 · 0 评论 -
Tabula Rasa中的延迟着色技术
Deferred Shading,看过《Gems2》 的应该都了解了。无论是Unreal3、Crysis还是星际2,都已经支持或者准备支持这个技术。不过因为国内这种环境,真正在项目中能用到的可能并不多,不知道这次星际2出来后,情况会不会有所变化。^_^本文是对Gems2这篇文章的一个补充,小生在做此次外包的时候,由于需要,翻译了这篇文章,不敢独享,遂贴于此,望能抛砖引玉,愿众位前辈转载 2014-09-07 18:02:18 · 960 阅读 · 0 评论 -
【译】《GPU GEMS 3》----Next-Generation SpeedTree Rendering 翻译[1]
最近在研究树木的渲染,看了一些相关的技术说明,几乎都是老外写的,再次为中国游戏产业的前景感到担忧。看了几天的英文,索性也把其中的重要部分翻译了出来,在这里与大家共享,先贴出《GPU GEMS 3》第4章的翻译,第一次写翻译,不免有错漏的地方,欢迎大家指出。如需转载,请先与本人联系。name:LeYond ,qq:413952706 第四章 下一代SpeedTree渲染4转载 2014-09-21 15:33:13 · 1261 阅读 · 0 评论 -
【译】《GPU GEMS 3》----Next-Generation SpeedTree Rendering 翻译[3]
4.3 阴影 有了轮廓的效果提升,我们还要继续为提高阴影的质量而前进。因为对每个游戏引擎来说,一般情况下阴影技术都会有所不同,out-of-the-box SpeedTree的阴影是在程序未运行时便预计算好的,并且是固定不变的,所以SpeedTree能够工作在许多不同的引擎上。但这种方法有这些缺点:· 当树木的模型随风运动时,阴影的动画只能运用纹理坐标的变化,转载 2014-09-21 15:34:09 · 1061 阅读 · 0 评论 -
【译】《GPU GEMS 3》----Next-Generation SpeedTree Rendering 翻译[4]
4.3.2 叠加阴影贴图图4-15 照明比较(a)预计算漫反射贴图 (b)逐像素阴影照明 (c)普通光照 (d)双面光照 4.4.2 镜面光照明 除了调节双面的照明,我们修改镜面光照,以提高其真实性。首先,在普通的镜面光照射下,远处的数目偏向微弱的闪光,所以我们随着距离的拉远而降低镜面光。下一步,我们我们注意到现实中的树叶有获取其他的转载 2014-09-21 15:36:28 · 1295 阅读 · 0 评论 -
Inside Geometry Instancing(下)
3.3.3 Vertex Constants Instancing 在vertex constants instancing方法中,我们利用顶点常量来储存实体属性。就渲染性能而言,顶点常量批次是非常快的,同时支持实体位置的移动,但这些特点都是以牺牲可控性为代价的。 以下是这种方法主要的限制:l 根转载 2014-09-09 21:44:54 · 484 阅读 · 0 评论 -
Inside Geometry Instancing(上)
翻译:claymanclayman_joe@yahoo.com.cn仅供个人学习使用,勿用于任何商业用途,转载请注明作者^_^注:呵呵,发现我对翻译东西上瘾了。这次翻译了《GPU Gem2》中第三章的内容,大家共同学习^_^在交互式程序中,丰富用户体验的重要方法之一就是呈现一个充满大量各种有趣物体的世界。从数不清的草丛、树木到普通杂物:所有这些都能提高画面最终的效果转载 2014-09-09 21:45:07 · 554 阅读 · 0 评论 -
DXT纹理压缩
我们知道游戏中对于3D物体表面细节的表现最重要的还是靠贴图来实现的,那么越是高分辨率越是真彩色的贴图自然表现力也是越强,但是同时带来的问题是所需占用的内存会成倍的上升,而节省内存这一点在目前的游戏中还是非常非常重要的。 所以各个平台上都在使用纹理压缩的技术,让纹理贴图在内存占用和显示效果能达到一个尽可能的平衡。在DirectX中,使用一种叫做DXT的纹理压缩技术,目前这种技术被大部分显卡所支持转载 2014-08-29 23:58:30 · 775 阅读 · 0 评论 -
从深度缓冲里重建位置信息
(从深度缓冲里重建位置信息) 首先我必须让大家知道,我们现在讨论的是什么问题?我们研究的是延时渲染中一个非常有用的应用:从一个深度值中还原前一帧渲染像素的3D位置信息(可以是在视图空间也可以是在世界空间的)。在实践中,其实并不复杂。对任意像素进行渲染的时候,你本来就知道它2D的位置 ,采样一个深度值中便可以得到它完整的3D位置信息。不过重建信息时候仍然很容易陷入困境中,虽然你有很多转载 2014-09-14 17:03:07 · 1597 阅读 · 0 评论 -
MipMap的LOD实现原理
当使用MipMap时我们可能会遇到tex2D,tex2Dbias,tex2Dgrad,tex2Dlod几种纹理采样函数。在PS中tex2D自动计算应该使用的纹理层。tex2Dbias需要在t.w中指定一个偏移量来把自动计算出的纹理层全部偏移指定的值。tex2Dgrad需要提供屏幕坐标x和y方向上的梯度来确定应该使用的纹理层。tex2Dlod需要在t.w中明确指定要使用的纹理转载 2016-08-27 14:40:42 · 2967 阅读 · 0 评论