diff webGL/test/resources/makeXmlObj.js @ 0:b67b790dcf4f

upload All File
author e085711@nobuyasuoshiro.local
date Mon, 24 May 2010 21:38:02 +0900
parents
children be36da713ffd
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webGL/test/resources/makeXmlObj.js	Mon May 24 21:38:02 2010 +0900
@@ -0,0 +1,73 @@
+function parseXml( 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"]);
+		}
+    } 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"]);
+    }
+    return xmlObj;
+}
+
+function splitVector(str) {
+    return str.replace(/^\s+/g, "").replace(/\s+/g, " ").split(" ");
+}
+
+function makeXmlObj(ctx, xmlObj)
+{
+    var geometryData = [ ];
+    var normalData   = [ ];
+    var texCoordData = [ ];
+    var indexData    = [ ];
+    var i = 0;
+    var j = 0;
+    var k = 0;
+    while (xmlObj.vertex[i]) {
+		geometryData.push(parseFloat(xmlObj.vertex[i]));
+		if ( (i % 3) == 0) {
+			indexData.push(k);
+			k++;
+		}
+		i++;
+    }
+    k = 0;
+    while (xmlObj.texCoords[k]) {
+		texCoordData.push(parseFloat(xmlObj.texCoords[k]));
+		k++;
+    }
+    while (xmlObj.normal[j]) {
+		normalData.push(parseFloat(xmlObj.normal[j]));
+		j++;
+    }
+        
+    var retval = { };
+    
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new WebGLFloatArray(normalData), ctx.STATIC_DRAW);
+	
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new WebGLFloatArray(texCoordData), ctx.STATIC_DRAW);
+	
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new WebGLFloatArray(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 WebGLUnsignedShortArray(indexData), ctx.STREAM_DRAW);
+	
+    return retval;
+}
+