前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >挑战蓝龙Kalecgos

挑战蓝龙Kalecgos

作者头像
逍遥剑客
发布2018-05-23 15:02:36
4170
发布2018-05-23 15:02:36
举报

上次画的刀因为是装备, 所以有多种颜色的纹理

而多种颜色的纹理都要去查表...

虽说DBC文件很简单, 但现在懒得看

找个单一纹理的弄吧, 纹理名全存在M2文件里的

随便看了看, 觉得这头蓝龙挺帅的, 就它了

这次除了Mesh正好可以研究下Animation

目标:

  • 2009/3/15: 模型+纹理绘制

没有进行渲染状态的管理, 比如alpha test/blend切换, envMap切换, cull切换等等. 这样是不是要写一堆shader来设置State?

牙和爪子部分第二层贴图把原来的颜色覆盖了, 可能是因为应该用envMap的原因吧

其它部分现在统一用的alpha blend, 这样会出现遮挡问题, 需要进行排序. 想想应该能用alpha test代替.

(因为没走N3的渲染流程, 发现它默认是不创建DepthBuffer的, 囧......害我查了半天为啥z test失败了)

解析文件时有5张纹理, 而texture unit竟然有12个, 也就是说有些纹理在多次DP中用到了

冒似纹理的寻址方式也要设置, 暴雪真是的, 有用的技术全给用上了-_-

看来在解析骨骼动画之前还有一大堆的绘制问题要解决

  • 2009/3/22: 为了切换渲染状态写了一堆ShaderVariation(technique):
代码语言:javascript
复制
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来设置渲染状态啦

  • 2009/3/29: 解决了渲染状态的切换, 按pass进行了排序. 这样就修正了透明/遮挡/剔除错误.

还差个球形环境映射, mesh基本上就搞定了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009年03月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档