Nested Object3d to World coordinates

Size
4,298 Kb
Views
38,456

How do I make an nested object3d to world coordinates?

Example showing multi nested objects translating to global coordinates. Matrix transform calculates global position through nested rotation, but will not give global rotation value. syntax is objectParent.localToWorld(object.position.clone());. What is a nested object3d to world coordinates? How do you make a nested object3d to world coordinates? This script and codes were developed by Scott Niejadlik on 07 September 2022, Wednesday.

Nested Object3d to World coordinates Previews

Nested Object3d to World coordinates - Script Codes HTML Codes

<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Nested Object3d to World coordinates</title> <link rel="stylesheet" href="css/style.css">
</head>
<body> <script id="vertexShader" type="x-shader/x-vertex">	uniform vec3 viewVector;	uniform float c;	uniform float p;	varying float intensity;	void main()	{ vec3 vNormal = normalize( normalMatrix * normal );	vec3 vNormel = normalize( normalMatrix * viewVector );	intensity = pow( abs(c - dot(vNormal, vNormel)), p ); gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );	}	</script>	<!-- fragment shader a.k.a. pixel shader -->	<script id="fragmentShader" type="x-shader/x-vertex">	uniform vec3 glowColor;	varying float intensity;	void main()	{	vec3 glow = glowColor * intensity; gl_FragColor = vec4( glow, 1.0 );	}	</script> <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/three.js/r68/three.min.js'></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/gsap/1.12.1/TweenMax.min.js'></script>
<script src='https://mrdoob.github.com/three.js/examples/fonts/helvetiker_regular.typeface.js'></script> <script src="js/index.js"></script>
</body>
</html>

Nested Object3d to World coordinates - Script Codes CSS Codes

 body { background-color:#000000;
}

Nested Object3d to World coordinates - Script Codes JS Codes

Spheres = {};
var local = Spheres;
local.wHalfX = window.innerWidth / 2;
local.wHalfY = window.innerHeight / 2;
local.rangeFact = 1;
local.mouseX = 0;
local.mouseY = 0;
local.objects = [];
local.markers = [];
local.cameraZoom = 0;
local.glowNodeMat;
local.init = function()
{ new Date().getTime(); local.container = document.createElement( 'div' ); document.body.appendChild( local.container ); local.camera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 2, 6000 ); local.cameraZoom = 2000; local.camera.position.z = local.cameraZoom; local.scene = new THREE.Scene(); local.ambLight = new THREE.PointLight( 0xffffff,0.2);//new THREE.AmbientLight( 0x242424 ); // soft white light local.light = new THREE.PointLight( 0xffffff,0.4); local.light.position.set( 200.0001, 10.0001, 210.5001 ); local.cameraTarget = new THREE.Object3D(); local.cameraTarget.position.set(0,0,0); local.scene.add(local.cameraTarget); local.scene.add(local.ambLight); local.scene.add( local.light ); local.renderer = new THREE.WebGLRenderer( { clearAlpha: 1,antialias:true, alpha: true} ); local.renderer.setSize( window.innerWidth, window.innerHeight ); local.renderer.autoClear = false; local.container.appendChild( local.renderer.domElement ); local.glows = []; var i = 0; var limit = 55; var prevCube; local.glowNodeMat = new THREE.ShaderMaterial(	{ uniforms:	{	"c": { type: "f", value: 0 },	"p": { type: "f", value: 1.5 },	glowColor: { type: "c", value: new THREE.Color(0xaaccff) },	viewVector: { type: "v3", value: local.camera.position }	},	vertexShader: document.getElementById( 'vertexShader' ).textContent,	fragmentShader: document.getElementById( 'fragmentShader' ).textContent,	side: THREE.FrontSide,	blending: THREE.AdditiveBlending,	transparent: true	}); var marker = new THREE.Mesh(new THREE.BoxGeometry(2,20,2),new THREE.MeshBasicMaterial({wireframe:true})); marker.position.set(300,-50,0); local.scene.add(marker); var marker2 = new THREE.Mesh(new THREE.BoxGeometry(2,20,2),new THREE.MeshBasicMaterial({wireframe:true})); marker2.position.set(0,-50,0); local.scene.add(marker2); for (i=0;i<limit;++i) { var bGeom = new THREE.IcosahedronGeometry(20,2);//new THREE.BoxGeometry(20,20,20); var cube = new THREE.Mesh(bGeom,new THREE.MeshBasicMaterial({color:'#ff0000',wireframe:false})); cube.position.set(Math.random()*300-150,35,Math.random()*300-150); //cube.rotation.set(0,0,Math.random()*30); local.objects.push(cube); var container = prevCube; if (container != undefined) { container.add(cube); } else { container = local.scene; container.add(cube); } cube.updateMatrixWorld(); var glow = new THREE.Mesh( bGeom.clone(), local.glowNodeMat.clone() ); //TweenMax.to(glow.material.uniforms["c"],6,{value:0,repeat:-1,yoyo:true}); //TweenMax.to(glow.material.uniforms["p"],6,{value:0,repeat:-1,yoyo:true}); glow.rndVector = new THREE.Vector3(Math.random()*100-50,Math.random()*100-50,Math.random()*100-50); TweenMax.to(glow.rndVector,Math.random()+0.3,{x:Math.random()*100-50,repeat:-1,yoyo:true}); TweenMax.to(glow.rndVector,Math.random()+0.3,{y:Math.random()*100-50,repeat:-1,yoyo:true}); TweenMax.to(glow.rndVector,Math.random()+0.3,{z:Math.random()*100-50,repeat:-1,yoyo:true}); local.glows.push(glow); cube.add( glow ); //glow.updateMatrixWorld(); glow.scale.multiplyScalar(2.6); prevCube = cube; } var lineGeom = new THREE.Geometry(); for (i=0;i<limit;++i) { var cube = local.objects[i]; //cube.rotation.set(0,0,Math.random()*0.2) cube.updateMatrixWorld(); //var label = new THREE.Mesh(new THREE.TextGeometry(" "+i+" | "+cube.parent.localToWorld(cube.position.clone()).x, {size:15, height:1, font: 'helvetiker'}),new THREE.MeshBasicMaterial());//'test',{ face: "optimer", weight: "normal", style: "normal"}),new THREE.MeshBasicMaterial()); //cube.add(label); //TweenMax.to(cube.rotation,4,{z:Math.random()*18,delay:i/10}) //lineGeom.vertices.push(cube.position); lineGeom.vertices.push(cube.parent.localToWorld(cube.position.clone())); }
var lineMat = new THREE.LineBasicMaterial({color:'#992222'});
var line = new THREE.Line(lineGeom,lineMat);
local.scene.add(line); local.update(); $(document).on('mousemove', local.onDocumentMouseMove); $(document).on('mousewheel', local.onDocumentMouseWheel); $(window).on('resize', local.onWindowResize);
};
local.positionCamera = function()
{ if (local.counter >= 400 || local.counter === undefined) { local.rndSystem = Math.floor(Math.random()*local.objects.length); target = local.objects[local.rndSystem]; local.counter = 0; } local.camera.lookAt(local.cameraTarget.position);// ); local.counter++;
}
local.update = function() { var i=0; var limit=local.glows.length; for(i=0;i<limit;++i) { //console.log(_glows[i]) //local.glows[i].updateMatrixWorld(); var cubeGlow = local.glows[i]; //cubeGlow.geometry.normalsNeedUpdate(); cubeGlow.material.needsUpdate = true; //var cameraLocalVect = new THREE.Vector3(local.glows[i].parent.parent.worldToLocal(local.camera.position.clone())); local.glows[i].material.uniforms.viewVector.value = new THREE.Vector3().subVectors( cubeGlow.rndVector, local.glows[i].position.clone()); } local.render();
}
/* Render call to redraw three js scene
*/
local.render = function() { var time = Date.now() * 0.00005; //local.camera.position.x += ( local.mouseX - local.camera.position.x ) * 0.05; //local.camera.position.y += ( -local.mouseY - local.camera.position.y ) * 0.05; local.positionCamera(); local.renderer.render( local.scene, local.camera ); local.renderer.clear(false,true,false); //local.renderer.render(scene2,camera);*/
};
///////////////// Page INITIALIZATION //////////////////
local.onDocumentMouseWheel = function(evt)
{ var d = evt.originalEvent.wheelDelta; local.cameraZoom -= d; TweenMax.to(local.camera.position,.2,{z:local.cameraZoom});
};
local.onDocumentMouseMove = function( evt ) { local.mouseX = (evt.clientX - local.wHalfX)*0.75; local.mouseY = (evt.clientY - local.wHalfY)*0.75; local.camera.position.x += local.mouseX/50; local.camera.position.y += -local.mouseY/100; local.cameraTarget.position.x += local.mouseX/100; local.cameraTarget.position.y += -local.mouseY/100; var i=0; var limit = local.objects.length; for (i=0;i<limit;++i) { }
};
local.onWindowResize = function(event) { local.wHalfX = window.innerWidth / 2; local.wHalfY = window.innerHeight / 2; local.camera.aspect = window.innerWidth / window.innerHeight; local.camera.updateProjectionMatrix(); local.renderer.setSize( window.innerWidth, window.innerHeight ); //local.render();
};
local.animate = function()
{ requestAnimationFrame( local.animate ); local.update();
};
$( document ).ready(function() { local.init(); local.animate();
});
Nested Object3d to World coordinates - Script Codes
Nested Object3d to World coordinates - Script Codes
Home Page Home
Developer Scott Niejadlik
Username sniejadlik
Uploaded September 07, 2022
Rating 3
Size 4,298 Kb
Views 38,456
Do you need developer help for Nested Object3d to World coordinates?

Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!

Scott Niejadlik (sniejadlik) Script Codes
Create amazing video scripts with AI!

Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!