comparison paper_shooting/resources/render/Image_xml.js @ 27:6468848f4d22 default tip

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