例如,光源来自1,3,-5,物体位于4,-2,-1。
代数公式将给出答案为 3。 [1,3-5].[4,-2,-1] = 1*4 + 3*-2 + -5*-1 = 3
但是这3是什么意思?我如何知道我的对象是否用这个数字 3 着色?还是还有更多?我环顾四周,找不到任何结论。如果有人能给出一些见解,那就太好了。谢谢。
从答案来看,思考我是否理解错误。我试图解决以下问题:
对于凸面上的点,法线 n=(n1,n2,n3) 和光 方向 l = (L1,L2,L3),确定该点是否可以被光看到 源。
在两点之间使用点积是没有意义的。本质上,点积可以衡量两个向量的相似程度。当应用于点时,该值将与方向与点与原点的相似性以及它们与原点的距离相关。这个指标没有多大意义,正如你在"3"中发现的那样。
要确定光照量,您需要在从表面到光源的方向的归一化矢量与表面法线之间使用点积。结果将是一个介于 -1 到 1 之间的值,您可以将其解释为简单 gouraud 着色的照明因子。在伪代码中:
illumination = max(0, dot(normalize(lightPosition - positionOnSurface), surfaceNormal))
确定光线是否照射到物体是一个完全不同的问题,称为遮挡,而不是你用数学公式来表达的东西。这是关于测试从光线到目标物体的路径中有哪些物体。
点积可以告诉您点在直线的哪一侧。三角形由三条线组成。如果你在所有三条线的同一侧,那么你就在三角形内。您可以使用三个点积来测试三个边中的每一个。请参阅此链接 http://comp575.web.unc.edu/files/2010/09/06raytracing1.pdf 上的幻灯片 23。