zoukankan      html  css  js  c++  java
  • 6 矩形光源

      首先,让我们制作一个发光的材料。我们需要一个发光函数(我们也可以把它加到hit_record里,这取决于你的设计品位).就像背景,它只告诉光线它是什么颜色,它不反射。这很简单:

        

      这样我就不必让所有非发射材料实现emit(),然后我的基类返回黑色:

        

      接下来,我们将颜色函数中的背景设为黑色,并注意emmit:

        

      现在,我们做一些矩形。矩形通常可以方便地建模人造环境。我很喜欢做等腰矩形,因为它们很简单。(我们会讲到实例化之后再旋转它们).

      首先,这里有一个xy平面的矩形。这样一个平面由它的z值定义。例如,z = k。一个轴向的矩形由x=x0、x=x1、y=y0、y=y1几行定义。

        

      要确定一条光线是否击中这个矩形,我们得先确认光线击中这个平面的位置,回想一下,光线p (t) = a + t*b的z分量由z(t) = az + t*bz定义。重新排列这些项我们可以解出z=k时的t。

      t = (k-az) / bz

      一旦我们有了t,我们就可以把它代入x和y的方程:

      x = ax + t*bx
      y = ay + t*by

      如果x0 < x < x1,而y0 < y < y1,则是命中的。

      矩形方程如下:

        

      撞击函数如下:

        

      如果我们设置一个矩形光源:

        

      我们可以得到下图:

              

            注意光线比(1,1,1)亮。这使得它足够亮,可以照亮物体。

            也可以做一些球形灯。

        

  • 相关阅读:
    Djnago中缓存配置(redis配置案例)
    HDU-4717 The Moving Points 三分
    HDU-4716 A Computer Graphics Problem 水题
    HDU-2686 Matrix 多进程DP
    [转]手动开平方的简易方法
    [转]树链剖分
    HUOJ-10857 最大的面积 凸包+DP
    Bnuoj-29359 Deal with numbers 线段树
    HDU-4283 You Are the One 区间DP
    BNUOJ-26586 Simon the Spider 最小生成树+枚举
  • 原文地址:https://www.cnblogs.com/TooYoungTsukasa/p/9353727.html
Copyright © 2011-2022 走看看