浏览代码

Raytracing Workers: attempt to pass json coordinates as well

- kinda works but something is still wrong
Joshua Koo 9 年之前
父节点
当前提交
e20d4c17ad
共有 2 个文件被更改,包括 34 次插入7 次删除
  1. 19 6
      examples/js/renderers/RaytracingWorker.js
  2. 15 1
      examples/js/renderers/RaytracingWorkerRenderer.js

+ 19 - 6
examples/js/renderers/RaytracingWorker.js

@@ -20,8 +20,8 @@ self.onmessage = function(e) {
 		worker = data.worker;
 		workers = data.workers;
 		BLOCK = data.blockSize;
-		eval(data.initScene);
-		initScene(width, height);
+		// eval(data.initScene);
+		// initScene(width, height);
 
 		renderer = new THREE.RaytracingRendererWorker();
 		loader = new THREE.ObjectLoader();
@@ -35,10 +35,15 @@ self.onmessage = function(e) {
 
 	if (data.scene) {
 
-		// console.log('scene!!!', scene, camera)
-		// scene = loader.parse(data.scene);
-		// camera = loader.parse(data.camera);
-
+		scene = loader.parse(data.scene);
+		camera = loader.parse(data.camera);
+		
+		var positions = data.positions;
+		copyPositions(camera, positions);
+		scene.traverse( function(o) {
+			copyPositions( o, positions );
+		} );
+		
 	}
 
 	if (data.render && scene && camera) {
@@ -49,6 +54,14 @@ self.onmessage = function(e) {
 
 }
 
+function copyPositions(object, positions) {
+	var info = positions[object.uuid];
+
+	object.position.fromArray(info.position);
+	object.scale.fromArray(info.scale);
+	object.rotation.fromArray(info.rotation);
+}
+
 /**
  * DOM-less version of Raytracing Renderer
  * @author mrdoob / http://mrdoob.com/

+ 15 - 1
examples/js/renderers/RaytracingWorkerRenderer.js

@@ -135,15 +135,29 @@ THREE.RaytracingWorkerRenderer = function ( parameters ) {
 		context.fillRect( blockX, blockY, blockSize, blockSize );
 	}
 
+	var all = {};
+	function serializeObject( o ) {
+		all[o.uuid] = {
+			position: o.position.toArray(),
+			rotation: o.rotation.toArray(),
+			scale: o.scale.toArray()
+		}
+	}
+
 	this.render = function ( scene, camera ) {
 
 		var sceneJSON = scene.toJSON();
 		var cameraJSON = camera.toJSON();
 
+		scene.traverse( serializeObject );
+		serializeObject( camera );
+
+
 		pool.forEach(function(worker) {
 			worker.postMessage({
 				scene: sceneJSON,
-				camera: cameraJSON
+				camera: cameraJSON,
+				positions: all
 			});
 		});