游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2496|回复: 2

ogre 自定义阴影问题

[复制链接]

9

主题

132

帖子

145

积分

注册会员

Rank: 2

积分
145
QQ
发表于 2010-8-10 17:16:00 | 显示全部楼层 |阅读模式
   开门见山.

   caster shader
   {
            vp
            {
                  Out.position = mul(matWVP, In.position);
                  Out.depth.xy = Out.position.zw;
            }

            fp
            {
                  Out.color = In.depth.x / In.depth.y;
            }
   }

   receiver shader
   {
            vp
            {
                 vec4 pos = mul(matWorld, In.position);
                 vec4 ShadowUV = mul(matShadow, pos);
   
                 Out.position = mul(matWVP, In.position);
                 Out.ShadowUV = ShadowUV;
            }

            fp
            {
                 vec2 texcoord = In.ShadowUV.xy / In.ShadowUV.w;
                 float depth = tex2D(ShadowMap, texcoord);
                 Out.color = pow(final, 0.01f);
            }
   }

   我测试了下, 我在receiver做了pow 0.01f, 理论上ShadowMap里存的是深度值的话,
   阴影从近到远应该是从黑到白过度的, 但是阴影都是黑色的, 这说明ShadowMap里存的是黑色,
   请问下大家我应该怎么做才对.

9

主题

132

帖子

145

积分

注册会员

Rank: 2

积分
145
QQ
 楼主| 发表于 2010-8-11 16:28:00 | 显示全部楼层

Re: ogre 自定义阴影问题

应该是Ogre正交投影问题。
      看下源代码:
                    // NB: This creates 'uniform' orthographic projection matrix,
                    // which depth range [-1,1], right-handed rules
                    //
                    // [ A   0   0   C  ]
                    // [ 0   B   0   D  ]
                    // [ 0   0   q   qn ]
                    // [ 0   0   0   1  ]
                    //
                    // A = 2 * / (right - left)
                    // B = 2 * / (top - bottom)
                    // C = - (right + left) / (right - left)
                    // D = - (top + bottom) / (top - bottom)
                    // q = - 2 / (far - near)
                    // qn = - (far + near) / (far - near)

                   x = -2z / (f - n)

                   y = -(f + n) / (f - n)
                        = -(f - n + 2n) / (f - n)
                        = -2n / (f - n) - 1

                   final = x + y = (-2z - 2n) / (f - n) - 1

                   if z = n
                        final = -4n / (f - n) - 1    != -1

                   if z = f
                        final = (-2f - 2n) / (f - n) - 1    != 1

                  q 应该是 2 / (f - n).  
  
                  我看了Ogre 1.7的源码也没改...
                  
                  还有GameRes好冷清, 摸把泪,,,

9

主题

132

帖子

145

积分

注册会员

Rank: 2

积分
145
QQ
 楼主| 发表于 2010-9-7 08:17:00 | 显示全部楼层

Re:ogre 自定义阴影问题

    不知道在debug版本纹理, 在release下就没问题.
    算了, 也不想深究。
    我只是reciever里加了3x3pcf采样. 对于一般的游戏差不多了。不太想做pssm。
    最近也要辞职了, 呵算了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 19:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表