2011-08-02 60 views
9

He descargado un ejemplo de esfera de: http://aerotwist.com/lab/getting-started-with-three-js/ y puedo ver la bonita esfera roja. Me gustaría usar una textura en él. He intentado esto:Cómo uso la textura en una esfera en three.js

var texture = THREE.ImageUtils.loadTexture("ball-texture.jpg"); 
texture.wrapS = texture.wrapT = THREE.ClampToEdgeWrapping; 
texture.repeat.set(125, 125); 
texture.offset.set(15, 15); 
texture.needsUpdate = true; 
var sphereMaterial = new THREE.MeshBasicMaterial({ map: texture }); 
var sphere = new THREE.Mesh(new THREE.Sphere(radius, segments, rings),sphereMaterial); 

pero no puedo ver nada, todo es negro. ¿Alguien tiene un ejemplo de trabajo para la textura de esfera?

+0

Esto es una suposición total, ya que no sé * nada * sobre esto, pero si ha cambiado el material de un color plano a una textura, ¿podría necesitar agregar una fuente de luz? Puede ser que un sombreador de color constante no lo requiera, mientras que un objeto con textura lo haría. – Beska

+0

Tengo una luz – Gavriel

Respuesta

2

¿Estás usando Firefox? Esto podría ser un problema en tu navegador. Firefox usa algún tipo de bloqueador de sitios cruzados para texturas. El resultado es negro en su lugar. Eche un vistazo a este sitio para obtener más información: http://hacks.mozilla.org/2011/06/cross-domain-webgl-textures-disabled-in-firefox-5/

+0

no, estoy en Chrome – Gavriel

+0

Parece que la versión actual de Chrome tiene el mismo "problema". En realidad es un problema de seguridad: http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html – musse1

3

Puede tener dos problemas.

primer lugar, tratar de cargarlo como esto:

var texture = THREE.ImageUtils.loadTexture('ball-texture.jpg', {}, function() { 
    renderer.render(scene, camera); 
}); 

texture.needsUpdate = true; 

Asegúrese de que el tamaño de la textura es una potencia de dos (512x512px para IE).

+0

Posponer el renderizado hasta que la imagen se haya cargado me funcionó - gracias ! – poshaughnessy

+0

@poshaughnessy ¿Cómo eliminaste los espacios vacíos (blancos en blanco) que aparecen cuando se repite la textura? – Faizan

1

¿Tiene un ciclo de representación, o representó la escena solo una vez?

Necesita tener un bucle de representación para que cuando el THREE.ImageUtils cargue la imagen y actualice la textura, vuelva a representar la escena con la textura actualizada.

Todos los ejemplos de three.js parecen basarse en esta técnica. Es decir, ejecute varias operaciones asincrónicas que implican la obtención de un recurso remoto, inicie el ciclo de representación, permita que la escena se actualice a medida que lleguen recursos remotos.

En mi humilde opinión, este es el mayor descubrimiento de Three.js para los usuarios de Javascript (como yo) que no están familiarizados con el funcionamiento de las operaciones asincrónicas.

1

Tuve este problema, pero si está cargando el html como un archivo (es decir, no localmente un servidor web), muchos navegadores (cromo por ejemplo) no le permitirán cargar imágenes de la manera estándar three.js, ya que es una violación de seguridad

Cuestiones relacionadas