最近一个星期一直在写一个可以用来展示自己技能的程序,计划包含高度图生成地形、顶点着色、像素着色、水面渲染、镜头控制、天空盒子等基础效果,反正想到什么或者学到什么就加进去,尽可能多的把自己会的都展示出来就对了。
目前,,恩,截至2分钟前,基本完成了生成地形和地形光照(进度非常慢哈,没办法,,边做边学),在这里,还是写些东西备忘。
事实上地形很容易就能做出来,最开始是直接把高度图读出来的顶点信息存入顶点缓冲的,用固定管道渲染正常,如图1,但是却不能通过顶点着色渲染,死活都只能显示一个背景。
所以查了几本书,找到另一个办法,就是把顶点信息写入一个MESH里面去。在这之前我还以为MESH只能通过外部文件导入生成,原来也是可以控制的啊~方法呢,无非也就是Lock然后写入信息然后Unlock.使用固定管道渲染与之前无异,使用顶点着色也不再只是单纯的背景色,但还是不能显示纹理,只有黑白色的亮度.如下图2.就为这个问题,卡了三四天之久,找了N多资料,然后对照自己的程序检查,都没找出问题来,直到半小时前(也许到发稿时就变成1小时前了),我决定再做一次检查,然后,就发现自己犯了两个非常非常"二"的错误(当然,事前我也想到肯定是一个不经意的地方写错了个单词之类的),一切都在 g_pEffect->SetTexturer("Tex0",g_pTexDiffuse);这短短的一句里,,先是发现Diffuse被我打成了Height(高度图变量),然后又发现Tex0被打成了tex0,....太郁闷了,,修改后正常了,如图3(顶点高洛德着色)以及图4(像素着色,Phong);