ソースを参照

fix relative parent transform

Garrett Johnson 5 年 前
コミット
bbcd356662
2 ファイル変更15 行追加12 行削除
  1. 7 8
      example/index.js
  2. 8 4
      src/ThreeTilesRenderer.js

+ 7 - 8
example/index.js

@@ -185,6 +185,13 @@ function animate() {
 	tiles.update();
 	window.tiles = tiles;
 
+	tiles.group.rotation.set( 0, 0, 0 );
+	if ( params.up === '-Z' ) {
+
+		tiles.group.rotation.x = Math.PI / 2;
+
+	}
+
 	// update tiles center
 	if ( tiles.getBounds( box ) ) {
 
@@ -203,14 +210,6 @@ function animate() {
 
 function render() {
 
-	tiles.group.rotation.set( 0, 0, 0 );
-	if ( params.up === '-Z' ) {
-
-		tiles.group.rotation.x = Math.PI / 2;
-
-	}
-
-
 	// render primary view
 	cameraHelper.visible = false;
 	renderer.render( scene, camera );

+ 8 - 4
src/ThreeTilesRenderer.js

@@ -227,6 +227,12 @@ class ThreeTilesRenderer extends TilesRenderer {
 
 		}
 
+		if ( parentTile ) {
+
+			transform.multiply( parentTile.cached.transform );
+
+		}
+
 		let box = null;
 		let boxTransform = null;
 		if ( 'box' in tile.boundingVolume ) {
@@ -429,11 +435,9 @@ class ThreeTilesRenderer extends TilesRenderer {
 
 		const cached = tile.cached;
 		const cameras = this.cameras;
-		const group = this.group;
 
 		// TODO: Use the content bounding volume here?
 		const boundingVolume = tile.boundingVolume;
-		const groupMatrixWorld = group.matrixWorld;
 		const transformMat = cached.transform;
 
 		if ( 'box' in boundingVolume ) {
@@ -443,8 +447,8 @@ class ThreeTilesRenderer extends TilesRenderer {
 
 			// TODO: these can likely be cached? Or the world transform mat can be used
 			// transformMat can be rolled into oobMat
-			tempMat.multiplyMatrices( transformMat, obbMat );
-			tempMat.premultiply( groupMatrixWorld );
+			tempMat.copy( transformMat );
+			tempMat.multiply( obbMat );
 			tempMat.getInverse( tempMat );
 
 			let minError = Infinity;