Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

249
Views
problema de ubicación aleatoria three.js con for-loop

Estoy tratando de hacer una función que aleatorice la ubicación de algunas nubes que importé, pero el problema es que genera la cantidad de nubes, ¡pero en la misma posición! Aleatoricé la posición, pero cuando se ejecuta el código tengo como 10 nubes en la misma posición. ¿Que puedo hacer? este es el codigo:

 loader.load('/clouds/clouds1/scene.gltf', function (clouds1) { var clouds1array = [] function addClouds1(){ for (var i = 1; i < 10; i++) { const clouds1Mesh = clouds1.scene const clouds1Position = clouds1Mesh.position clouds1Position.x = Math.random() * 10 clouds1Position.y = Math.random() * 10 clouds1Position.z = (Math.random() - 0.5 ) * 300 clouds1Mesh.scale.setX(0.05) clouds1Mesh.scale.setY(0.05) clouds1Mesh.scale.setZ(0.05) scene.add(clouds1Mesh) clouds1array.push(clouds1Mesh) } } addClouds1() })

editar: la estructura de clouds1.scene es esta: ingrese la descripción de la imagen aquí

No se porque tiene esta cantidad de hijos, trate de resolver con la respuesta, pero sigue sin funcionar. El tercer hijo al final contiene la malla, y traté de usarla para que funcionara, pero dice que no puedo usarla en la función scene.add()

editar: ¡Resolví el problema! Solo tuve que poner el bucle for fuera de la función de carga

 for(let i = 0; i < 30; i+= 3) loader.load('/clouds/clouds1/scene.gltf', function (clouds1) { const cloud = clouds1.scene const child1 = clouds1.scene.children[0].children[0].children[0].children[2].children[0] child1.material = new THREE.MeshStandardMaterial({ emissive: 'white', emissiveIntensity: 0.5}) cloud.scale.set(0.05, 0.05, 0.05) cloud.position.x = (Math.random() - 0.5) * 500 cloud.position.y = (Math.random() + ((Math.random() + 20 ) + 70)) cloud.position.z = (Math.random() - 1) * 500 cloud.rotation.x = Math.random() cloud.rotation.y = Math.random() cloud.rotation.z = Math.random() scene.add(cloud) })
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Los resultados de GLTFLoader , que tiene como clouds1 , es un objeto genérico, del que extrae correctamente clouds1.scene . Sin embargo, clouds1.scene también es un único objeto de Scene . Si tiene 10 nubes en el modelo GLTF que cargó, entonces clouds1.scene tendrá 10 hijos, y deberá recorrerlos de la siguiente manera:

 loader.load('/clouds/clouds1/scene.gltf', function (clouds1) { var clouds1array = [] const clouds1Children = clouds1.scene.children for (var i = 1; i < 10; i++) { const clouds1Mesh = clouds1Children[i] const clouds1Position = clouds1Mesh.position clouds1Position.x = Math.random() * 10 clouds1Position.y = Math.random() * 10 clouds1Position.z = (Math.random() - 0.5 ) * 300 clouds1Mesh.scale.setX(0.05) clouds1Mesh.scale.setY(0.05) clouds1Mesh.scale.setZ(0.05) scene.add(clouds1Mesh) clouds1array.push(clouds1Mesh) } })
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!