提交 538b772a 编写于 作者: M Mr.doob

Merge remote-tracking branch 'bhouston/reflect-ortho-project' into dev

......@@ -520,6 +520,48 @@ THREE.extend( THREE.Vector3.prototype, {
},
projectOnVector: function () {
var v1 = new THREE.Vector3();
return function( vector ) {
v1.copy( vector ).normalize();
var d = this.dot( v1 );
return this.copy( v1 ).multiplyScalar( d );
};
}(),
projectOnPlane: function () {
var v1 = new THREE.Vector3();
return function( planeNormal ) {
v1.copy( this ).projectOnVector( planeNormal );
return this.sub( v1 );
}
}(),
reflect: function () {
var v1 = new THREE.Vector3();
return function ( vector ) {
v1.copy( this ).projectOnVector( vector ).multiplyScalar( 2 );
return this.subVectors( v1, this );
}
}(),
angleTo: function ( v ) {
return Math.acos( this.dot( v ) / this.length() / v.length() );
......
......@@ -239,6 +239,57 @@ test( "setLength", function() {
});
test( "projectOnVector", function() {
var a = new THREE.Vector3( 1, 0, 0 );
var b = new THREE.Vector3();
var normal = new THREE.Vector3( 10, 0, 0 );
ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( 1, 0, 0 ) ), "Passed!" );
a.set( 0, 1, 0 );
ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
a.set( 0, 0, -1 );
ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
a.set( -1, 0, 0 );
ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( -1, 0, 0 ) ), "Passed!" );
});
test( "projectOnPlane", function() {
var a = new THREE.Vector3( 1, 0, 0 );
var b = new THREE.Vector3();
var normal = new THREE.Vector3( 1, 0, 0 );
ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
a.set( 0, 1, 0 );
ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 1, 0 ) ), "Passed!" );
a.set( 0, 0, -1 );
ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 0, -1 ) ), "Passed!" );
a.set( -1, 0, 0 );
ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
});
test( "reflect", function() {
var a = new THREE.Vector3( 1, 0, 0 );
var normal = new THREE.Vector3( 1, 0, 0 );
var b = new THREE.Vector3( 0, 0, 0 );
ok( b.copy( a ).reflect( normal ).equals( new THREE.Vector3( 1, 0, 0 ) ), "Passed!" );
a.set( 1, -1, 0 );
ok( b.copy( a ).reflect( normal ).equals( new THREE.Vector3( 1, 1, 0 ) ), "Passed!" );
a.set( 1, -1, 0 );
normal.set( 0, -1, 0 )
ok( b.copy( a ).reflect( normal ).equals( new THREE.Vector3( -1, -1, 0 ) ), "Passed!" );
});
test( "lerp/clone", function() {
var a = new THREE.Vector3( x, 0, z );
var b = new THREE.Vector3( 0, -y, 0 );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册