从这一章起,龙书第二版正式进入了shader部分了!利用HLSL语言编写各种shader的内容贯穿此书的大半部分,而且是最令人激动的部分了!用shader可以实现很多用非shader技术难以实现或者根本无法实现的效果!
不过到这里我们只是对于HLSL语言入了个门而已,很多比较重要的东西暂时没有讲,而是会在后来需要用到的地方逐一讲述。这比较符合学习曲线,但是并不方便复习。推荐读者们做一个HLSL语言知识的汇总表;或者,如果足够有自信的话,有问题的话直接阅读SDK文档。
习题1部分:
这部分要我们重写第7章的Cube Demo代码,不过采用的是shader方法。这个很简单,如果这个不会的话,那么还是好好看看书吧!
附:第8章习题1答案下载地址:
习题2部分:
这道题很简单,让我们把TriGridDemo的线框颜色改成红色。这个只需要把transform.fx中float4 TransformPS() : COLOR的语句
return float4(0.0f, 0.0f, 0.0f, 1.0f);
改成
return float4(1.0f, 0.0f, 0.0f, 1.0f);
就行了。
习题3-5部分:
习题3-5分别让我们利用D3DX内置的函数绘制一个圆锥、茶壶和圆环。这几道题都很trivial,如果分开来做的话;所以,为了增加挑战性,我便弄了一个“三合一”版本,再一次毕其功于一役!
要切换不同的mesh,只要按数字键1-3就性了。这是该程序运行时的几个截图:
附:第8章习题3-5答案下载地址:
为了让这个程序更加有趣,我为每个mesh都设定了它自己的摄像机系统和视角变换、投影变换矩阵,这样,不管你对茶壶做了什么事情,当你返回圆锥的时候,圆锥还是原来的模样。
这个程序的实现并不像看上去那么简单。我当初编写的时候遇到了一个神奇的问题,就是初始的时候可以见到图形,但是切换之后就不见图形了。这个问题困扰了我好几天,后来实在没办法了,只好和之前写的程序慢慢对比,发现原来是源文件的drawScene函数里
HR(gd3dDevice->BeginScene());
语句后忘了写下面这个语句了:
HR(mFX->SetTechnique(mhTech));
唉,真是冤枉啊!