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