0

有人可以指导我到一个链接,然后我可以解决这样的问题,因为这是一个考试问题,我想在寻求解决方案之前先尝试一下。

考虑三个顶点A(0,2,-1)、B(1,0,1)和原点O的三角形面,顶点处的法向量为nA=(0,1,0),nB= (1,0,0) 和 nO=(0,0,1),分别。入射光为白色,方向为 L=(1,2,2),强度为 1,背景环境光强度为 0.1,(red,green,blue) 的漫反射系数为 (0.6, 0.7,0.8)。不需要考虑镜面光的贡献。

a) 在面部中心使用平面阴影找到面部的(红、绿、蓝)强度值。

谢谢

4

1 回答 1

1

BeyelerStudios 的评论告诉你需要知道的一切。但我觉得你是该领域的新手,所以这里有更多信息:

  1. 定义

    让三角形面由其 3 个顶点( v0,v1,v2) 和法线( n0,n1,n2) 定义。让光源指向光矢量light。灯光具有环境和定向部分,颜色r,g,b为 ( ) :和。表面的反射率为。您想获得三角形中心点的像素颜色。col_dir=(1.0,1.0,1.0)col_amb=(0.1,0.1,0.1)col_face=(0.6,0.7,0.8)

  2. normal在兴趣点计算

    要映射任意兴趣点,您可以使用重心坐标(当您在纸上计算时,在这种情况下会更好)。

    三角脸

    但在您的情况下,该点位于中心,因此法线只是 3 个法线的平均值:

    n=(n0+n1+n2)/3.0
    

    如果我没记错的话在重心坐标中给出任意点的情况下,(u,v,w=1-u-v)它将是这样的:

    n=u*n0 + v*n1 + w*n2 
    
  3. 计算向量cos(angle)之间normal_light

    这很容易使用点积(虽然两个向量都是大小单位......归一化):

    cos(angle) = (n.x*light.x)+(n.y*light.y)+(n.z*light.z)
    

    如果您的向量未标准化,则需要将结果除以它们的大小。

    cos(angle) = ( (n.x*light.x)+(n.y*light.y)+(n.z*light.z) ) / (|n|*|light|)
    
  4. 计算颜色

    这也很容易:

    color = col_face * ( col_dir*cos(ang) + col_amb )
    

    不要忘记处理负数cos(ang)。行为取决于您的实现。有时用在max(0.0,cos(ang))其他时候|cos(ang)|

[笔记]

如果您对渲染引擎如何处理插值感兴趣,请参阅

于 2016-06-04T09:59:28.420 回答