view webGL/test/resources/makeXmlObj.js @ 27:e3a50cb29c85 default tip

upload xmldisplay
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Wed, 20 Apr 2011 23:45:15 +0900
parents 10344afb38a6
children
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;
}