平面着色坐标系

时间:2016-06-03 23:09:44

标签: graphics shading

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

考虑三个顶点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,并且漫反射 (红色,绿色,蓝色)的系数是(0.6,0.7,0.8)。没有镜面光贡献 需要考虑..

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

由于

1 个答案:

答案 0 :(得分: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

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

    triangle face

    但在你的情况下,这个点是中心所以正常只是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)|

  5. <强> [注释]

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