|
|
自己初学这东东, 想法可能比较傻。
第3章, 关与Specular&Diffuse
在渲染每一个MESH时, 都要渲染PASS 遍,也就是被灯光照射到的灯光数, 然后通过,ALPHA 混合叠加。
我不知道是不是这样做,就是他的精华的地方, 或者都是这样做的。
这样做消耗好打。
所以我想, 修改代码, 渲染所有的MESH 只 PASS 一遍, 然后一次计算所有的灯光
看看效果如何,或者根本计算不出来正确结果。 你们是怎样理解的。
还有一个地方, 作者渲染一个MESH 时, 首先要用 NoOutputMaterial(这个VS,PS 没用实质用处) 渲染一遍,渲染时
首先关闭 SetRenderState(D3DRS_ColorWirite, false), 不往桢缓冲写数据。当Z BUFFER
正常打开。
然后在根据灯光数渲染PASS 遍。 这时打开,SetRenderState(D3DRS_COLORWRITE, true)
但关闭, Z BUFFER, 并且 Z 函数,设置为 EQUAL,从表面上看是用NoOutputMaterial渲染时只是把 MESH 对应的 Z BUFFER 设置上, 在渲染一遍时 通过z 函数 为 equa,l 把MESH 颜色设置到对应的 frame buffer 里, 完成渲染。我把NoOutputMaterial 这遍渲染 删除后并把 后面
D3DRS_COLORWRITE=true, Z-Fun= LessEuqal, D3DRS_ZWRITE= true 设置为正常时, 得到的结果一模一样。 问题就是是否有更深层的含义在里面,自己不能蚕透, 虽然两个结果都一样, FPS 几乎没有 变化。但第一种毕竟多执行好多操作,如顶点变换。 想法可能很幼稚。
[em24] [em24] [em24] [em24] [em24] |
|