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

paper
author <e085737>
date Mon, 14 Feb 2011 16:37:16 +0900
parents
children 6468848f4d22
line wrap: on
line source

function SceneGraphRoot(w, h){
	sg_exec_tree = null;

	//controller = create_controller();

	sg_draw_tree = new Array();
	sg_available_list = null;

	screen_w = w;
	screen_h = h;

	position_xyz = new Array(0, 0, 0);
	aim_xyz = new Array(0 ,0, 1);
	eye_xyz = new Array(0, -1, 0);
	this.sg_src = new Array();
	this.camera = null;
    this.move_now = false;
    this.list = new Array();

	angleRate_xyz = new Array(0, 0, 0);
    angleRate_x = new Array(1, 0, 0);
    angleRate_y = new Array(0, 1, 0);
    angleRate_z = new Array(0, 0, 1);
    cameraAxis = new Array(0, 0, 0);

	//cnt = 0;
}


SceneGraphRoot.prototype.createFromXMLfile = function(gl, sgroot, url){
	if(gl.obj == undefined) gl.obj = new Object();
	var xmlChara = new Object();
	xmlChara = parsePanel(url);
	for (var name in xmlChara)
	{
		gl.obj[name] = makeXmlObj(gl, xmlChara[name])
		gl.obj[name].texture = loadImageTexture(gl, xmlChara[name].image);
		sgroot.sg_src[name] = gl.obj[name];
	}
}


SceneGraphRoot.prototype.createSceneGraph1 = function(id){
	if(id < 0){
		alert("error: createSceneGraph(id): id not found");
		return null;
	}

	var src = new SceneGraph(id)
		src.id = id;

    /*
	if(sg_exec_tree != null){
		sg_exec_tree.addChild(src);
	}*/

	SceneGraphRoot.prototype.addNext(src);

	return src;
}


SceneGraphRoot.prototype.createSceneGraph3 = function(name){
	var p = new SceneGraph();

	p.sgroot = this;
    p.name = name;

	SceneGraphRoot.prototype.addNext(p);

	p.flag_drawable = 0;

	return p;
}


SceneGraphRoot.prototype.addNext = function(sg){
	sg_available_list = sg;
}

/* 渡された引数をもとにイメージを検索する */
SceneGraphRoot.prototype.getSgid = function(obj_name){
	for(var name in sg_src){
		if(obj_name == sg_src[name].name){
			return sg_src[name];
		}
	}
	return -1
}


SceneGraphRoot.prototype.setCamera = function(ctx, node){
	this.camera = node;
}


SceneGraphRoot.prototype.getCamera = function(ctx, sgroot, node){
	
	ctx.perspectiveMatrix = new J3DIMatrix4();

    ctx.perspectiveMatrix.perspective(45, width/height, 1, 10000);

    //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],cameraAngle_xyz[1],cameraAngle_xyz[2]);

	ctx.perspectiveMatrix.lookat(position_xyz[0],position_xyz[1],position_xyz[2], aim_xyz[0], aim_xyz[1], aim_xyz[2], 0, -1, 0);


}

SceneGraphRoot.prototype.getCamera2 = function(ctx, sgroot, node){
	
	ctx.perspectiveMatrix = new J3DIMatrix4();

    ctx.perspectiveMatrix.perspective(45, width/height, 1, 10000);

    ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],cameraAngle_xyz[1],cameraAngle_xyz[2]);

	ctx.perspectiveMatrix.lookat(position_xyz[0],position_xyz[1],position_xyz[2], aim_xyz[0], aim_xyz[1], aim_xyz[2], 0, -1, 0);
}


SceneGraphRoot.prototype.getCamera3 = function(ctx, sgroot, node){
	
	ctx.perspectiveMatrix = new J3DIMatrix4();

    ctx.perspectiveMatrix.perspective(45, width/height, 1, 10000);

    //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],cameraAngle_xyz[1],cameraAngle_xyz[2]);

	ctx.perspectiveMatrix.lookat(position_xyz[0],position_xyz[1],position_xyz[2], aim_xyz[0] + 1, aim_xyz[1], aim_xyz[2] - 1, 0, -1, 0);
}





SceneGraphRoot.prototype.getController = function(){   
	var left_push     = currentlyPressedKeys[37];     /* ←  */
	var down_push     = currentlyPressedKeys[40];     /* ↓  */
	var right_push    = currentlyPressedKeys[39];     /* →  */
	var up_push       = currentlyPressedKeys[38];     /* ↑  */
	var cross_push    = currentlyPressedKeys[90];     /* Z */
	var circle_push   = currentlyPressedKeys[88];     /* X */
	var start_push    = currentlyPressedKeys[13];     /* Enter */ 
	var zoom_in_push  = currentlyPressedKeys[75];     /* K */
	var zoom_out_push = currentlyPressedKeys[76];     /* L */
	var left_move     = currentlyPressedKeys[65];     /* A */
	var right_move    = currentlyPressedKeys[68];     /* D */
	var front_move    = currentlyPressedKeys[87];     /* W */
	var back_move     = currentlyPressedKeys[83];     /* S */
	var space_push    = currentlyPressedKeys[32];     /* SPACE */


	this.right_isHold = function(){
		return right_push;
	}

	this.right_isRelease = function(){
		return !right_push;
	}

	this.left_isHold = function(){
		return left_push;
	}

	this.left_isRelease = function(){
		return !left_push;
	}

	this.up_isHold = function(){
		return up_push;
	}

	this.up_isRelease = function(){
		return !up_push;
	}

	this.down_isHold = function(){
		return down_push;
	}

	this.down_isRelease = function(){
		return !down_push;
	}

	this.cross_isHold = function(){
		return cross_push;
	}

	this.cross_isRelease = function(){
		return !cross_push;
	}

	this.circle_isHold = function(){
		return circle_push;
	}

	this.circle_isRelease = function(){
		return !circle_push;
	}

	this.start_isHold = function(){
		return start_push;
	}

	this.start_isRelease = function(){
		return !start_push;
	}

	this.zoom_in_isHold = function(){
		return zoom_in_push;
	}

	this.zoom_out_isHold = function(){
		return zoom_out_push;
	}

	this.left_move_isHold = function(){
		return left_move;
	}

	this.right_move_isHold = function(){
		return right_move;
	}

	this.front_move_isHold = function(){
		return front_move;
	}

	this.back_move_isHold = function(){
		return back_move;
	}

	this.space_isHold = function(){
		return space_push;
	}

	this.space_isRelease = function(){
		return !space_push;
	}
}



/* rootになるnodeを設定する */
SceneGraphRoot.prototype.setSceneData = function(sg){
	sg.parents = null;
	sg_exec_tree = sg;
}


/* 各ノードの場所を連想配列で格納する */
SceneGraphRoot.prototype.nodeLocate = function(sgroot, id, locate){
    sgroot.list[id] = locate;
}