Mercurial > hg > Members > e085711
view webGL/test/resources/makeXmlObj.js @ 2:be36da713ffd
update makeXmlObj.js
author | NOBUYASU Oshiro |
---|---|
date | Mon, 31 May 2010 03:25:15 +0900 |
parents | b67b790dcf4f |
children | 10344afb38a6 |
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"]); 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"]); 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 geometryData = [ ]; var normalData = [ ]; var texCoordData = [ ]; var indexData = [ ]; var index = 0; for(var i=0; xmlObj.vertex[i]; i++){ geometryData.push(parseFloat(xmlObj.vertex[i])); if ( (i % 3) == 0) { indexData.push(index); index++; } } for(i=0; xmlObj.texCoords[i]; i++){ texCoordData.push(parseFloat(xmlObj.texCoords[i])); } for(i=0; xmlObj.normal[i]; i++){ normalData.push(parseFloat(xmlObj.normal[i])); } 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; }