提交 6e7b6483 编写于 作者: M Mr.doob

Performance optimisations.

上级 9dd57d8c
此差异已折叠。
......@@ -52,8 +52,8 @@
var material = new THREE.MeshNormalMaterial();
var loader = new THREE.JSONLoader();
loader.load( 'obj/Suzanne.js', function ( geometry ) {
var loader = new THREE.BufferGeometryLoader();
loader.load( 'models/json/suzanne.json', function ( geometry ) {
geometry.computeVertexNormals();
......
......@@ -50,8 +50,8 @@
var material = new THREE.MeshNormalMaterial();
var loader = new THREE.JSONLoader();
loader.load( 'obj/Suzanne.js', function ( geometry ) {
var loader = new THREE.BufferGeometryLoader();
loader.load( 'models/json/suzanne.json', function ( geometry ) {
geometry.computeVertexNormals();
......
......@@ -4,7 +4,7 @@
function Layers() {
this.mask = 1;
this.mask = 1 | 0;
}
......@@ -12,25 +12,25 @@ Object.assign( Layers.prototype, {
set: function ( channel ) {
this.mask = 1 << channel;
this.mask = 1 << channel | 0;
},
enable: function ( channel ) {
this.mask |= 1 << channel;
this.mask |= 1 << channel | 0;
},
toggle: function ( channel ) {
this.mask ^= 1 << channel;
this.mask ^= 1 << channel | 0;
},
disable: function ( channel ) {
this.mask &= ~ ( 1 << channel );
this.mask &= ~ ( 1 << channel | 0 );
},
......
......@@ -197,24 +197,28 @@ Object.assign( Quaternion.prototype, {
setFromEuler: function ( euler, update ) {
if ( (euler && euler.isEuler) === false ) {
if ( ( euler && euler.isEuler ) === false ) {
throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );
}
var x = euler._x, y = euler._y, z = euler._z, order = euler.order;
// http://www.mathworks.com/matlabcentral/fileexchange/
// 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
// content/SpinCalc.m
var c1 = Math.cos( euler._x / 2 );
var c2 = Math.cos( euler._y / 2 );
var c3 = Math.cos( euler._z / 2 );
var s1 = Math.sin( euler._x / 2 );
var s2 = Math.sin( euler._y / 2 );
var s3 = Math.sin( euler._z / 2 );
var cos = Math.cos;
var sin = Math.sin;
var c1 = cos( x / 2 );
var c2 = cos( y / 2 );
var c3 = cos( z / 2 );
var order = euler.order;
var s1 = sin( x / 2 );
var s2 = sin( y / 2 );
var s3 = sin( z / 2 );
if ( order === 'XYZ' ) {
......
......@@ -1121,7 +1121,7 @@ function WebGLRenderer( parameters ) {
_localClippingEnabled = this.localClippingEnabled;
_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );
projectObject( scene, camera );
projectObject( scene, camera, _this.sortObjects );
opaqueObjects.length = opaqueObjectsLastIndex + 1;
transparentObjects.length = transparentObjectsLastIndex + 1;
......@@ -1381,11 +1381,11 @@ function WebGLRenderer( parameters ) {
}
function projectObject( object, camera ) {
function projectObject( object, camera, sortObjects ) {
if ( object.visible === false ) return;
if ( ! object.visible ) return;
var visible = ( object.layers.mask & camera.layers.mask ) !== 0;
var visible = object.layers.test( camera.layers );
if ( visible ) {
......@@ -1395,7 +1395,7 @@ function WebGLRenderer( parameters ) {
} else if ( object.isSprite ) {
if ( object.frustumCulled === false || isSpriteViewable( object ) === true ) {
if ( ! object.frustumCulled || isSpriteViewable( object ) ) {
sprites.push( object );
......@@ -1407,10 +1407,9 @@ function WebGLRenderer( parameters ) {
} else if ( object.isImmediateRenderObject ) {
if ( _this.sortObjects === true ) {
if ( sortObjects ) {
_vector3.setFromMatrixPosition( object.matrixWorld );
_vector3.applyMatrix4( _projScreenMatrix );
_vector3.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
}
......@@ -1424,12 +1423,11 @@ function WebGLRenderer( parameters ) {
}
if ( object.frustumCulled === false || isObjectViewable( object ) === true ) {
if ( ! object.frustumCulled || isObjectViewable( object ) ) {
if ( _this.sortObjects === true ) {
if ( sortObjects ) {
_vector3.setFromMatrixPosition( object.matrixWorld );
_vector3.applyMatrix4( _projScreenMatrix );
_vector3.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
}
......@@ -1445,7 +1443,7 @@ function WebGLRenderer( parameters ) {
var group = groups[ i ];
var groupMaterial = material[ group.materialIndex ];
if ( groupMaterial && groupMaterial.visible === true ) {
if ( groupMaterial && groupMaterial.visible ) {
pushRenderItem( object, geometry, groupMaterial, _vector3.z, group );
......@@ -1453,7 +1451,7 @@ function WebGLRenderer( parameters ) {
}
} else if ( material.visible === true ) {
} else if ( material.visible ) {
pushRenderItem( object, geometry, material, _vector3.z, null );
......@@ -1469,7 +1467,7 @@ function WebGLRenderer( parameters ) {
for ( var i = 0, l = children.length; i < l; i ++ ) {
projectObject( children[ i ], camera );
projectObject( children[ i ], camera, sortObjects );
}
......
......@@ -388,7 +388,7 @@ function WebGLShadowMap( _renderer, _lights, _objects, capabilities ) {
if ( object.visible === false ) return;
var visible = ( object.layers.mask & camera.layers.mask ) !== 0;
var visible = object.layers.test( camera.layers );
if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册