请教OpenGL的4种阴影算法

qq195208507 2007-05-30 09:39:09
谁能给我大致介绍下4种阴影算法哈
...全文
729 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
the_venus 2012-08-28
  • 打赏
  • 举报
回复
还有一种就是平面阴影:
你可以推导一下平面投影的矩阵,并将模型视图矩阵直接乘以它,然后直接绘制物体,那么物体的实际位置就被投影到一个平面上去了,这种方式固有的缺陷就是阴影只能显示在平面上,如果要投影的面不是平面,那么它将会失效,阴影矩阵:
设直接方程为 A*x + B*y + C*z +D *1 =0;则平面可以表示为(A,B,C,D)设光源位置为(P,Q,R,0)(注意光源只能为线光源,不能为点光源,在点光源模式下面,每一个顶点的投影矩阵都是不同的,要得到平面阴影只能采用顶点着色器了,这方面的知识你自己钻研吧,我就不讲了),则投影矩阵(行优先矩阵)为:
|BQ + CR -BP -CP -DP|
1 | - AQ AP + CR -CQ -DQ|
----------------- *
AP + BQ + CR | - AR -BR AP + BQ -DR|
| 0 0 0 AP + BQ +CR|
你也可以自己推导它!
hot_blood2001 2009-02-06
  • 打赏
  • 举报
回复
要是有代码参考就好了
qq195208507 2007-05-30
  • 打赏
  • 举报
回复
大哥 除了shadow map和shadow volume外其余的2种是什么哈
Y___Y 2007-05-30
  • 打赏
  • 举报
回复
前面的一段代码漏贴了

阴影映射—OpenGL实现
典型的深度图生成过程
glEnable (GL_DEPTH_TEST); //启用深度测试
glDepthFunc (GL_LESS);
glEnable (GL_POLYGON_OFFSET_FILL); //启用多边形偏移
glPolygonOffset(1.1f, 4.0f);
glColorMask(0, 0, 0, 0); //禁写颜色缓存
drawScene(); //绘制场景
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &depthMap); //创建深度图纹理对象
glBindTexture(GL_TEXTURE_2D, depthMap ); //绑定深度纹理
glCopyTexImage2D(GL_TEXTURE_2D, 0,GL_DEPTH_COMPONENT, 0, 0, depthMap_sizeX, depthMap_sizeY, 0); //拷贝到纹理
Y___Y 2007-05-30
  • 打赏
  • 举报
回复
阴影映射—OpenGL实现
典型的阴影比较过程
glBindTexture(GL_TEXTURE_2D, depthMap); //绑定深度图纹理
glEnable(GL_TEXTURE_2D);
//启用深度比较
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_COMPARE_MODE_ARB,
GL_COMPARE_R_TO_TEXTURE);
//深度比较函数 (if r<=texture then not in shadow)
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
//深度比较应产生的结果的形式
glTexParameteri(GL_TEXTURE_2D,
GL_DEPTH_TEXTURE_MODE_ARB,
GL_ALPHA);

可参考的文献
[1] Projective Texture Mapping. Cass Everitt. NVIDIA. http://developer.nvidia.com/object/Projective_Texture_ Mapping.html
[2] Fast Shadows and Lighting Effects Using Texture Mapping. Mark Segal. SIGGRAPH 1992.(投影映射的原创论文)
[3] Casting Curved Shadows On Curved Surfaces. Lance Williams. SIGGRAPH 1978.(阴影映射的原创论文).
[4] Rendering antialiased shadows with depth maps. William Reeves . SIGGRAPH 87.(阴影反走样的经典论文)
[5] Shadow Mapping Tutorial. http://www.paulsprojects.net/tutorials/
[6] MSDN. Key word: glTexGen

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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