0
|
1 function parseXml( url ) {
|
|
2 var http = new JKL.ParseXML( url );
|
|
3 var data = http.parse()["OBJECT-3D"];
|
|
4 var xmlObj = new Object();
|
2
|
5
|
0
|
6 if (data["surface"][0]) {
|
|
7 for (var i in data["surface"]) {
|
|
8 var obj = xmlObj[data["surface"][i]["name"]] = new Object();
|
|
9 obj.vertex = splitVector(data["surface"][i]["coordinate"]);
|
|
10 obj.normal = splitVector(data["surface"][i]["normal"]);
|
|
11 obj.texCoords = splitVector(data["surface"][i]["texture"]);
|
2
|
12 var xmlObjImage = data["surface"][i]["image"];
|
|
13 obj.image = 'data:image/png;base64,'+xmlObjImage["#text"];
|
0
|
14 }
|
|
15 } else {
|
|
16 var obj = xmlObj[data["surface"]["name"]] = new Object();
|
2
|
17 obj.vertex = splitVector(data["surface"]["coordinate"]);
|
|
18 obj.normal = splitVector(data["surface"]["normal"]);
|
|
19 obj.texCoords = splitVector(data["surface"]["texture"]);
|
|
20 var xmlObjImage = data["surface"]["image"];
|
|
21 obj.image = 'data:image/png;base64,'+xmlObjImage["#text"];
|
0
|
22 }
|
|
23 return xmlObj;
|
|
24 }
|
|
25
|
|
26 function splitVector(str) {
|
2
|
27 // return str.replace(/^\s+/g, "").replace(/\s+/g, " ").split(" ");
|
|
28 return str.replace(/^\s+/g, "").replace(/\s+/g, " ").replace(/\s$/g, "").split(" ");
|
0
|
29 }
|
|
30
|
|
31 function makeXmlObj(ctx, xmlObj)
|
|
32 {
|
|
33 var geometryData = [ ];
|
|
34 var normalData = [ ];
|
|
35 var texCoordData = [ ];
|
|
36 var indexData = [ ];
|
2
|
37 var index = 0;
|
|
38 for(var i=0; xmlObj.vertex[i]; i++){
|
0
|
39 geometryData.push(parseFloat(xmlObj.vertex[i]));
|
|
40 if ( (i % 3) == 0) {
|
2
|
41 indexData.push(index);
|
|
42 index++;
|
0
|
43 }
|
|
44 }
|
2
|
45 for(i=0; xmlObj.texCoords[i]; i++){
|
|
46 texCoordData.push(parseFloat(xmlObj.texCoords[i]));
|
0
|
47 }
|
2
|
48 for(i=0; xmlObj.normal[i]; i++){
|
|
49 normalData.push(parseFloat(xmlObj.normal[i]));
|
0
|
50 }
|
2
|
51
|
0
|
52 var retval = { };
|
|
53
|
|
54 retval.normalObject = ctx.createBuffer();
|
|
55 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
|
|
56 ctx.bufferData(ctx.ARRAY_BUFFER, new WebGLFloatArray(normalData), ctx.STATIC_DRAW);
|
|
57
|
|
58 retval.texCoordObject = ctx.createBuffer();
|
|
59 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
|
|
60 ctx.bufferData(ctx.ARRAY_BUFFER, new WebGLFloatArray(texCoordData), ctx.STATIC_DRAW);
|
|
61
|
|
62 retval.vertexObject = ctx.createBuffer();
|
|
63 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
|
|
64 ctx.bufferData(ctx.ARRAY_BUFFER, new WebGLFloatArray(geometryData), ctx.STATIC_DRAW);
|
|
65
|
|
66 retval.numIndices = indexData.length;
|
|
67 retval.indexObject = ctx.createBuffer();
|
|
68 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
|
|
69 ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new WebGLUnsignedShortArray(indexData), ctx.STREAM_DRAW);
|
|
70
|
|
71 return retval;
|
|
72 }
|
|
73
|