How to update material of cube on runtime using WebGL?

javascript, three.js

Solution

With a code fragment, it is difficult to know what is causing the error, but you cannot change materials that involve the presence or not of a texture. Try keeping all of your materials of the same type. Also, you may need to set `material.needsUpdate` flag to `true`.

You can find more detail and examples in the Three.js wiki about how to update things with `WebGLRenderer`.

https://github.com/mrdoob/three.js/wiki/Updates

Also, here is a fiddle that does something similar to what you appear to be trying to do: http://jsfiddle.net/2FZU7/51/

EDIT: fiddle updated for three.js r.58

Problem

I'm using three.js for doing animations. I want to dynamically update a material of a cube mesh. Here is example: ``` // create cube geometry var material1 = [new THREE.MeshBasicMaterial({color:0xBEE2FF}),.....]; var geometry = new THREE.CubeGeometry(50, 50, 50,0,0,0,material1 ); var cube = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial()); // ... var material2 = [new THREE.MeshBasicMaterial({color:0xFFFFFF}), ...]; cube.geometry.materials = material2; ``` If I use CanvasRenderer, it works. But when I change to WebGL Renderer, it throws error: Uncaught TypeError: Cannot read property 'map' of undefined How to update the material of a cube on runtime using WebGL?

Original source