Mercurial > hg > Members > e085737 > sample
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 |