有人可以指导我到一个链接,然后我可以解决这样的问题,因为这是一个考试问题,我想先尝试一下,然后才能找到解决方案。
考虑三个顶点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)使用脸部中心的平面阴影找到脸部的(红色,绿色,蓝色)强度值。
由于
答案 0 :(得分:1)
BeyelerStudios 评论告诉你需要知道的一切。但我觉得你是这个领域的新秀,所以这里有更多的信息:
<强>定义强>
让我们的三角形面由其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)
。您想获得三角形中心点的像素颜色。
在感兴趣的地方计算normal
要映射任意感兴趣的点,您可以使用重心坐标(因为您在纸上计算它在这种情况下更好)。
但在你的情况下,这个点是中心所以正常只是3个法线的平均值:
n=(n0+n1+n2)/3.0
如果我没记错的话。如果在重心坐标(u,v,w=1-u-v)
中给出了任意点,它将是这样的:
n=u*n0 + v*n1 + w*n2
在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|)
计算颜色
这也很容易:
color = col_face * ( col_dir*cos(ang) + col_amb )
不要忘记处理否定cos(ang)
。行为取决于您的实施。有时使用max(0.0,cos(ang))
其他时间|cos(ang)|
。
<强> [注释] 强>
如果您对渲染引擎如何处理插值感兴趣,请参阅