Math 简单球面照明

Math 简单球面照明,math,3d,geometry,pseudocode,lighting,Math,3d,Geometry,Pseudocode,Lighting,看看下面的球体,我们可以假设它是由排列在球体中的多边形组成的。根据多边形在球体上的位置,每个多边形都有一个“x”轴旋转和一个“y”轴旋转 假设只有一个光源。为了演示光源在指示的x轴和y轴旋转方向将灯光投射到球体上 如果任何多边形接收的光“量”在0-1之间(1为“最亮”点)如何确定任何给定多边形的亮度? 我假设我们取y轴偏移(光源与多边形的距离为多少度,压缩为0-1)和x轴偏移(与以前一样),然后使用平均值来确定亮度,但在我的脑海中想象这会导致“钻石”形的光。也许我的假设是错误的,这是对照明这个

看看下面的球体,我们可以假设它是由排列在球体中的多边形组成的。根据多边形在球体上的位置,每个多边形都有一个“x”轴旋转和一个“y”轴旋转

假设只有一个光源。为了演示光源在指示的x轴和y轴旋转方向将灯光投射到球体上

如果任何多边形接收的光“量”在0-1之间(1为“最亮”点)如何确定任何给定多边形的亮度?

我假设我们取y轴偏移(光源与多边形的距离为多少度,压缩为0-1)和x轴偏移(与以前一样),然后使用平均值来确定亮度,但在我的脑海中想象这会导致“钻石”形的光。也许我的假设是错误的,这是对照明这个球体的正确理解,但如果不是

在这种情况下,确定这些多边形亮度的正确过程是什么

我很抱歉,如果已经有人问过这个问题,我无法找到另一个例子来阐明我所问的问题,特别是用简单的术语。可能我在搜索时没有使用正确的术语,所以这可能是一个足够的答案

提前感谢您的帮助


编辑:在我收到令人困惑的高级数学公式之前,请记住我不是数学专业的学生。对于stackoverflow上的读者来说,一个实用的例子,比如伪代码,将更加有用和相关。再次感谢

我看到的任何光线公式都在法线到表面和光源方向之间使用点积

  • 如果booth向量是单位,则点积将为您提供编号
  • 这也是
    cos(a)
    值,其中a是N-D中向量之间的最短角度
  • 3D示例:
  • 正常:
    n(nx,ny,nz)
  • 光照方向
    d(dx,dy,dz)
  • cos(a)=点(n,d)=(n.d)=(nx*dx+ny*dy+nz*dz)
  • 现在您可以使用
    cos(a)
    直接获取照明信息
cos(a)

  • i=cos(a)
  • if(iPI)a-=2*PI

  • if(啊哈!这太棒了!我需要一段时间来消化一些数学知识,但我认为我应该能够通过它。谢谢。我认为你的答案的广度足以证明它是正确的答案。为了澄清你提出的一些观点:光线“投射”在球体上,光线的方向总是朝向球体的中心,没有光线衰减(只是强度的角度损失),我想这是“全方位的”,就像从远处看太阳一样。最亮的点是朝向“光”的照明“1”最亮,最暗的点实际上是相反的一面。这会简化场景吗?知道这一点我能节省一些处理器开销吗?@1owk3y这是平行光!(远处的太阳就像单向照明的无限平面…)。全向光源是灯,或者不是太远的太阳。顺便说一句,这种着色技术被称为正常着色。如果距离不重要,那么你不需要阻尼…这会加快事情的发展,…也可以是系数为a0,a1的恒星(例如a0=0.2;a1=0.8;用于模拟环境光)平行光意味着你有恒定的方向向量,不需要计算每个像素/顶点的方向向量,@1owk3y顺便说一句,如果你在做我想做的事情,那么看看这里的椭球体上的法线着色+大气散射的一些GLSL魔法的例子。这可能会让你感兴趣