上次画的刀因为是装备, 所以有多种颜色的纹理
而多种颜色的纹理都要去查表...
虽说DBC文件很简单, 但现在懒得看
找个单一纹理的弄吧, 纹理名全存在M2文件里的
随便看了看, 觉得这头蓝龙挺帅的, 就它了
这次除了Mesh正好可以研究下Animation
目标:
没有进行渲染状态的管理, 比如alpha test/blend切换, envMap切换, cull切换等等. 这样是不是要写一堆shader来设置State?
牙和爪子部分第二层贴图把原来的颜色覆盖了, 可能是因为应该用envMap的原因吧
其它部分现在统一用的alpha blend, 这样会出现遮挡问题, 需要进行排序. 想想应该能用alpha test代替.
(因为没走N3的渲染流程, 发现它默认是不创建DepthBuffer的, 囧......害我查了半天为啥z test失败了)
解析文件时有5张纹理, 而texture unit竟然有12个, 也就是说有些纹理在多次DP中用到了
冒似纹理的寻址方式也要设置, 暴雪真是的, 有用的技术全给用上了-_-
看来在解析骨骼动画之前还有一大堆的绘制问题要解决
technique Static < string Mask = "Static"; > { pass p0 { VertexShader = compile vs_3_0 VertexShaderFunc(); PixelShader = compile ps_3_0 PixelShaderFunc(); } } //------------------------------------------------------------------------------ technique SingleSided < string Mask = "SingleSided"; > { pass p0 { CullMode = CCW; } } //------------------------------------------------------------------------------ technique TwoSided < string Mask = "TwoSided"; > { pass p0 { CullMode = None; } } //------------------------------------------------------------------------------ technique Opaque < string Mask = "Opaque"; > { pass p0 { AlphaTestEnable = False; AlphaBlendEnable = False; ZWriteEnable = True; } } //------------------------------------------------------------------------------ technique Transparent < string Mask = "Transparent"; > { pass p0 { AlphaTestEnable = True; AlphaRef = 1; AlphaFunc = GreaterEqual; } } //------------------------------------------------------------------------------ technique Alpha < string Mask = "Alpha"; > { pass p0 { AlphaBlendEnable = True; SrcBlend = SrcAlpha; DestBlend = InvSrcAlpha; ZWriteEnable = False; } } //------------------------------------------------------------------------------ technique AddColor < string Mask = "AddColor"; > { pass p0 { AlphaBlendEnable = True; SrcBlend = SrcColor; DestBlend = One; ZWriteEnable = False; } } //------------------------------------------------------------------------------ technique AddAlpha < string Mask = "AddAlpha"; > { pass p0 { AlphaBlendEnable = True; SrcBlend = SrcAlpha; DestBlend = One; ZWriteEnable = False; } } //------------------------------------------------------------------------------ technique Modulate < string Mask = "Modulate"; > { pass p0 { AlphaBlendEnable = True; SrcBlend = DestColor; DestBlend = SrcColor; ZWriteEnable = False; } } //------------------------------------------------------------------------------ technique ModulateX2 < string Mask = "ModulateX2"; > { pass p0 { AlphaBlendEnable = True; SrcBlend = DestColor; DestBlend = SrcColor; ZWriteEnable = False; } }
纹理寻址还没去管它-_-. 用的时候可以用这些pass来设置渲染状态啦
还差个球形环境映射, mesh基本上就搞定了