zoukankan      html  css  js  c++  java
  • Planar Shadow中Shadow Matrix的推导

    [概述]
    1 由光源方向V和顶点Q可以确定一条射线K。
    2 由法线N和法线上任一已知点P0可以确定平面L。
    3 Q在L上的投影实际上就是K同L的交点P。
    4 最终需要求的是如何通过矩阵变换将Q变换成P。

    [推导]
    首先,平面方程的向量形式是:
    N · (P - P0) = 0;
    N:法线,P0:平面上已知任一点
    若设:D = - N · P0, 则平面方程为:
    N · P + D = 0; (1)

    然后,射线方程是:
    P = Q + tV; (2)
    Q:射线上任一点,V:射线方向

    将(2)式代入(1)式得:
    N · Q + (N · V)t + D = 0;
    t = - (N · Q + D) / (N · V); (3)

    如果将平面方程写成四维形式可以是:L = <N, D>
    点向量Q的四维形式:<Q, 1>
    方向向量V的四维形式:<V, 0>

    则由(3)式得:
    t = - (<N, D> · <Q, 1>) / (<N, D> · <V, 0>);
    t = - (L · Q) / (L · V);

    代入:Q = <Qx, Qy, Qz, 1>, V = <Vx, Vy, Vz, 0>, L = <Nx, Ny, Nz, D>
    设E = L · V = NxVx + NyVy + NzVz;
    将t代入(2)式,得:
    PxE = Qx(NxVx + NyVy + NzVz) - (NxQx + NyQy + NzQz + D) Vx;
    PxE = Qx(NyVy + NzVz) - Qy(NyVx) - Qz(NzVx) - DVx;

    同理得Py, Pz

    最后得到Shadow Matrix

    NyVy + NzVz      -NyVx            -NzVx            -DVx
    -NxVy            NxVx + NzVz      -NzVy            -DVy
    -NxVz            -NyVz            NxVx + NyVy      -DVz
    0                0                0                NxVx + NyVy + NzVz


    效果如下:




    btw:这里有Planar Shadow的详细介绍,作者Hotball还提出了一个利用Stencil Buffer进行改良的方案。
    http://www.csie.ntu.edu.tw/~r89004/hive/shadow/page_1.html

  • 相关阅读:
    html file 表单样式(css过滤器实现)
    网页a标签
    Criteria示例
    数类型转换顺序
    Mysql命令行添加用户
    MySQL中导出用户权限设置的脚本
    mysql 命令行登录详解
    mysql的auto-rehash简介
    UltraEdit中的特殊字符
    ps aux详解(进程状态说明)
  • 原文地址:https://www.cnblogs.com/Pointer/p/27305.html
Copyright © 2011-2022 走看看