view paper_shooting/resources/render/DrawObject.js @ 25:158b846e3874

paper
author <e085737>
date Mon, 14 Feb 2011 16:37:16 +0900
parents
children 6468848f4d22
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],0,1,0);
        //mvMatrix.rotate(angle[1],1,0,0);
        //mvMatrix.rotate(angle[2],0,0,1);
        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
}