view paper_shooting/resources/render/DrawObject.js @ 27:6468848f4d22 default tip

modified indent
author <e085737>
date Thu, 24 Feb 2011 22:16:46 +0900
parents 158b846e3874
children
line wrap: on
line source

function drawObject_link(ctx, node, angle, xyz, scale, glObj){
    // setup VBOs
    ctx.enableVertexAttribArray(0);
    ctx.enableVertexAttribArray(1);
    ctx.enableVertexAttribArray(2);

    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject);
    ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);

    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject);
    ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);

    ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject);
    ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);

    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject);

    // generate the model-view matrix

    var mvMatrix = create_matrix(node,angle, xyz, scale);

    // construct the normal matrix from the model-view matrix
    var normalMatrix = new J3DIMatrix4(mvMatrix);
    normalMatrix.invert();
    normalMatrix.transpose();
    normalMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false);


    // construct the model-view * projection matrix
    var mvpMatrix = new J3DIMatrix4(ctx.perspectiveMatrix);
    mvpMatrix.multiply(mvMatrix);
    mvpMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false);

    ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
    ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0);
}


create_matrix = function(node, angle, xyz, scale){
    if(node.parents != null){
        var mvMatrix = new J3DIMatrix4();
        node.parents.mat.getAsArrayMatrix(mvMatrix.$matrix);
    }else{
        var mvMatrix = new J3DIMatrix4();
    }

    var $my_mat = new J3DIMatrix4();

    mvMatrix.rotate(angle[0],angle[1],angle[2]);

    mvMatrix.translate(xyz[0],xyz[1],xyz[2]);
    mvMatrix.scale(scale, scale, scale);
    mvMatrix.getAsArrayMatrix($my_mat.$matrix);
    node.mat = $my_mat;

    return node.mat;
}