I am starting with THREE.js, and I am trying to draw a rectangle with a texture on it, lit by a single source of light. I think this is as simple as it gets (HTML omitted for brevity):
function loadScene() {     var world = document.getElementById('world'),         WIDTH = 1200,         HEIGHT = 500,         VIEW_ANGLE = 45,         ASPECT = WIDTH / HEIGHT,         NEAR = 0.1,         FAR = 10000,          renderer = new THREE.WebGLRenderer(),         camera = new THREE.Camera(VIEW_ANGLE, ASPECT, NEAR, FAR),         scene = new THREE.Scene(),         texture = THREE.ImageUtils.loadTexture('crate.gif'),         material = new THREE.MeshBasicMaterial({map: texture}),         // material = new THREE.MeshPhongMaterial({color: 0xCC0000});         geometry = new THREE.PlaneGeometry(100, 100),         mesh = new THREE.Mesh(geometry, material),         pointLight = new THREE.PointLight(0xFFFFFF);      camera.position.z = 200;         renderer.setSize(WIDTH, HEIGHT);     scene.addChild(mesh);     world.appendChild(renderer.domElement);     pointLight.position.x = 50;     pointLight.position.y = 50;     pointLight.position.z = 130;     scene.addLight(pointLight);      renderer.render(scene, camera); }   The problem is, I cannot see anything. If I change the material and use the commented one, a square appears as I would expect. Note that
What I am I doing wrong?
By the time the image is loaded, the renderer has already drawn the scene, hence it is too late. The solution is to change
texture = THREE.ImageUtils.loadTexture('crate.gif'),   into
texture = THREE.ImageUtils.loadTexture('crate.gif', {}, function() {     renderer.render(scene); }), 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With