游戏开发论坛

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

请教:关于《OpenGL编程指南》上的shadowmap的程序

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2007-10-15 21:53:00 | 显示全部楼层 |阅读模式
   小弟是个OpenGL新手。最近想做一个shadowmaps的程序。最近一直在看红宝书上的shadowmap的这个例子程序。可是有些地方始终不明白,想请教一下。
   在初始化函数中:
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LESS );
    glTexParameteri( GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE );
   这几行代码的意思到底是什么啊?
   还有就是自动生成纹理坐标那里:
    transposeMatrix( tmpMatrix );
    glTexGenfv( GL_S, GL_OBJECT_PLANE, &tmpMatrix[0] );
    glTexGenfv( GL_T, GL_OBJECT_PLANE, &tmpMatrix[4] );
    glTexGenfv( GL_R, GL_OBJECT_PLANE, &tmpMatrix[8] );
    glTexGenfv( GL_Q, GL_OBJECT_PLANE, &tmpMatrix[12] );
    为什么要这么做,这样做,到底是为了实现什么?
    还有就是片元的深度值是如何进行比较的?
    还有,当我运行红宝书上的shadowmap的这个例子的时候。发现物体朝向光源的方向上,总是有一块黑色的区域。而且,阴影的生成也有一些问题。
    谢谢帮助
    附上源程序,截图和截的视频。

sf_20071015215316.rar

105.41 KB, 下载次数:

0

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2007-10-17 10:36:00 | 显示全部楼层

Re: 请教:关于《OpenGL编程指南》上的shadowmap的程序

因为从光这个位置看,在深度缓存中只有最靠近它的象素深度值,默认设置是glDepthFunc(GL_LESS),这样背面的深度值自然不在其中,再下面这几行代码
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LESS );
    glTexParameteri( GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE );
它将执行从视点所看到的点转换成相对于从光看这点的深度值,如比深度缓存中保存的具有相同S,T坐标的R值大,则说明该点前有阻挡,该点是阴影点,自然物体不面向光的部份也是黑的,显得不真实.

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2007-10-30 13:25:00 | 显示全部楼层

Re:请教:关于《OpenGL编程指南》上的shadowmap的程序

恩!谢谢指点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-19 11:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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