Rendering with DirectX && HLSL
文章平均质量分 87
chenjinxian_3D
这个作者很懒,什么都没留下…
展开
-
图形引擎(一):创建Windows应用程序
图形引擎(一):创建Windows应用程序本章主要讲述建立一个渲染引擎所需要的基础知识。包括创建一个Visual Studio工程,实现游戏循环,并最终在显示器上显示一个窗口。A New Beginning本章正式开始讲解C++编程(本书中使用C++集中讲解DirectX API的章节),重要的是,不要期望能迅速学会渲染一些场景到屏幕上。简单地说,要学会这些需要一段原创 2016-07-15 17:34:56 · 2227 阅读 · 0 评论 -
Bloom
Bloom高斯模糊effect有各种各样的应用。比如,可以用于区分场景中背景objects(通过模糊处理使得objects呈现出一种失去焦点的现象)和前景objects(没有模糊处理)。另外还可以用于bloom(曝光) effect中,一种bloom effect通过增强场景中明亮的区域来模拟真实世界中的照相机。图18.6显示了在一个场景中使用曝光(上图)和不使用曝光effect的输出结果。翻译 2016-07-30 14:59:53 · 2384 阅读 · 0 评论 -
Skyboxes
Skyboxes一个texture cube常见的一种应用是,把围绕camera的texture cube映射到一个skybox,box或者一个sphere上,并产生一种场景环境的视觉。列表8.1列出了一种skybox effect的代码。列出8.1 Skybox.fx/************* Resources *************/cbuffer CBuffe翻译 2016-07-09 14:00:35 · 1032 阅读 · 0 评论 -
第八章 Gleaming the Cube
第八章 Gleaming the Cube本章介绍图形学相关主题的分类,主要包括skybox rendering,environment mapping,fog,以及color blending(天空的渲染,背景环境的纹理映射,雾境,颜色混合)。前两种effects有一个共同点:都是通过texture cubes实现的。学习这些知识将会让你在图形学的道路上走得更远。Text翻译 2016-07-09 12:02:57 · 1127 阅读 · 0 评论 -
Multiple Lights
Multiple Lights到目前为止,所有的effect中都只使用了一种光源(不算ambient light)。但没有理由说明不能在同一种effect中结合使用directinal,point和spotlights,或者多个相同类型的光源。同时使用多个光源主要瓶颈在于性能问题以及一个shader模型中可用的指令数量。列表7.4和7.5列出了支持多种光源的effect的代码。这段代码没什翻译 2016-07-09 08:28:49 · 1666 阅读 · 0 评论 -
Gaussian Blurring
Gaussian BlurringColor filtering只是使用post-processing生成的众多effects中的一种。另一种常用的technique是对渲染texture进行模糊(blur)处理。有多种方法可以实现模糊的效果,在本书上主要使用Gaussian blurring(高斯模糊),这种方法的名称来自于高斯方程(也称为正态分布),主要用于图像模糊处理。图像模糊处理是翻译 2016-07-29 17:01:26 · 1787 阅读 · 3 评论 -
Color Filtering
Color Filtering现在我们使用FullScreenRenderTarget和FullScreenQuad类编写一个color filter演示程序。一个color filter就是以某种方法修改输出的颜色值。如果你曾经佩戴过彩色的眼镜,你就已经见过color filtering的效果。在这个示例程序中,我们将会编写多个color filter shaders,包括grayscale翻译 2016-07-28 23:27:19 · 1072 阅读 · 0 评论 -
Spotlights
Spotlights一个spotlight是一个directional light和point light的组合。在world space中有一个坐标位置,但是光线只能照射到某个特定方向。另外,spotlight与point light一样,也是根据距离而衰减,但spotlight还会围绕光线的原始方向而衰减。可以把spotlight看作一个虚拟的手电筒,形成一个focus beam(聚焦翻译 2016-07-08 17:50:20 · 1035 阅读 · 0 评论 -
第7章 Additional Lighting Models
第7章 Additional Lighting Models本章在上一章光照模型的基础上再介绍point lights,spotlights以及在场景中添加多种光源。在讲解过程中,将会进一步学习HLSL和effect框架。Point Light场景中的一个point light就好比在你周围的某个位置有一个灯泡,灯泡的光线会辐射到四面八方。这与directional翻译 2016-07-08 15:35:30 · 997 阅读 · 0 评论 -
Hello,Structs!
Hello,Structs! 在本节,使用C风格的结构体重新编写HelloShaders effect。使用数据结构比单个的参数能更好的组织多个shader输入和输出。首先在NVIDIA FX Composer中创建一个新effect和material,就像本章开始那样,使用Add Effect向导添加effect,或者简单的拷贝HelloShaders.fx到一个新文件HelloStru翻译 2016-07-03 09:22:59 · 865 阅读 · 0 评论 -
Texture Addressing Modes
Texture Addressing Modes你可能已经注意到了在TextureMapping.fx中对SamplerState对象成员AddressU = WRAP和AddressV = WRAP的赋值。这就是纹理寻址模式,当纹理坐标超出范围[0, 1]时,你可以自行控制应该怎么显示。Direct3D支持四种纹理寻址模式:Wrap,Mirror,Clamp,Border。Wrap在翻译 2016-07-04 10:27:04 · 1586 阅读 · 0 评论 -
Specular Highlights(镜面光)
Specular Highlights(镜面光)在模拟一个diffuse surface时,使用的是光滑,无光泽的object。这种方法,对于场景中的大部分objects都是合适的,而且很多光照模型都基于此种方法。但是,有时也要模拟闪光的模型表面,比如抛光的金属或者大理石地板的表面。Specular highlights就是用于模拟这些带有光泽的object表面。Phong翻译 2016-07-07 18:59:02 · 4004 阅读 · 0 评论 -
第十八章 Post-Processing
第十八章 Post-ProcessingPost-processing是指在场景渲染之后,使用一些图形技术对场景进行处理。比如,把整个场景转换为grayscale(灰度)样式或使场景中明亮的区域发光。本章将编写一些post-processing effects,并集成到C++渲染引擎框架中。Render Targets到目前为止,所有的示例程序都是直接把场景渲染到back buffer翻译 2016-07-28 23:21:50 · 6787 阅读 · 0 评论 -
第十三章 Cameras
第十三章 Cameras翻译 2016-07-18 21:29:14 · 1461 阅读 · 0 评论 -
Diffuse Lighting(漫反射光)
Diffuse Lighting(漫反射光)不同的材质表面反射光的方式也不同。在镜面上光的反射角度与入身角度相等。当在一只猫的眼睛里看到一束怪异的光芒,这就是光的反射性:这是由于猫的眼睛反射光的方向与光源的照射方向平行,但是方向相反。漫反射表面对光的反射在各个方向上都一样。近似计算一个漫反射光,最简单并且最常用的模型是Lambert’s cosine law(朗伯余弦定律)。根据Lambe翻译 2016-07-07 18:27:45 · 3942 阅读 · 1 评论 -
A Model Rendering Demo
A Model Rendering Demo现在我们开始编写一个示例程序,用于演示上一节讲述的模型系统。在该示例中,渲染一个只包含单个mesh的sphere模型。该模型(Shpere.obj)存储一个Wavefront OBJ格式的文件中,可以在本书配套网站上获取。渲染时还会使用BasicEffect.fx文件(BasicEffect中没有使用纹理,只是对vertex colors进行插值计算翻译 2016-07-24 23:06:40 · 1183 阅读 · 0 评论 -
第十四章 Hello, Rendering
第十四章 Hello, Rendering现在,终于完成了应用程序的基础框架,并开发了足够的代码以用于渲染工作。本章将会实现第一个完整的3D应用程序。并使用大量的Direct3D和Effects 11 API函数。完成这些工作之后,将会更深入的理解Direct3D图形管线。Your First Full Rendering Application现在正式开始在屏幕上渲染第一个3D ob翻译 2016-07-19 22:28:27 · 1531 阅读 · 0 评论 -
Shadow Mapping
Shadow Mapping现在已经完成了实现shadow mapping所需要的所有模块。实际上,阴影映射的处理过程与投影纹理映射使用occlusion testing基本相同。首先,从光源投射的方向把场景渲染成一个depth map。然后从camera投射的方向渲染场景,并使用depth map作为输入用于确定一个object是否“位于阴影中”。列表19.8中列出了第一个shadow-mapping shader代码。翻译 2016-08-04 00:54:06 · 2219 阅读 · 6 评论 -
Rendering a Triangle
Rendering a Triangle完成了上面的工作之后,现在可以准备绘制一个简单的三角形了。渲染一组nonindexed primitives(比如,一个三角形不需要带有index buffer)的步骤如下:1. 设置input-assembler阶段所使用的primitive的topology顺序。2. 把input layout绑定到input-assembler阶段。3. 把vertex buffer绑定到input-assembler阶段。4. 设置所有的shader consta翻译 2016-07-19 23:44:45 · 978 阅读 · 0 评论 -
图形引擎(二):初始化Direct3D
图形引擎(二):初始化Direct3D在上篇文章中,已经讲述了工程的详细配置,并创建了一个基础的Windows窗口程序。现在开始,添加图形引擎的渲染部分,创建Direct3D程序。在这个引擎中,主要使用DirectX 11.1进行图形渲染部分的开发,如果你更喜欢使用Direct3D其他的版本,或者OpenGL,可以自行实现。初始化Direct3D根据下面的步骤执行Direct3D的原创 2016-07-16 21:57:02 · 1591 阅读 · 0 评论 -
图形引擎(三):添加应用程序中的各种组件
图形引擎(三):添加应用程序中的各种组件在进一步学习Direct3D渲染之前,我们首先在应用程序中添加一些组件,用于完善图形引擎。组件主要分为两种:一种是基本的GameComponent类用于完成一些控制操作,另一种是在些基础上扩展的DrawableGameComponent类,用于执行绘制操作。在这一步,我们主要添加三个组件,分别为FpsComponent,Keyboard,Mous原创 2016-07-21 23:16:00 · 996 阅读 · 0 评论 -
图形引擎(四):创建自定义的Camera
图形引擎(四):创建自定义的Camera上一篇文章中,已经讨论了如何在应用程序中添加组件,并完成了对输入设备如键盘和鼠标的响应操作,本篇文章中将讲解如何使用鼠标和键盘控制场景。任何一个3D场景中都需要使用一个虚拟Camera用于显示,根据Camera的坐标位置和观察方向的不同,可以观察场景的不同角度。为此,我们将会创建一个基础的Camera类,包含了Camera的基础功能属性,然后在此基础原创 2016-07-24 16:14:20 · 821 阅读 · 0 评论 -
Data-Driven Engine Architecture
Data-Driven Engine Architecture在本书的所有示例程序中都是在代码中指定assets-models,textures和materials(模型,纹理,材质)。这种方法可以简化示例程序,但是在实际的现代渲染引擎中并不常用。相反,这些引擎都是data driven(数据驱动结构),由配置文件构成场景中的各种objects。一个data-driven引擎意味着在场景中没有任何数翻译 2016-08-14 15:18:00 · 1269 阅读 · 0 评论 -
Deferred Shading
Deferred Shading到目前为止,本书中所使用的渲染方法都是forward rendering,本质上来说是指独立渲染场景中的每一个objects,对于每一个object都要使用lights,textures以及shadows计算最终的pixels。另外,我们还探讨了single-pass rendering(用于一个object的所有光照都在一个shader中进行计算)和multipas翻译 2016-08-13 11:46:08 · 3542 阅读 · 8 评论 -
第二十二章 Additional Topics in Modern Rendering
第二十二章 Additional Topics in Modern Rendering这一章是全书的最后一章,旨在讨论作为一名图形程序员新手接下来需要学习哪些知识。因此,本章所讲述的内容与之前章节不同,主要是讨论一些现代渲染的相关主题,而不是深入讲解某个具体的图形技术。特别是讨论一些提高图形渲染应用程序性能的方法技巧,并探讨如何使用deffred shading和global illuminatio翻译 2016-08-10 00:07:58 · 1327 阅读 · 3 评论 -
第四部分:Intermediate-Level Rendering Topics
第四部分:Intermediate-Level Rendering Topics章节链接:第18章 Post-Processing第19章 Shadow Mapping第20章 Skeletal Animation第21章 Geometry and Tessellation Shaders第22章 Additional Topics in Mod翻译 2016-07-27 22:32:13 · 689 阅读 · 2 评论 -
A Basic Tessellation Demo
A Basic Tessellation Demo把前面几节所讲的triangle和quad tessellation shaders集成到应用程序中并不需要编写特别复杂的C++代码。总的来说,首先创建对应的materials与这两个shaders进行交互,然后创建用于表示单个triangle和quad的vertex buffers,并添加一些成员变量用于保存tessellation factors翻译 2016-08-09 13:13:42 · 996 阅读 · 0 评论 -
Motivation:Tessellation Shaders
Motivation:Tessellation Shaders从DirectX 11开始,Direct3D中引入了硬件实现tessellation的功能。Tessellation是指对表面进行细分(subdivision of surfaces),进而增加一个表面的geometry数量来提高精度。这种方法支持把low-ploy models(表示模型具有较少的primitives)传递到GPU翻译 2016-08-08 22:31:00 · 2162 阅读 · 0 评论 -
第二十一章 Geometry and Tessellation Shaders
第二十一章 Geometry and Tessellation Shaders本章,我们将会使用Direct3D图形管线中两个新增的阶段:geometry和tessellation shaders。这两个管线阶段支持动态创建vertices,甚至在硬件层改变一个surface的topology(基本几何图元的拓扑结构)。此外,我们还会深入学习这两个管线阶段的工作流程,并通过一些示例程序实现各种翻译 2016-08-07 20:12:07 · 3495 阅读 · 5 评论 -
Animation Rendering
Animation Rendering在上一节完成了所有数据的导入,并建立了完整的动画模型支持系统,现在我们就可以开始渲染一个animation。渲染一个动画模型的主要基于以下4个步骤:1、推进当前时间。2、更新skeleton中每一个bone的tranformations。3、把更新后的bone transformations发送到skinned model shader中。翻译 2016-08-06 23:52:43 · 1038 阅读 · 0 评论 -
Importing Animated Models
Importing Animated Models在正式使用skinned model shader之前,需要先导入一个具体模型的动画数据。这是一个说起来容易做起来很难的任务,而且需要额外的plumbing(管道工程,对应于第15章导入模型时所讲的content pipeline)。值得庆幸的是,Open Asset Import Library(见第15章“Models”)支持动画模型,并且翻译 2016-08-05 23:51:53 · 821 阅读 · 0 评论 -
第十九章 Shadow Mapping
第十九章 Shadow Mapping本章,我们将会学习如何渲染阴影(shadows)。同时还会介绍depth maps(深度纹理,2D纹理中存储了深度值而不是颜色值)和projective texture mapping(投影纹理映射,想像下Batman(蝙蝠侠) signal)。另外,在渲染阴影时还会遇到一引起常见的问题,我们需要确定如何解决这些问题。Motivation阴影我们视翻译 2016-07-31 21:45:07 · 1831 阅读 · 8 评论 -
第二十章 Skeletal Animation
第二十章 Skeletal AnimationSkeletal animation(骨骼动画)是指互相连接的变换(骨头)组成的分层集合,以及对应的模型mesh(即骨骼的皮肤)。当这些变换随着时间变化而变化时,模型的mesh就会形成动画效果。本章,我们将会探讨skeketal animation,并开发一些系统用于支持模型动画。翻译 2016-08-05 06:39:00 · 1121 阅读 · 0 评论 -
An Indexed Cube
An Indexed Cube接下来,通过再创建一个示例结束本章的内容,在这个例子中,使用一个index buffer渲染一个3D立方体。要创建一个CubeDemo类,只需要简单地复制TriangleDemo类的代码,并增加一个ID3D11Buffer指针类型的的成员变量mIndexBuffer。该变量用于存储访问vertex buffer的indices数组。回顾一下第1章“In翻译 2016-07-21 22:51:08 · 759 阅读 · 0 评论 -
第三部分:Rendering with DirectX
第10章 Project Setup and Window Initialization第11章 Direct3D Initialization第12章 Supporting Systems第13章 Cameras第14章 Hello, Rendering!第15章 Models第16章 Materials第17章 Lights翻译 2016-07-12 13:21:14 · 986 阅读 · 0 评论 -
The Game Loop
The Game LoopGame loop是一种循环系统,不断调用刷新场景中的objects并绘制到显示器上。通常情况下,在程序启动后不久就初始化并执行game loop,而且一直运行到程序结束。有各种各样的game loop设计,图10.8描述了一种最基础的设计。图10.8 A basic game loop.从代码的角度看,这种game loop设计与列表10.2的相同翻译 2016-07-12 23:43:33 · 1040 阅读 · 0 评论 -
第十章 Project Setup and Window Initialization
第十章 Project Setup and Window Initialization本章主要讲述建立一个渲染引擎所需要的基础知识。包括创建一个Visual Studio工程,实现游戏循环,并最终在显示器上显示一个窗口。A New Beginning本章正式开始讲解C++编程(本书中使用C++集中讲解DirectX API的章节),重要的是,不要期望能迅速学会渲染一些场景到翻译 2016-07-12 21:51:34 · 1932 阅读 · 0 评论 -
NVIDIA FX Composer
NVIDIA FX Composer对于游戏玩家和图形开发者,Nvidia已经成为一个家喻户晓的名字。Nvidia因为创造了GPU而闻名于世,而且在图形硬件和软件领域都是世界领导者。NVIDIA在图形社区的众多贡献之一是FX Composer,一款用于缩写shaders的集成开发环境。本节介绍了这个工具,在本书上将会广泛使用。首先需要注意的是用HLSL编写shaders与编写其他软件是相似翻译 2016-06-30 18:09:03 · 4619 阅读 · 0 评论 -
第三章 Tools of the Trade
第三章 Tools of the Trade图形程序员可以通过各种优秀的工具来辅助编写shader,开发调试应用程序,创建资源。幸运的是大部分工具都是免费使用的,因为学习图形学不需要一大笔投资。本章将介绍当前市场上最好的一些工具。 Microsoft Visual StudioMicrosoft Visual Studio是微软平台上编写软件的一整套完成的集成开发环境。支持各种编程翻译 2016-06-30 10:33:47 · 1900 阅读 · 0 评论 -
Displacement Mapping(移位贴图)
Displacement Mapping(移位贴图)翻译 2016-07-11 23:47:16 · 15944 阅读 · 0 评论