WebGL - 模拟时钟

时间:2014-09-12 21:05:55

标签: javascript webgl

我刚刚开始学习WebGL,我正在尝试创建一个模拟时钟动画。

我用正确的旋转(1rpm)创建了秒针。但是,我有分钟和时针的问题。

 
var VSHADER_CODE = 
    'attribute vec4 position;\n' +
    'uniform mat4 modelMatrix;\n' + 
    'void main() {\n' +
        'gl_Position = modelMatrix * position;\n' +
    '}';

var FSHADER_CODE = 
    'void main() {\n' + 
        'gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n' +
    '}';

function main() {

    initCanvas();
    initVertices();    //initialize 6 vertices. 
    // initBuffer()...
    initVertexShader(gl, VSHADER_CODE, verShader);
    initFragShader(gl, FSHADER_CODE, fragShader);

    var shaderProgram = gl.createProgram();
    gl.attachShader(shaderProgram, vertexShader);
    gl.attachShader(shaderProgram, fragmentShader);
    gl.linkProgram(shaderProgram);
}

function drawScene(angle) {

    var modelMatrixLoc = gl.getUniformLocation(shaderProgram, 'modelMatrix');
    var m = mat4.create();
    mat4.rotateZ(m,m,angle*Math.PI/180.0);
    gl.uniformMatrix4fv(modelMatrixLoc, false, m);

    var positionSec = gl.getAttribLocation(shaderProgram, 'position');
    gl.enableVertexAttribArray(positionSec);
    gl.bindBuffer(gl.ARRAY_BUFFER, secondBuffer);
    gl.vertexAttribPointer(positionSec, 2, gl.FLOAT, false, 0, 0);
    gl.drawArrays(gl.LINES, 0, 2);
}

function drawSecond(timeStamp) {

    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    gl.useProgram(shaderProgram);
    var angle = ((6*timeStamp/1000) % 360);
    drawScene(angle);
    requestAnimationFrame(drawSecond);
}

我尝试过分钟和时针创建不同的缓冲区,但我不知道如何以不同于秒针的速度旋转它们。

欢迎任何帮助。

0 个答案:

没有答案