Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

248
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda