zoukankan      html  css  js  c++  java
  • 【OpenGL】如何绘制Shadow

    背景

      Shadow即阴影,它是光线被不透明物体遮挡而产生的黑暗区域,与光源的方向相反。

      在Blender中编辑过程中没有Shadow,只有在经过渲染后才能显示。目前有一个基于Blender的项目,要求在编辑过程中就要显示Shadow。

    Shadow算法

      Shadow流行算法是shadow mapping和shadow volumn。

      因为物体和光源之间存在遮挡物,所以物体才会处在阴影中,这是shadow mapping的基本原理。无论视点如何变化,只要光源和物体相互位置不变,Shadow map就可以重复使用。具体步骤如下:

    1. 在光源坐标下对整个场景进行渲染,得到所有物体相对于光源的Depth map,这幅图每个像素值代表场景里离光源最近像素的深度值
    2. 恢复到正常位置渲染整个场景,对每个像素计算它到光源的距离,然后将这个值和Depth map相应的值进行比较,以确定这个像素点是否在阴影中。
    3. 对Shadowed fragment和Lighted fragment分别进行不同的光照计算,这样就可以得到阴影效果了。

      shadow volume基本原理是根据光源和遮挡物的位置关系计算出场景中会产生的阴影区域,然后对所有所有物体进行检测,确定其是否受阴影的影响。

      由于基于Blender的项目是一种静态场景,而且Shadow mapping相对比较简单,因此使用Shadow mapping算法即可。

  • 相关阅读:
    [NOIP2010] 引水入城
    BZOJ 3038 线段树
    [Tyvj 1728]普通平衡树 5种姿势 (彩蛋)
    BZOJ 1588: [HNOI2002]营业额统计
    BZOJ 2141 排队 线段树套替罪羊
    BZOJ 3629 [JLOI2014] 聪明的燕姿 dfs
    P1546 [USACO3.1]最短网络 Agri-Net(洛谷)
    并查集详解+模板
    sync_with_stdio和cin.tie(0); cout.tie(0);
    拓扑排序详解
  • 原文地址:https://www.cnblogs.com/liustdelphi/p/3976982.html
Copyright © 2011-2022 走看看