如何设置 ShadowVolume 的模板和颜色融和

ljb1672 2011-05-02 10:46:10

//------------------------------------------------------------------------------
// technique:胶囊体
//------------------------------------------------------------------------------
technique DefaultTech
{

pass P0
{
CullMode = CCW;
// 颜色融合方式
AlphaBlendEnable = true;
BlendOp = Add;
SrcBlend = SrcColor;//One;
DestBlend = InvSrcColor;//Zero;//One;
// Z 缓冲区设置
//ZWriteEnable = false;
//ZFunc = Less;
// 模板缓冲区设置:设置通过比较,参考值为0,总是通过比较,通过后缓冲区 -1
StencilEnable = true;
StencilRef = 0;
//StencilMask = 0xFFFFFFFF;
//StencilWriteMask = 0xFFFFFFFF;
StencilFunc = Equal;
//StencilZFail = Decr;
StencilPass = Decr;
//
VertexShader = compile vs_2_0 RenderSceneVS( );
PixelShader = compile ps_2_0 RenderScenePS( );
}

pass P1
{
CullMode = CW;
// 总是通过比较,通过后缓冲区 +1,部分原来为 0xff的会为 0x0
StencilEnable = true;
StencilFunc = Always;
StencilPass = Incr;//Decr;
//StencilZFail = Incr;//Decr;
//StencilWriteMask = 0x0f;
//StencilMask = 0x0f;
VertexShader = compile vs_2_0 RenderSceneVS( );
PixelShader = compile ps_2_0 RenderScenePS( );
}
pass P2
{
FillMode = WireFrame;
VertexShader = compile vs_2_0 RenderSceneVS( );
PixelShader = compile ps_2_0 RenderScenePS_Line( );
}
}


//------------------------------------------------------------------------------
// technique:地面
//------------------------------------------------------------------------------
technique DefaultTech
{
pass P0
{
CullMode = CCW;
//
/*
ZEnable = true;
ZWriteEnable = true;
ZFunc = LessEqual;
*/
StencilEnable = true;

//
/*
AlphaBlendEnable = true;
BlendOp = Add;
SrcBlend = SrcColor;
DestBlend = InvSrcColor;//DestColor;
*/
//
StencilRef = 0x0;
StencilFunc = Equal;//Greater;
//StencilPass = Keep;
//
VertexShader = compile vs_2_0 RenderSceneVS( );
PixelShader = compile ps_2_0 RenderScenePS( );
}
}
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxy1492 2011-05-10
  • 打赏
  • 举报
回复
我记得用multi pass的方法可以实现阴影部分也有颜色的效果,
不知道是否是楼主要的:
1. 第一遍 画整个场景,光源只开启ambient
2. 然后就是正常的shadow volume, 但只开启光源的diffuse和specular,用shadow volume算法来画场景,阴影部分kill掉(还是ambient分量的值),非阴影区域就加了diffuse和specular显得更亮一些。

ljb1672 2011-05-08
  • 打赏
  • 举报
回复
我没有说清楚。主要是ShadowVolume中使用模板缓冲区和颜色融合的问题。
就是使用模板缓冲区找出阴影部分,使用颜色融合来将此部分颜色强度降低,表现成阴影。
zxy1492 2011-05-05
  • 打赏
  • 举报
回复
能否多给点解释?啥叫“让模板和颜色融合”?

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧