| Server IP : 210.245.233.93 / Your IP : 216.73.216.226 Web Server : Apache/2.2.15 (CentOS) System : Linux webserver2.onesolution.com.hk 2.6.32-754.35.1.el6.x86_64 #1 SMP Sat Nov 7 12:42:14 UTC 2020 x86_64 User : apache ( 48) PHP Version : 5.3.3 Disable Function : exec, shell_exec, system, passthru, popen, proc_open, pcntl_exec MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/hkosl.com/3dweb/src/objects/ |
Upload File : |
/**
* @author mrdoob / http://mrdoob.com/
*/
import { BufferAttribute } from '../core/BufferAttribute.js';
import { Mesh } from './Mesh.js';
import { Matrix4 } from '../math/Matrix4.js';
var _instanceLocalMatrix = new Matrix4();
var _instanceWorldMatrix = new Matrix4();
var _instanceIntersects = [];
var _mesh = new Mesh();
function InstancedMesh( geometry, material, count ) {
Mesh.call( this, geometry, material );
this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );
this.count = count;
this.frustumCulled = false;
}
InstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {
constructor: InstancedMesh,
isInstancedMesh: true,
getMatrixAt: function ( index, matrix ) {
matrix.fromArray( this.instanceMatrix.array, index * 16 );
},
raycast: function ( raycaster, intersects ) {
var matrixWorld = this.matrixWorld;
var raycastTimes = this.count;
_mesh.geometry = this.geometry;
_mesh.material = this.material;
if ( _mesh.material === undefined ) return;
for ( var instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {
// calculate the world matrix for each instance
this.getMatrixAt( instanceId, _instanceLocalMatrix );
_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );
// the mesh represents this single instance
_mesh.matrixWorld = _instanceWorldMatrix;
_mesh.raycast( raycaster, _instanceIntersects );
// process the result of raycast
for ( var i = 0, l = _instanceIntersects.length; i < l; i ++ ) {
var intersect = _instanceIntersects[ i ];
intersect.instanceId = instanceId;
intersect.object = this;
intersects.push( intersect );
}
_instanceIntersects.length = 0;
}
},
setMatrixAt: function ( index, matrix ) {
matrix.toArray( this.instanceMatrix.array, index * 16 );
},
updateMorphTargets: function () {
}
} );
export { InstancedMesh };