http://jsdo.it/daishi.hmr/gZJzを改造してLambert Shaderをやってみた。色はシェーダーに直接書いてうまくいった。
次にJavaScriptから色を渡すように変更。しかし、ShaderオブジェクトのsetUniformsにuColorを渡してみたけど、なんか渡ってないらしい。WebGL Inspectorを見てみるとuColorを渡してる形跡はなかった。どうやって使えばいいのかわからん
enchant(); window.onload = function() { var game = new Game(320, 320); game.fps = 60; game.onload = function() { var scene = new Scene3D(); var sphere = new Sphere(0.3); sphere.program = new Shader(VSHADER, FSHADER); sphere.program.setUniforms({uColor: [1.0, 0.0, 0.0, 1.0]}); sphere.x = -0.5; scene.addChild(sphere); var cube = new Cube(0.3); cube.program = new Shader(); cube.program.vShaderSource = VSHADER; cube.program.fShaderSource = FSHADER; cube.program.setUniforms({uColor: [0.0, 0.0, 1.0, 1.0]}); cube.program.compile(); cube.x = 0.5; scene.addChild(cube); game.addEventListener("enterframe", function() { var t = game.frame * 0.01; scene.getCamera().x = Math.sin(t) * 10; scene.getCamera().z = Math.cos(t) * 10; }); }; game.start(); }; /** 普通のバーテックスシェーダー */ var VSHADER = '\n\ attribute vec3 aVertexPosition;\n\ attribute vec4 aVertexColor;\n\ \n\ attribute vec3 aNormal;\n\ attribute vec2 aTextureCoord;\n\ \n\ uniform mat4 uModelMat;\n\ uniform mat4 uRotMat;\n\ uniform mat4 uCameraMat;\n\ uniform mat4 uProjMat;\n\ uniform mat3 uNormMat;\n\ uniform float uUseCamera;\n\ varying vec3 vNormal;\n\ \n\ void main() {\n\ vec4 p = uModelMat * vec4(aVertexPosition, 1.0);\n\ vNormal = uNormMat * aNormal;\n\ gl_Position = uProjMat * (uCameraMat * uUseCamera) * p + uProjMat * p * (1.0 - uUseCamera);\n\ }'; var FSHADER = '\n\ precision highp float;\n\ \n\ uniform vec4 uColor;\n\ uniform sampler2D uSampler;\n\ uniform float uUseDirectionalLight;\n\ uniform vec3 uLightColor;\n\ uniform vec3 uLookVec;\n\ uniform vec4 uAmbient;\n\ uniform vec4 uDiffuse;\n\ uniform vec4 uSpecular;\n\ uniform vec4 uEmission;\n\ uniform vec4 uDetectColor;\n\ uniform float uDetectTouch;\n\ uniform float uUseTexture;\n\ uniform float uShininess;\n\ uniform vec3 uLightDirection;\n\ varying vec3 vNormal;\n\ vec3 lightDir = vec3(1.0 , 1.0, 1.0);\n\ \n\ void main() {\n\ gl_FragColor = uColor;//vec4(max(0.0, dot(normalize(vNormal), normalize(lightDir))) * vec3(1.0, 0.0, 0.0), 1.0);\n\ }';