diff fps/resources/makePanel.js @ 0:fbb6f4f89f76

info3_1week
author Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
date Fri, 27 Apr 2012 13:13:49 +0900
parents
children 6b217e0f301c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fps/resources/makePanel.js	Fri Apr 27 13:13:49 2012 +0900
@@ -0,0 +1,113 @@
+function parseObj( url ) {
+    var http = new JKL.ParseXML( url );
+    var data = http.parse()["OBJECT-3D"];
+    var xmlObj = new Object();
+
+    if (data["surface"][0]) {
+		for (var i in data["surface"]) {
+			var obj = xmlObj[data["surface"][i]["name"]] = new Object();
+			obj.vertex = splitVector(data["surface"][i]["coordinate"]);
+			obj.normal = splitVector(data["surface"][i]["normal"]);
+			obj.texCoords = splitVector(data["surface"][i]["texture"]);
+			obj.model = splitVector(data["surface"][i]["model"]);
+		 	var xmlObjImage = data["surface"][i]["image"];
+			obj.image = 'data:image/png;base64,'+xmlObjImage["#text"];
+		}
+    } else {
+    	var obj = xmlObj[data["surface"]["name"]] = new Object();
+	obj.vertex =  splitVector(data["surface"]["coordinate"]);
+	obj.normal =  splitVector(data["surface"]["normal"]);
+	obj.texCoords = splitVector(data["surface"]["texture"]);
+	obj.model = splitVector(data["surface"]["model"]);
+	var xmlObjImage = data["surface"]["image"];
+	obj.image = 'data:image/png;base64,'+xmlObjImage["#text"];
+    }
+
+    return xmlObj;
+}
+
+function splitVector(str) {
+    //    return str.replace(/^\s+/g, "").replace(/\s+/g, " ").split(" ");
+    return str.replace(/^\s+/g, "").replace(/\s+/g, " ").replace(/\s$/g, "").split(" ");
+}
+
+function makeXmlObj(ctx, xmlObj)
+{
+
+    var model = new Object();
+    model.x = parseFloat(xmlObj.model[0]);
+    model.y = parseFloat(xmlObj.model[1]);
+    model.z = parseFloat(xmlObj.model[2]);
+  
+    var geometryData = [ ];
+    var normalData   = [ ];
+    var texCoordData = [ ];
+    var indexData    = [ ];
+    var index = 0;
+    var xmax = 0;
+    var xmin = 0;
+    var ymax = 0;
+    var ymin = 0;    
+   
+    
+    for(var i=0; xmlObj.vertex[i]; i+=3){
+		geometryData.push(parseFloat(xmlObj.vertex[i]) - model.x);
+		geometryData.push(parseFloat(xmlObj.vertex[i+1]) - model.y);
+		geometryData.push(parseFloat(xmlObj.vertex[i+2]) - model.z);
+		if ( (i % 3) == 0) {
+			indexData.push(index);
+			index++;
+		}
+		//オブジェクトの最大・最小のx,y座標を求める
+		if ( i == 0) {
+		    xmax = geometryData[0];
+		    xmin = geometryData[0];
+		    ymax = geometryData[1];
+		    ymin = geometryData[1];
+		}
+		if ( i > 0 ){
+		    xmax = Math.max( xmax, geometryData[i]);
+		    xmin = Math.min( xmin, geometryData[i]);
+		    ymax = Math.max( ymax, geometryData[i+1]);
+		    ymin = Math.min( ymin, geometryData[i+1]);
+		}
+    }
+    for(i=0; xmlObj.texCoords[i]; i++){
+		texCoordData.push(parseFloat(xmlObj.texCoords[i]));
+
+    }
+    for(i=0; xmlObj.normal[i]; i+=3){
+		normalData.push(parseFloat(xmlObj.normal[i]));
+		normalData.push(parseFloat(xmlObj.normal[i+1]));
+		normalData.push(parseFloat(xmlObj.normal[i+2]));
+    }
+
+    var retval = { };
+    //オブジェクトの横幅,縦幅を求める
+    retval.w = xmax - xmin;
+    retval.h = ymax - ymin;
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW);
+	
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW);
+	
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW);
+    
+    retval.numIndices = indexData.length;
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW);
+	
+    return retval;
+}
+
+function makeOrthoPara(left, right, bottom, top)
+{
+    return {left:left,right:right,bottom:bottom,top:top};
+}
\ No newline at end of file