|
@@ -45,6 +45,7 @@
|
|
|
|
|
|
<script src="js/controls/FirstPersonControls.js"></script>
|
|
<script src="js/controls/FirstPersonControls.js"></script>
|
|
|
|
|
|
|
|
+ <script src="js/BufferGeometryUtils.js"></script>
|
|
<script src="js/ImprovedNoise.js"></script>
|
|
<script src="js/ImprovedNoise.js"></script>
|
|
<script src="js/Detector.js"></script>
|
|
<script src="js/Detector.js"></script>
|
|
<script src="js/libs/stats.min.js"></script>
|
|
<script src="js/libs/stats.min.js"></script>
|
|
@@ -124,13 +125,7 @@
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
- // BufferGeometry cannot be merged yet.
|
|
|
|
- var tmpGeometry = new THREE.Geometry();
|
|
|
|
- var pxTmpGeometry = new THREE.Geometry().fromBufferGeometry( pxGeometry );
|
|
|
|
- var nxTmpGeometry = new THREE.Geometry().fromBufferGeometry( nxGeometry );
|
|
|
|
- var pyTmpGeometry = new THREE.Geometry().fromBufferGeometry( pyGeometry );
|
|
|
|
- var pzTmpGeometry = new THREE.Geometry().fromBufferGeometry( pzGeometry );
|
|
|
|
- var nzTmpGeometry = new THREE.Geometry().fromBufferGeometry( nzGeometry );
|
|
|
|
|
|
+ var geometries = [];
|
|
|
|
|
|
for ( var z = 0; z < worldDepth; z ++ ) {
|
|
for ( var z = 0; z < worldDepth; z ++ ) {
|
|
|
|
|
|
@@ -149,29 +144,29 @@
|
|
var pz = getY( x, z + 1 );
|
|
var pz = getY( x, z + 1 );
|
|
var nz = getY( x, z - 1 );
|
|
var nz = getY( x, z - 1 );
|
|
|
|
|
|
- tmpGeometry.merge( pyTmpGeometry, matrix );
|
|
|
|
|
|
+ geometries.push( pyGeometry.clone().applyMatrix( matrix ) );
|
|
|
|
|
|
if ( ( px !== h && px !== h + 1 ) || x === 0 ) {
|
|
if ( ( px !== h && px !== h + 1 ) || x === 0 ) {
|
|
|
|
|
|
- tmpGeometry.merge( pxTmpGeometry, matrix );
|
|
|
|
|
|
+ geometries.push( pxGeometry.clone().applyMatrix( matrix ) );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if ( ( nx !== h && nx !== h + 1 ) || x === worldWidth - 1 ) {
|
|
if ( ( nx !== h && nx !== h + 1 ) || x === worldWidth - 1 ) {
|
|
|
|
|
|
- tmpGeometry.merge( nxTmpGeometry, matrix );
|
|
|
|
|
|
+ geometries.push( nxGeometry.clone().applyMatrix( matrix ) );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if ( ( pz !== h && pz !== h + 1 ) || z === worldDepth - 1 ) {
|
|
if ( ( pz !== h && pz !== h + 1 ) || z === worldDepth - 1 ) {
|
|
|
|
|
|
- tmpGeometry.merge( pzTmpGeometry, matrix );
|
|
|
|
|
|
+ geometries.push( pzGeometry.clone().applyMatrix( matrix ) );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if ( ( nz !== h && nz !== h + 1 ) || z === 0 ) {
|
|
if ( ( nz !== h && nz !== h + 1 ) || z === 0 ) {
|
|
|
|
|
|
- tmpGeometry.merge( nzTmpGeometry, matrix );
|
|
|
|
|
|
+ geometries.push( nzGeometry.clone().applyMatrix( matrix ) );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -179,12 +174,11 @@
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- var geometry = new THREE.BufferGeometry().fromGeometry( tmpGeometry );
|
|
|
|
|
|
+ var geometry = THREE.BufferGeometryUtils.mergeBufferGeometries( geometries );
|
|
geometry.computeBoundingSphere();
|
|
geometry.computeBoundingSphere();
|
|
|
|
|
|
var texture = new THREE.TextureLoader().load( 'textures/minecraft/atlas.png' );
|
|
var texture = new THREE.TextureLoader().load( 'textures/minecraft/atlas.png' );
|
|
texture.magFilter = THREE.NearestFilter;
|
|
texture.magFilter = THREE.NearestFilter;
|
|
- texture.minFilter = THREE.LinearMipMapLinearFilter;
|
|
|
|
|
|
|
|
var mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { map: texture } ) );
|
|
var mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { map: texture } ) );
|
|
scene.add( mesh );
|
|
scene.add( mesh );
|
|
@@ -196,7 +190,7 @@
|
|
directionalLight.position.set( 1, 1, 0.5 ).normalize();
|
|
directionalLight.position.set( 1, 1, 0.5 ).normalize();
|
|
scene.add( directionalLight );
|
|
scene.add( directionalLight );
|
|
|
|
|
|
- renderer = new THREE.WebGLRenderer();
|
|
|
|
|
|
+ renderer = new THREE.WebGLRenderer( { antialias: true } );
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
|