游戏开发论坛

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

求助,用GLSL编写Shadow Maps

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2008-1-21 17:26:00 | 显示全部楼层 |阅读模式
  我这几天一直被用GLSL编写Shadow Maps所困扰着。请各位达人帮帮忙,看我问题出在什么地方。
  我的方法和别人的方法也都一样。首先在应用程序里计算出textureMatrix。
     textureMatrix = biasMatrix * lightProjectionMatrix * lightViewMatrix * cameraViewInvertMatrix;

  然后把这个texture matrix传到顶点着色器中计算纹理坐标:
     varying vec4 texCoord;
     ...
     texCoord = texture * gl_ModelViewMatrix * gl_Vertex;
     texCoord = texCoord / texCoord.w //for homogenueous

  最后把计算出来的纹理坐标传到片元着色器中,和深度图进行比较,进行阴影着色。
     varying vec4 texCoord;
     uniform sampler2DShadow shadowMap;
     bool isInShadow()
     {
        float depth = shadow2DProj(shadowMap, texCoord).r;
        if (depth == 1.0)
           return false;
        else
           return true;
     }
  我觉得我的方法都是正确的,包括计算出来的矩阵也都是正确的。但是,绘制的结果却始终不正确。
  谁能告诉我,我到底错在什么地方了。非常感谢~~~~~~~~~~~~

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2008-1-21 20:24:00 | 显示全部楼层

Re:求助,用GLSL编写Shadow Maps

弱弱地问一句,那应该怎么写?

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-1-31 20:54:00 | 显示全部楼层

Re: 求助,用GLSL编写Shadow Maps

你这里判断是否在阴影中有问题啊,你根本没有比较嘛,应该用depth和texCoord.r作比较。
     bool isInShadow()
     {
        float depth = shadow2DProj(shadowMap, texCoord).r;
        if (texCoord.r < depth)
           return false;
        else
           return true;
     } [em21]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 01:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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