2021SC@SDUSC
目录
Field.js(Field)
var Field = Base.extend({}, {
applyTo: function(velocity, position, weight, deltaTime) {}
});
继承Base的定义函数applyTo()的类;
ForceField.js(ForceField)
var ForceField = Field.extend(function() {
return {
force: new Vector3()
};
}, {
applyTo: function(velocity, position, weight, deltaTime) {
if (weight > 0) {
vec3.scaleAndAdd(velocity.array, velocity.array, this.force.array, deltaTime / weight);
}
}
});
定义类型为三维向量的力;
applyTo(...)
参数为粒子的速度、位置、重量以及增量时间;
若粒子有重量, 则根据相应参数修改速度数组。
涉及到ve3里的scaleAndAdd函数:
涉及函数:vec3.scaleAndAdd(...)
vec3.scaleAndAdd = function(out, a, b, scale) {
out[0] = a[0] + (b[0] * scale);
out[1] = a[1] + (b[1] * scale);
out[2] = a[2] + (b[2] * scale);
return out;
};
该函数令当前速度各个方向的值加上相应方向的力与deltaTime/weight的乘积作为新的速度并返回。
本文分析了2021SC@SDUSC的Claygl项目,重点讲解了Field.js和ForceField.js中力场的应用。在ForceField.js中定义了三维力,并在applyTo()函数中,依据粒子的重量、位置、速度和增量时间调整速度,利用vec3.scaleAndAdd()函数更新粒子速度,实现了力的作用效果。
795

被折叠的 条评论
为什么被折叠?



