龙书9 最后几章总结 :卡通效果、边缘着色、多重纹理、effect的使用

最后几章大致看了例子,

1.卡通着色:主要是运用 “灰度纹理”,依据light和面片normal的点积,对应灰度纹理的纹理坐标

2.轮廓勾勒:主要运用vertex的扩充和每个vertex的normal进行vertex的延伸,记住同坐标点的vertex可能重复出现多次

比如现在面片三角ABC三个点,每条边扩充为四边形,则共12个点,每个点有自己的normal和两个临接面片的两个normal;

当时还疑惑一个vertex可能对应三个以上的临接面片吧?

原来是进行分别对待了,就是说vertex的position可能相同,但不属于扩充后的四边形;

轮廓勾勒例子过程:

1、对于每个面片,得到四个normal,自己的一个,临接三个normal

2. 每个面片,生成12个vertex;并绑定相应的normal和position

3. 判断是否为边缘点?是的话,则依据自身的normal进行延展

4.render扩充后的所有vertex

3.记住脚本里vector对于position等w默认为1;对于lightDirection、normal等向量要赋值w=0;

4.使用预处理方式设置vertex的FVF格式

5.blend是已经在后buffer的像素和正在光栅化的像素进行融合;

多重纹理同时启用若干层纹理

对于静态物体,预先进行光照计算,使用多重纹理达到高效。

6.最后是effect框架;

            for(int j = 0; j < 4; j++)
            {
                ToonEffect->BeginPass(0);//写在循环外面会出错,如下图
                WorldView     = WorldMatrices[j] * view;
                WorldViewProj = WorldMatrices[j] * view * ProjMatrix;
                ToonEffect->SetMatrix(WorldViewHandle, &WorldView);
                ToonEffect->SetMatrix(WorldViewProjHandle, &WorldViewProj);
                ToonEffect->SetVector(ColorHandle, &MeshColors[j]);
                Meshes[j]->DrawSubset(0);
                ToonEffect->EndPass();
            }

对于每个mesh,由于不同的constant和Matrix,需要renderPass相应的次数,否则会出现以最后一次的pass为准的情况;

时间: 2024-10-17 23:52:30

龙书9 最后几章总结 :卡通效果、边缘着色、多重纹理、effect的使用的相关文章

Directx10 龙书笔记- 第7章课后题 实现火焰动画

火焰的图片我是没找到,找到了几张雷电的,就在d3dcoder.net 的directx10那本书代码下载的Bolt Animations for Chapter 9  里面 里面很多张图片,由于c++也是初学,一时来不及弄字符串拼接的函数. 只能定义很多个帧bmp 然后一个一个载入了 具体代码是建立在那个"crate" 例子工程, 就是那个木箱子的代码基础上. 添加的代码如下: ID3D10ShaderResourceView* mDiffusePic[9]; 我定义了一个能装9张图片

编译原理 龙书 第二章 一个简单的算术式(+,-)翻译器实现

昨天晚上决定正面硬刚神课<编译原理>.硬上龙书. 下面是 一个简单的算术式中缀变后缀的翻译器. 这个也是 龙书中 一个C实现源码 .部分用c++改写. #include <iostream> #include <ctype.h> #include <stdlib.h> #include <stdio.h> using namespace std; int lookahead; void error()//错误处理 { cout<<&q

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo

龙书学习笔记(三)

在将第五章每个示例代码过了一遍之后,大致明白了光照这一章的内容,主要分为四点: 一.光照的类型分为三种,并且均通过结构D3DCOLORVALUE或D3DXCOLOR来表示光线的颜色 环境光(Ambient Light)经其它表面反射到达物体表面,并照亮整个场景,通常用做较低代价的粗略模拟. 漫射光(Diffuse Light)沿着特定的方向传播,到达某个表面后将沿着各个方向均匀反射,因此从各个方向观察物体表面亮度均相同. 镜面光(Specular Light)沿着特定的方向传播,到达一表面后将沿

龙书11_chapter_4 一: GameTime解读

看龙书DX11,首先是第四章,本文对GameTime类进行解释 问:此类主要实现了什么功能? 答:Returns the total time elapsed since Reset() was called, NOT counting any time when the clock is stopped. 从渲染窗口Reset开始记时,记录总共的时间.不包括此间的pause时间. 问:关键时间接口? 答: 1. //获取频率(取决于主板 OS相关,不是CPU的主频)参考:http://www.

龙书学习笔记(二)

补线代之余抽空把第四章上色学了,之所以说之余,是因为这一章内容确实不怎么多,不过为了巩固知识,便结合刚学的上色又做了一个小程序. 首先进行回顾,这一章学到的一共有四点: 一.Direct3D中颜色用RGB(Red.Green.Blue)三元组表示,用两种结构来保存 D3DCOLOR,即unsigned long,共32位,分成4个8位项,分别保存Alpha(这玩意的作用会在第七章学到).红.绿.蓝,均在0x00~0xff之间取值(就是0~255) 通过结构体来保存(D3DXCOLOR和D3DCO

编程经典书籍:龙书、虎书、魔法书

书不在多,而贵在于精. 编程界也有很多经典书籍,而且这些经典书籍很多都有一个霸气的别名,如编译原理领域有"龙书""虎书""鲸书"的说法,听起来是不是瞬间高大上了. 其实,这些书的别名主要根据封面.作者姓名首字母.书名首字母来命名的.下面,我们就来盘点下编程界的龙书.虎书.鲸书.橡书.犀牛书.蝴蝶书...都是指哪些 首先来看看依据封面命名的书籍: 编译原理三大圣书 1.<编译原理>(龙书) 想要学习C/C++可以私信回复"学习

龙书(Dragon book) +鲸书(Whale book)+虎书(Tiger book)

1.龙书(Dragon book)书名是Compilers: Principles,Techniques,and Tools作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman国内所有的编译原理教材都是抄的它的,而且只是抄了最简单的前端的一些内容.龙书中文版第一版龙书英文版第二版 2.鲸书(Whale book)书名是:Advanced Compiler Design and Implementation作者是:Steven S.Muchnick也就是高级编译

irectX 9.0c游戏开发手记之“龙书”第二版学习笔记之10: Chap12: Blending

这一章讲的是Blending,包括alpha 混合和alpha 测试两个方面.这一章的内容总体来说比较简单.然而,后面的习题却并不是很简单-- 下面是习题解答部分: 习题1部分: =============================================================================== 这道题让我们研究使用不同的blend factor和blendop所产生的效果.这个实现起来不难,我就不打算详细解释了,大家都能够看懂的.另外,为了简单,我就不