我想创建一个CurvePath例如
var spline = new THREE.SplineCurve3([
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(1, 0, 0),
new THREE.Vector3(1, 1, 0),
]);
我将使用(javascript psuedocode)
发送粒子和路径var t = 0;
function update(){
t = t + 0.05;
particle.position = spline.getPointAt(t)
}
但是我希望样条曲线不要在形状的边缘处创建软弯曲,因此对于粒子上方的形状,将在点(1, 0, 0)
处以直角转动。
我知道这应该在LineCurve3
或其他内容中实现,但对于除SplineCurve3
以外的所有其他曲线,getPoint()
未实现。
我正在使用THREE r59。
答案 0 :(得分:3)
编辑:THREE.Curve.create()
已被弃用。有关要遵循的新模式,请参阅this answer。
要创建自己的曲线类,THREE.Curve
的子类,以下是要遵循的模式:
MyCurve = THREE.Curve.create(
// define the constructor (args optional)
function( points, s ) {
this.points = points;
this.myProperty = s; // add a property if you want
},
// define the getPoint() function
function( t ) {
return new THREE.Vector3( x, y, z ); // flesh this out
}
);
在您的情况下,您可以复制SplineCurve3
- 您只需要更改getPoint()
功能。为此,您可以替换它:
v.x = THREE.Curve.Utils.interpolate(pt0.x, pt1.x, pt2.x, pt3.x, weight);
v.y = THREE.Curve.Utils.interpolate(pt0.y, pt1.y, pt2.y, pt3.y, weight);
v.z = THREE.Curve.Utils.interpolate(pt0.z, pt1.z, pt2.z, pt3.z, weight);
使用简单的线性插值:
v.copy( pt1 ).lerp( pt2, weight );
three.js r.60