Skip to content

Commit 5339216

Browse files
committed
Merge branch 'hotfix-5.1.2'
2 parents 6690c69 + a46e7e1 commit 5339216

File tree

13 files changed

+164
-87
lines changed

13 files changed

+164
-87
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "xml3d.js",
33
"description": "XML3D implementation based on JS and WebGL",
44
"homepage": "http://ww.xml3d.org",
5-
"version": "5.1.1",
5+
"version": "5.1.2",
66
"repository": {
77
"type": "git",
88
"url": "https://github.com/xml3d/xml3d.js"

src/init.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ function initXML3DElement(xml3dElement) {
9292
if(curXML3DInitElements.indexOf(xml3dElement) > -1)
9393
return;
9494

95+
// Make sure the xml3d element is still in the DOM
96+
var parent = xml3dElement.parentNode;
97+
while (parent && !Util.elementIs(parent, "body")) {
98+
parent = parent.parentNode;
99+
}
100+
if (!parent || !Util.elementIs(parent, "body")) {
101+
return;
102+
}
103+
95104
curXML3DInitElements.push(xml3dElement);
96105

97106
var debug = XML3D.debug.setup();

src/renderer/renderer/scene/constants.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ module.exports = {
99
LIGHT_VALUE_CHANGED: "light_value_changed",
1010
SCENE_SHAPE_CHANGED: "scene_shape_changed",
1111
SCENE_STRUCTURE_CHANGED: "scene_structure_changed",
12-
DRAWABLE_STATE_CHANGED: "drawable_state_changed"
12+
DRAWABLE_STATE_CHANGED: "drawable_state_changed",
13+
OPACITY_STATE_CHANGED: "opacity_state_changed"
1314

1415
}
1516
};

src/renderer/renderer/scene/renderobject.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@ XML3D.createClass(RenderObject, RenderNode, {
108108
result.updateTypeRequest();
109109
result.calculateBoundingBox();
110110
result.on(C.EVENT_TYPE.SCENE_SHAPE_CHANGED, function (evt) {
111-
that.scene.emit(C.EVENT_TYPE.SCENE_SHAPE_CHANGED)
112-
})
111+
that.scene.emit(C.EVENT_TYPE.SCENE_SHAPE_CHANGED);
112+
});
113+
result.on(C.EVENT_TYPE.OPACITY_STATE_CHANGED, function(oldValue, newValue) {
114+
that.override = that.override || {};
115+
that.override.opacity = newValue;
116+
});
113117
}
114118
return result;
115119
},
@@ -312,6 +316,9 @@ XML3D.createClass(RenderObject, RenderNode, {
312316
},
313317

314318
hasTransparency: function () {
319+
if (this.override && this.override.opacity !== undefined) {
320+
return this.override.opacity[0] < 1;
321+
}
315322
var program = this.getProgram();
316323
return program ? program.hasTransparency() : false;
317324
},

src/renderer/webgl/base/mesh.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ XML3D.extend(GLMesh.prototype, {
6161
this.minAttributeCount = -1;
6262
},
6363

64+
getUniformOverride: function(name) {
65+
return this.uniformOverride[name];
66+
},
67+
6468
setUniformOverride: function (name, value) {
6569
if (value === undefined)
6670
delete this.uniformOverride[name];

src/renderer/webgl/render-passes/pick-object.js

Lines changed: 62 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,68 +5,76 @@ var ObjectSorter = require("../../renderer/tools/objectsorter.js");
55
var PickObjectRenderPass = function (renderInterface, output, opt) {
66
BaseRenderPass.call(this, renderInterface, output, opt);
77
this.sorter = new ObjectSorter();
8+
this.objCount = 0;
89
};
910
XML3D.createClass(PickObjectRenderPass, BaseRenderPass);
1011

1112
XML3D.extend(PickObjectRenderPass.prototype, {
12-
render: (function () {
13+
render: function (objects, viewMatrix, projMatrix) {
14+
var gl = this.renderInterface.context.gl, target = this.output;
15+
target.bind();
16+
var sortedObjects = this.sorter.sortObjects(objects, viewMatrix);
17+
this.objCount = 0;
18+
19+
gl.enable(gl.DEPTH_TEST);
20+
gl.disable(gl.CULL_FACE);
21+
gl.disable(gl.BLEND);
22+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
23+
24+
var program = this.renderInterface.context.programFactory.getPickingObjectIdProgram();
25+
program.bind();
26+
for (var j = 0, n = sortedObjects.zLayers.length; j < n; j++) {
27+
var zLayer = sortedObjects.zLayers[j];
28+
gl.clear(gl.DEPTH_BUFFER_BIT);
29+
if (sortedObjects.opaque[zLayer]) {
30+
for (var prg in sortedObjects.opaque[zLayer]) {
31+
this.renderObjects(sortedObjects.opaque[zLayer][prg], program, viewMatrix, projMatrix);
32+
}
33+
}
34+
if (sortedObjects.transparent[zLayer]) {
35+
this.renderObjects(sortedObjects.transparent[zLayer], program, viewMatrix, projMatrix);
36+
}
37+
}
38+
program.unbind();
39+
target.unbind();
40+
},
41+
42+
renderObjects: (function () {
1343
var c_mvp = mat4.create(), c_uniformCollection = {
14-
envBase: {},
15-
envOverride: null,
16-
sysBase: {}
17-
}, c_systemUniformNames = ["id", "modelViewProjectionMatrix"];
18-
19-
return function (objects, viewMatrix, projMatrix) {
20-
var gl = this.renderInterface.context.gl, target = this.output;
21-
target.bind();
22-
var sortedObjects = this.sorter.sortObjects(objects, viewMatrix);
23-
24-
gl.enable(gl.DEPTH_TEST);
25-
gl.disable(gl.CULL_FACE);
26-
gl.disable(gl.BLEND);
27-
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
28-
29-
var program = this.renderInterface.context.programFactory.getPickingObjectIdProgram();
30-
program.bind();
31-
var objCount = 0;
32-
for (var j = 0, n = sortedObjects.zLayers.length; j < n; j++) {
33-
var zLayer = sortedObjects.zLayers[j];
34-
gl.clear(gl.DEPTH_BUFFER_BIT);
35-
for (var ind in sortedObjects.opaque[zLayer]) {
36-
var objs = sortedObjects.opaque[zLayer][ind];
37-
for (var i=0; i < objs.length; i++) {
38-
var obj = objs[i];
39-
var mesh = obj.mesh;
40-
41-
if (!obj.visible)
42-
continue;
43-
44-
if (viewMatrix && projMatrix) {
45-
obj.updateModelViewMatrix(viewMatrix);
46-
obj.updateModelViewProjectionMatrix(projMatrix);
47-
}
48-
49-
obj.getModelViewProjectionMatrix(c_mvp);
50-
51-
var objId = ++objCount;
52-
obj.pickId = objId;
53-
var c1 = objId & 255;
54-
objId = objId >> 8;
55-
var c2 = objId & 255;
56-
objId = objId >> 8;
57-
var c3 = objId & 255;
58-
59-
c_uniformCollection.sysBase["id"] = [c3 / 255.0, c2 / 255.0, c1 / 255.0];
60-
c_uniformCollection.sysBase["modelViewProjectionMatrix"] = c_mvp;
61-
62-
program.setUniformVariables(null, c_systemUniformNames, c_uniformCollection);
63-
mesh.draw(program);
64-
}
44+
envBase: {},
45+
envOverride: null,
46+
sysBase: {}
47+
}, c_systemUniformNames = ["id", "modelViewProjectionMatrix"];
48+
49+
return function (objects, program, viewMatrix, projMatrix) {
50+
for (var i=0; i < objects.length; i++) {
51+
var obj = objects[i];
52+
var mesh = obj.mesh;
53+
54+
if (!obj.visible)
55+
continue;
56+
57+
if (viewMatrix && projMatrix) {
58+
obj.updateModelViewMatrix(viewMatrix);
59+
obj.updateModelViewProjectionMatrix(projMatrix);
6560
}
6661

62+
obj.getModelViewProjectionMatrix(c_mvp);
63+
64+
var objId = ++this.objCount;
65+
obj.pickId = objId;
66+
var c1 = objId & 255;
67+
objId = objId >> 8;
68+
var c2 = objId & 255;
69+
objId = objId >> 8;
70+
var c3 = objId & 255;
71+
72+
c_uniformCollection.sysBase["id"] = [c3 / 255.0, c2 / 255.0, c1 / 255.0];
73+
c_uniformCollection.sysBase["modelViewProjectionMatrix"] = c_mvp;
74+
75+
program.setUniformVariables(null, c_systemUniformNames, c_uniformCollection);
76+
mesh.draw(program);
6777
}
68-
program.unbind();
69-
target.unbind();
7078
};
7179
}()),
7280

src/renderer/webgl/xflow/xflow-mesh.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -338,21 +338,14 @@ XML3D.createClass(XflowMesh, DrawableClosure, {
338338
this.mesh.setIndexRange(webglData.minIndex, webglData.maxIndex);
339339
},
340340

341-
/*checkBufferSize: function(name, xflowDataEntry){
342-
if(xflowDataEntry.getIterateCount){
343-
var cnt = xflowDataEntry.getIterateCount();
344-
if(cnt >= this.mesh.maxIndex)
345-
throw new Error("Index range of [" + this.mesh.minIndex + ", " + this.mesh.maxIndex + "] " +
346-
" goes beyond element count " + cnt + " of attribute '" + name + "'");
347-
}
348-
},*/
349-
350341
handleUniform: function (name, xflowDataEntry) {
351342
var value = XflowUtils.getGLUniformValueFromXflowDataEntry(xflowDataEntry, this.context);
343+
if (name === 'opacity') {
344+
this.emit(EVENT_TYPE.OPACITY_STATE_CHANGED, this.mesh.getUniformOverride(name), value);
345+
}
352346
this.mesh.setUniformOverride(name, value);
353-
}, /**
354-
*
355-
*/
347+
},
348+
356349
updateTypeRequest: function () {
357350
var requestNames = this.getTypeRequestNames(MESH_PARAMETERS);
358351

tests/qunit/xml3d-config.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -275,14 +275,6 @@ function displayMousePosition(e) {
275275
}
276276
}
277277

278-
function displayMousePosition(e) {
279-
console.log(e.clientX + ", " + e.clientY);
280-
var pointerPosElement = document.getElementById("pointerPosElement");
281-
if (pointerPosElement) {
282-
pointerPosElement.textContent = "GLCoords: "+ e.clientX+", "+ (this.height - e.clientY);
283-
}
284-
}
285-
286278
function promiseOneSceneCompleteAndRendered(xml3dElement) {
287279
if(xml3dElement.complete) {
288280
return Q(xml3dElement);

tests/scenes/webgl-picking.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@
2222
<transform id="t9" translation="-1 0 -10" rotation="0 1 0 1.57"></transform>
2323
<transform id="t10" translation="-4.5 0 -9"></transform>
2424
<transform id="t11" translation="0 0 -1"></transform>
25+
<transform id="t12" translation="2.5 0 -10"></transform>
2526

27+
<material id="material_transparent" model="urn:xml3d:material:diffuse">
28+
<float3 name="diffuseColor">1 0.2 0.3</float3>
29+
<float name="ambientIntensity">0.8</float>
30+
<float name="opacity">0.1</float>
31+
</material>
2632
<material id="material_diffuse" model="urn:xml3d:material:diffuse">
2733
<float3 name="diffuseColor">1 0.2 0.3</float3>
2834
<float name="ambientIntensity">0.8</float>
@@ -114,6 +120,9 @@
114120
<group material="#material_phong_texture" transform="#t5">
115121
<mesh id="pickingMesh5" src="#mySimpleMesh"></mesh>
116122
</group>
123+
<group material="#material_transparent" transform="#t12">
124+
<mesh id="pickingMesh12" src="#mySimpleMesh"></mesh>
125+
</group>
117126
</group>
118127
<group id="many" material="#material_diffuse">
119128
<mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh><mesh src="#mySimpleMesh"></mesh>

0 commit comments

Comments
 (0)