Jump to content

Spherical positions on multiple spheres


ThoSzy

Recommended Posts

Hello, I try to place meshs on sphere depending on their rank in a json file.

I am looking for a way to define the position of my meshs in my loop in order to prevent them to be created on each other.

    function onMouseGauche(event) {

        event = event || window.event;
        if (event.button == 0) {
            mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
            mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;

            // update the picking ray with the camera and mouse position
            raycaster.setFromCamera(mouse, camera);
            // calculate objects intersecting the picking ray

            var intersects = 0;
            intersects = raycaster.intersectObjects(scene.children);

            if (intersects.length > 0) {


                if (intersects[0].object.userData.bool != true) {
                    //                    Scalar = Scalar + 400;
                    Scalar = Scalar / 1;
                    Scale = Scale / 1;
                    console.log(intersects[0].object.userData)

                    if (intersects[0].object.userData.children) {

                        var loop = 0;

                        intersects[0].object.userData.children.forEach(function(element) {

                            var sphereMaterial2 = new THREE.MeshBasicMaterial({
                                color: element.group
                            });

                            var mesh = new THREE.Mesh(sphereGeometry, sphereMaterial2);
                            var phi = ( 2 * Math.PI)
                            var theta = (2 * Math.PI)

                            var x = Math.random() * 2 - 1;
                            var y = Math.random() * 2 - 1;
                            var z = Math.random() * 2 - 1;

//                            if (loop == 0) {
//                                var x = Math.random() * 2 - 1;
//                                var y = Math.cos(theta) * Math.random();
//                                var z = Math.cos(phi) * Math.random()
//                            }
//                            if (loop == 1) {
//                                var x = Math.cos(phi) * Math.random();
//                                var y = Math.random() * 2 - 1;
//                                var z = Math.cos(theta) * Math.random()
//                            }
//                            if (loop == 2) {
//                                var x = Math.tan(phi) * Math.random();
//                                var y = Math.tan(theta) * Math.random();
//                                var z = Math.random() * 2 - 1
//                            }
                            mesh.position.x = x;
                            mesh.position.y = y;
                            mesh.position.z = z;

                            mesh.userData.children = element.children;
                            mesh.userData.name = element.label;
                            mesh.userData.rang = element.rang;

                            mesh.position.normalize();
                            mesh.position.multiplyScalar(Scalar / element.rang);
                            mesh.scale.set(Scale / element.rang, Scale / element.rang, Scale / element.rang)

                            mesh.position.x = mesh.position.x + intersects[0].object.position.x;
                            mesh.position.y = mesh.position.y + intersects[0].object.position.y;
                            mesh.position.z = mesh.position.z + intersects[0].object.position.z;

                            console.log(element)



                            scene.add(mesh);



                            // lines
                            var material = new THREE.LineBasicMaterial({
                                color: 0xffffff
                            });

                            var geometry = new THREE.Geometry();
                            geometry.vertices.push(
                                intersects[0].object.position,
                                mesh.position
                            );

                            var line = new THREE.Line(geometry, material);
                            scene.add(line);

                            intersects[0].object.userData.bool = true;
                            loop = loop + 1
                        });

                    }

                }

            }
        }
        // ajouter position de caméra actuelle
        camera.userData.push([Math.round(camera.position.x), Math.round(camera.position.y), Math.round(camera.position.z)])
    }

 Here is the function that draw the sphere meshs.

How can i define my coordinates more efficiently?

Thank you

Edited by ThoSzy
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...