Mercurial > hg > Members > e105716
comparison fps/resources/makePanel.js @ 0:fbb6f4f89f76
info3_1week
author | Syusaku Morita <e105716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 27 Apr 2012 13:13:49 +0900 |
parents | |
children | 6b217e0f301c |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:fbb6f4f89f76 |
---|---|
1 function parseObj( url ) { | |
2 var http = new JKL.ParseXML( url ); | |
3 var data = http.parse()["OBJECT-3D"]; | |
4 var xmlObj = new Object(); | |
5 | |
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"]); | |
12 obj.model = splitVector(data["surface"][i]["model"]); | |
13 var xmlObjImage = data["surface"][i]["image"]; | |
14 obj.image = 'data:image/png;base64,'+xmlObjImage["#text"]; | |
15 } | |
16 } else { | |
17 var obj = xmlObj[data["surface"]["name"]] = new Object(); | |
18 obj.vertex = splitVector(data["surface"]["coordinate"]); | |
19 obj.normal = splitVector(data["surface"]["normal"]); | |
20 obj.texCoords = splitVector(data["surface"]["texture"]); | |
21 obj.model = splitVector(data["surface"]["model"]); | |
22 var xmlObjImage = data["surface"]["image"]; | |
23 obj.image = 'data:image/png;base64,'+xmlObjImage["#text"]; | |
24 } | |
25 | |
26 return xmlObj; | |
27 } | |
28 | |
29 function splitVector(str) { | |
30 // return str.replace(/^\s+/g, "").replace(/\s+/g, " ").split(" "); | |
31 return str.replace(/^\s+/g, "").replace(/\s+/g, " ").replace(/\s$/g, "").split(" "); | |
32 } | |
33 | |
34 function makeXmlObj(ctx, xmlObj) | |
35 { | |
36 | |
37 var model = new Object(); | |
38 model.x = parseFloat(xmlObj.model[0]); | |
39 model.y = parseFloat(xmlObj.model[1]); | |
40 model.z = parseFloat(xmlObj.model[2]); | |
41 | |
42 var geometryData = [ ]; | |
43 var normalData = [ ]; | |
44 var texCoordData = [ ]; | |
45 var indexData = [ ]; | |
46 var index = 0; | |
47 var xmax = 0; | |
48 var xmin = 0; | |
49 var ymax = 0; | |
50 var ymin = 0; | |
51 | |
52 | |
53 for(var i=0; xmlObj.vertex[i]; i+=3){ | |
54 geometryData.push(parseFloat(xmlObj.vertex[i]) - model.x); | |
55 geometryData.push(parseFloat(xmlObj.vertex[i+1]) - model.y); | |
56 geometryData.push(parseFloat(xmlObj.vertex[i+2]) - model.z); | |
57 if ( (i % 3) == 0) { | |
58 indexData.push(index); | |
59 index++; | |
60 } | |
61 //オブジェクトの最大・最小のx,y座標を求める | |
62 if ( i == 0) { | |
63 xmax = geometryData[0]; | |
64 xmin = geometryData[0]; | |
65 ymax = geometryData[1]; | |
66 ymin = geometryData[1]; | |
67 } | |
68 if ( i > 0 ){ | |
69 xmax = Math.max( xmax, geometryData[i]); | |
70 xmin = Math.min( xmin, geometryData[i]); | |
71 ymax = Math.max( ymax, geometryData[i+1]); | |
72 ymin = Math.min( ymin, geometryData[i+1]); | |
73 } | |
74 } | |
75 for(i=0; xmlObj.texCoords[i]; i++){ | |
76 texCoordData.push(parseFloat(xmlObj.texCoords[i])); | |
77 | |
78 } | |
79 for(i=0; xmlObj.normal[i]; i+=3){ | |
80 normalData.push(parseFloat(xmlObj.normal[i])); | |
81 normalData.push(parseFloat(xmlObj.normal[i+1])); | |
82 normalData.push(parseFloat(xmlObj.normal[i+2])); | |
83 } | |
84 | |
85 var retval = { }; | |
86 //オブジェクトの横幅,縦幅を求める | |
87 retval.w = xmax - xmin; | |
88 retval.h = ymax - ymin; | |
89 | |
90 retval.normalObject = ctx.createBuffer(); | |
91 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject); | |
92 ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW); | |
93 | |
94 retval.texCoordObject = ctx.createBuffer(); | |
95 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject); | |
96 ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW); | |
97 | |
98 retval.vertexObject = ctx.createBuffer(); | |
99 ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject); | |
100 ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW); | |
101 | |
102 retval.numIndices = indexData.length; | |
103 retval.indexObject = ctx.createBuffer(); | |
104 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject); | |
105 ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW); | |
106 | |
107 return retval; | |
108 } | |
109 | |
110 function makeOrthoPara(left, right, bottom, top) | |
111 { | |
112 return {left:left,right:right,bottom:bottom,top:top}; | |
113 } |