Mercurial > hg > Members > e085711
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; +} +