作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个顶点组成一个三 Angular 形:
var a = [0, 0, 0];
var b = [1, 0, 0];
var c = [1, 1, 0];
还有一盏灯:
var d = [0, 1, 1];
如何计算三 Angular 形是否面向光线,以及多少?
最佳答案
我猜你想计算整个三 Angular 形上的点的强度。从概念上讲,代码可能如下所示:
var vector1 = Vector(c, a); // a vector from a -> c
var vector2 = Vector(b, a); // a vector from a -> c
var normal = cross(vector1, vector2);
// normalize the vector, i.e length of the normal vector is 1
normal = normalize(normal);
var vectorToLightSource = Vector(lightSourceVector, a); // Any point could be taken. The result would vary some.
vectorToLightSource = normalize(vectorToLightSource);
// This will be a value between -1 and 1, but light can't be negative
var intensity = dotProduct(normal, vectorToLightSource);
intensity = intensity > 0 ? intensity : 0;
现在您可以将三 Angular 形的颜色设为 color = lightSourceColor*intensity
。
上面的代码很伪;需要构建cross
、normalize
等函数。为此,我建议使用几何库,或者如果你喜欢线性代数,你可以自己构建它们:)
供引用:
交叉
:https://en.wikipedia.org/wiki/Cross_product
关于javascript - 测量三 Angular 形面对光线的程度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681428/
我正在尝试使用 Sfml 编写 2D 游戏。对于那个游戏,我需要一个 Lightengine 和一些代码,这些代码可以为我提供玩家可见的世界区域。由于这两个问题非常吻合(实际上是相同的),我想同时解决
我是一名优秀的程序员,十分优秀!