annotate Vacuum/resources/Image_xml.js @ 0:718974a1a32b

Vacuum
author <e085737>
date Tue, 07 Dec 2010 17:31:15 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
<e085737>
parents:
diff changeset
1 function createFromXMLfile(gl,url){
<e085737>
parents:
diff changeset
2 if(gl.obj == undefined) gl.obj = new Object();
<e085737>
parents:
diff changeset
3 var xmlChara = new Object();
<e085737>
parents:
diff changeset
4 xmlChara = parsePanel(url);
<e085737>
parents:
diff changeset
5 for (var name in xmlChara)
<e085737>
parents:
diff changeset
6 {
<e085737>
parents:
diff changeset
7 gl.obj[name] = makeXmlObj(gl, xmlChara[name]);
<e085737>
parents:
diff changeset
8 gl.obj[name].texture = loadImageTexture(gl, xmlChara[name].image);
<e085737>
parents:
diff changeset
9 gl.obj[name].name = name;
<e085737>
parents:
diff changeset
10 }
<e085737>
parents:
diff changeset
11 }
<e085737>
parents:
diff changeset
12
<e085737>
parents:
diff changeset
13 /*
<e085737>
parents:
diff changeset
14 function createFromXMLfile(gl, url)
<e085737>
parents:
diff changeset
15 {
<e085737>
parents:
diff changeset
16 xml = new Object();
<e085737>
parents:
diff changeset
17 var xmlChara = new Object();
<e085737>
parents:
diff changeset
18 xmlChara = parsePanel(url);
<e085737>
parents:
diff changeset
19 for (var name in xmlChara)
<e085737>
parents:
diff changeset
20 {
<e085737>
parents:
diff changeset
21 xml[name] = makeXmlObj(gl, xmlChara[name]);
<e085737>
parents:
diff changeset
22 xml[name].texture = loadImageTexture(gl, xmlChara[name].image);
<e085737>
parents:
diff changeset
23 }
<e085737>
parents:
diff changeset
24 return xml[name]
<e085737>
parents:
diff changeset
25 }
<e085737>
parents:
diff changeset
26 */
<e085737>
parents:
diff changeset
27
<e085737>
parents:
diff changeset
28
<e085737>
parents:
diff changeset
29 function parsePanel(url) {
<e085737>
parents:
diff changeset
30 var http = new JKL.ParseXML(url);
<e085737>
parents:
diff changeset
31 var data = http.parse()["OBJECT-3D"];
<e085737>
parents:
diff changeset
32 var xmlObj = new Object();
<e085737>
parents:
diff changeset
33
<e085737>
parents:
diff changeset
34 if (data["surface"][0]) {
<e085737>
parents:
diff changeset
35 for (var i in data["surface"]) {
<e085737>
parents:
diff changeset
36 var obj = xmlObj[data["surface"][i]["name"]] = new Object();
<e085737>
parents:
diff changeset
37 obj.vertex = splitVector(data["surface"][i]["coordinate"]);
<e085737>
parents:
diff changeset
38 obj.normal = splitVector(data["surface"][i]["normal"]);
<e085737>
parents:
diff changeset
39 obj.texCoords = splitVector(data["surface"][i]["texture"]);
<e085737>
parents:
diff changeset
40 obj.model = splitVector(data["surface"][i]["model"]);
<e085737>
parents:
diff changeset
41 var xmlObjImage = data["surface"][i]["image"];
<e085737>
parents:
diff changeset
42 obj.image = 'data:image/png;base64,'+xmlObjImage["#text"];
<e085737>
parents:
diff changeset
43 }
<e085737>
parents:
diff changeset
44 } else {
<e085737>
parents:
diff changeset
45 var obj = xmlObj[data["surface"]["name"]] = new Object();
<e085737>
parents:
diff changeset
46 obj.vertex = splitVector(data["surface"]["coordinate"]);
<e085737>
parents:
diff changeset
47 obj.normal = splitVector(data["surface"]["normal"]);
<e085737>
parents:
diff changeset
48 obj.texCoords = splitVector(data["surface"]["texture"]);
<e085737>
parents:
diff changeset
49 obj.model = splitVector(data["surface"]["model"]);
<e085737>
parents:
diff changeset
50 var xmlObjImage = data["surface"]["image"];
<e085737>
parents:
diff changeset
51 obj.image = 'data:image/png;base64,'+xmlObjImage["#text"];
<e085737>
parents:
diff changeset
52 }
<e085737>
parents:
diff changeset
53 return xmlObj;
<e085737>
parents:
diff changeset
54 }
<e085737>
parents:
diff changeset
55
<e085737>
parents:
diff changeset
56 function splitVector(str) {
<e085737>
parents:
diff changeset
57 // return str.replace(/^\s+/g, "").replace(/\s+/g, " ").split(" ");
<e085737>
parents:
diff changeset
58 return str.replace(/^\s+/g, "").replace(/\s+/g, " ").replace(/\s$/g, "").split(" ");
<e085737>
parents:
diff changeset
59 }
<e085737>
parents:
diff changeset
60
<e085737>
parents:
diff changeset
61 function makeXmlObj(ctx, xmlObj)
<e085737>
parents:
diff changeset
62 {
<e085737>
parents:
diff changeset
63
<e085737>
parents:
diff changeset
64 var model = new Object();
<e085737>
parents:
diff changeset
65 model.x = parseFloat(xmlObj.model[0]);
<e085737>
parents:
diff changeset
66 model.y = parseFloat(xmlObj.model[1]);
<e085737>
parents:
diff changeset
67 model.z = parseFloat(xmlObj.model[2]);
<e085737>
parents:
diff changeset
68
<e085737>
parents:
diff changeset
69 var geometryData = [ ];
<e085737>
parents:
diff changeset
70 var normalData = [ ];
<e085737>
parents:
diff changeset
71 var texCoordData = [ ];
<e085737>
parents:
diff changeset
72 var indexData = [ ];
<e085737>
parents:
diff changeset
73 var index = 0;
<e085737>
parents:
diff changeset
74 var xmax = 0;
<e085737>
parents:
diff changeset
75 var xmin = 0;
<e085737>
parents:
diff changeset
76 var ymax = 0;
<e085737>
parents:
diff changeset
77 var ymin = 0;
<e085737>
parents:
diff changeset
78
<e085737>
parents:
diff changeset
79
<e085737>
parents:
diff changeset
80 for(var i=0; xmlObj.vertex[i]; i+=3){
<e085737>
parents:
diff changeset
81 geometryData.push(parseFloat(xmlObj.vertex[i]) - model.x);
<e085737>
parents:
diff changeset
82 geometryData.push(parseFloat(xmlObj.vertex[i+1]) - model.y);
<e085737>
parents:
diff changeset
83 geometryData.push(parseFloat(xmlObj.vertex[i+2]) - model.z);
<e085737>
parents:
diff changeset
84 if ( (i % 3) == 0) {
<e085737>
parents:
diff changeset
85 indexData.push(index);
<e085737>
parents:
diff changeset
86 index++;
<e085737>
parents:
diff changeset
87 }
<e085737>
parents:
diff changeset
88 //オブジェクトの最大・最小のx,y座標を求める
<e085737>
parents:
diff changeset
89 if ( i == 0) {
<e085737>
parents:
diff changeset
90 xmax = geometryData[0];
<e085737>
parents:
diff changeset
91 xmin = geometryData[0];
<e085737>
parents:
diff changeset
92 ymax = geometryData[1];
<e085737>
parents:
diff changeset
93 ymin = geometryData[1];
<e085737>
parents:
diff changeset
94 }
<e085737>
parents:
diff changeset
95 if ( i > 0 ){
<e085737>
parents:
diff changeset
96 xmax = Math.max( xmax, geometryData[i]);
<e085737>
parents:
diff changeset
97 xmin = Math.min( xmin, geometryData[i]);
<e085737>
parents:
diff changeset
98 ymax = Math.max( ymax, geometryData[i+1]);
<e085737>
parents:
diff changeset
99 ymin = Math.min( ymin, geometryData[i+1]);
<e085737>
parents:
diff changeset
100 }
<e085737>
parents:
diff changeset
101
<e085737>
parents:
diff changeset
102 }
<e085737>
parents:
diff changeset
103 for(i=0; xmlObj.texCoords[i]; i++){
<e085737>
parents:
diff changeset
104 texCoordData.push(parseFloat(xmlObj.texCoords[i]));
<e085737>
parents:
diff changeset
105
<e085737>
parents:
diff changeset
106 }
<e085737>
parents:
diff changeset
107 for(i=0; xmlObj.normal[i]; i+=3){
<e085737>
parents:
diff changeset
108 normalData.push(parseFloat(xmlObj.normal[i]));
<e085737>
parents:
diff changeset
109 normalData.push(parseFloat(xmlObj.normal[i+1]));
<e085737>
parents:
diff changeset
110 normalData.push(parseFloat(xmlObj.normal[i+2]));
<e085737>
parents:
diff changeset
111 }
<e085737>
parents:
diff changeset
112
<e085737>
parents:
diff changeset
113 var retval = { };
<e085737>
parents:
diff changeset
114 //オブジェクトの横幅,縦幅を求める
<e085737>
parents:
diff changeset
115 retval.w = xmax - xmin;
<e085737>
parents:
diff changeset
116 retval.h = ymax - ymin;
<e085737>
parents:
diff changeset
117
<e085737>
parents:
diff changeset
118 retval.normalObject = ctx.createBuffer();
<e085737>
parents:
diff changeset
119 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
<e085737>
parents:
diff changeset
120 ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW);
<e085737>
parents:
diff changeset
121
<e085737>
parents:
diff changeset
122 retval.texCoordObject = ctx.createBuffer();
<e085737>
parents:
diff changeset
123 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
<e085737>
parents:
diff changeset
124 ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW);
<e085737>
parents:
diff changeset
125
<e085737>
parents:
diff changeset
126 retval.vertexObject = ctx.createBuffer();
<e085737>
parents:
diff changeset
127 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
<e085737>
parents:
diff changeset
128 ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW);
<e085737>
parents:
diff changeset
129
<e085737>
parents:
diff changeset
130 retval.numIndices = indexData.length;
<e085737>
parents:
diff changeset
131 retval.indexObject = ctx.createBuffer();
<e085737>
parents:
diff changeset
132 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
<e085737>
parents:
diff changeset
133 ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW);
<e085737>
parents:
diff changeset
134
<e085737>
parents:
diff changeset
135 return retval;
<e085737>
parents:
diff changeset
136 }
<e085737>
parents:
diff changeset
137