マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

gl.enchant.jsでシェーダーに値を渡せてない...

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\
    }';