view resources/render/DrawObject.js @ 0:0b8d8ce99f46 default tip

commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 14 Feb 2011 17:06:56 +0900
parents
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.translate(xyz[0],xyz[1],xyz[2])
        //mvMatrix.quaternion(angle[0],0,1,0);
        mvMatrix.rotate(angle[0],0,1,0);
        mvMatrix.rotate(angle[1],1,0,0);
        mvMatrix.rotate(angle[2],0,0,1);
        //mvMatrix.quaternion(angle[1],1,0,0);
        //mvMatrix.quaternion(angle[2],0,0,1);
        //mvMatrix.rotate(angle[2],0,0,1);
		//mvMatrix.translate(-xyz[0],-xyz[1],-xyz[2])

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

		return node.mat
}