例如,我想创建一个 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()
不是已实现。
我正在使用三个 r59。
最佳答案
编辑: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 );
三.js r.60
关于Three.js SplineCurve3 无圆边,或 LineCurve3 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578249/