Rendering of a complex .dae file

Hi All,
I have been working on rendering of .dae files (XNA engine) by extracting .kmz files exported from Google Sketchup ver 6 and 7.

To accomplish this, processing data from <library_materials>, <library_effects> and <library_geometries> xml sections of a .dae file were sufficient to render a basic 3D model and <library_nodes>, <library_cameras> and <library_visual_scenes> have been ignored completely.

Question:
I have come across a google sketchup exported complex .kmz for which the .dae file does not render properly. It has been observed that .dae file contained child nodes <node><node> (groups) which refer to the meshes under <library_geometries>.

  1. How do we deal with the child nodes for rendering a basic 3D Model?
  2. Is there any relation between child node groups and mesh formation? Anything like repeated meshes for a group?

Your suggestions would be much appreciated.

Thanks
Harshal


Harshal Shah
Module Lead
Fugro Survey (India) Pvt. Ltd.
Fugro Intersite India SDC
Fugro House, D-222/30, TTC Industrial Area,
MIDC, Nerul, Navi Mumbai, Maharashtra, India, 400706.
+91 22 2762-9736 (Direct)
+91 9819737696 (Mobile)
+91 22 27688282 (Fax)


Can you post an example of the .dae content that is exported?

Hi All,

Please find below the xml node segments that contained parent/child node relationship.
Please suggest your ideas on rendering model file accordingly.

          &lt;node id="Group14" name="Group14"&gt;
              &lt;node id="mesh148" name="mesh148"&gt;
                 &lt;instance_geometry url="#mesh148-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_17_0" target="#material_17_0ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh149" name="mesh149"&gt;
                 &lt;instance_geometry url="#mesh149-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_17_0" target="#material_17_0ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh150" name="mesh150"&gt;
                 &lt;instance_geometry url="#mesh150-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_0_0" target="#material_0_0ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
           &lt;/node&gt;
           &lt;node id="Group15" name="Group15"&gt;
              &lt;node id="mesh151" name="mesh151"&gt;
                 &lt;instance_geometry url="#mesh151-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_17_0" target="#material_17_0ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh152" name="mesh152"&gt;
                 &lt;instance_geometry url="#mesh152-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_17_0" target="#material_17_0ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh153" name="mesh153"&gt;
                 &lt;instance_geometry url="#mesh153-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_0_0" target="#material_0_0ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
           &lt;/node&gt;
           &lt;node id="Group16" name="Group16"&gt;
           &lt;/node&gt;
           &lt;node id="Group17" name="Group17"&gt;
              &lt;node id="mesh154" name="mesh154"&gt;
                 &lt;instance_geometry url="#mesh154-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_18_8" target="#material_18_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh155" name="mesh155"&gt;
                 &lt;instance_geometry url="#mesh155-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh156" name="mesh156"&gt;
                 &lt;instance_geometry url="#mesh156-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh157" name="mesh157"&gt;
                 &lt;instance_geometry url="#mesh157-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh158" name="mesh158"&gt;
                 &lt;instance_geometry url="#mesh158-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh159" name="mesh159"&gt;
                 &lt;instance_geometry url="#mesh159-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh160" name="mesh160"&gt;
                 &lt;instance_geometry url="#mesh160-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_18_8" target="#material_18_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh161" name="mesh161"&gt;
                 &lt;instance_geometry url="#mesh161-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh162" name="mesh162"&gt;
                 &lt;instance_geometry url="#mesh162-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh163" name="mesh163"&gt;
                 &lt;instance_geometry url="#mesh163-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh164" name="mesh164"&gt;
                 &lt;instance_geometry url="#mesh164-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_19_8" target="#material_19_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh165" name="mesh165"&gt;
                 &lt;instance_geometry url="#mesh165-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_18_8" target="#material_18_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
              &lt;node id="mesh166" name="mesh166"&gt;
                 &lt;instance_geometry url="#mesh166-geometry"&gt;
                    &lt;bind_material&gt;
                       &lt;technique_common&gt;
                          &lt;instance_material symbol="material_18_8" target="#material_18_8ID"/&gt;
                       &lt;/technique_common&gt;
                    &lt;/bind_material&gt;
                 &lt;/instance_geometry&gt;
              &lt;/node&gt;
           &lt;/node&gt;
           &lt;node id="Group18" name="Group18"&gt;
              &lt;node id="Group19" name="Group19"&gt;
                 &lt;node id="mesh167" name="mesh167"&gt;
                    &lt;instance_geometry url="#mesh167-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_20_0" target="#material_20_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh168" name="mesh168"&gt;
                    &lt;instance_geometry url="#mesh168-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_20_0" target="#material_20_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh169" name="mesh169"&gt;
                    &lt;instance_geometry url="#mesh169-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh170" name="mesh170"&gt;
                    &lt;instance_geometry url="#mesh170-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh171" name="mesh171"&gt;
                    &lt;instance_geometry url="#mesh171-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh172" name="mesh172"&gt;
                    &lt;instance_geometry url="#mesh172-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh173" name="mesh173"&gt;
                    &lt;instance_geometry url="#mesh173-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh174" name="mesh174"&gt;
                    &lt;instance_geometry url="#mesh174-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh175" name="mesh175"&gt;
                    &lt;instance_geometry url="#mesh175-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh176" name="mesh176"&gt;
                    &lt;instance_geometry url="#mesh176-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh177" name="mesh177"&gt;
                    &lt;instance_geometry url="#mesh177-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh178" name="mesh178"&gt;
                    &lt;instance_geometry url="#mesh178-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
              &lt;/node&gt;
              &lt;node id="Group20" name="Group20"&gt;
                 &lt;node id="mesh179" name="mesh179"&gt;
                    &lt;instance_geometry url="#mesh179-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_20_0" target="#material_20_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh180" name="mesh180"&gt;
                    &lt;instance_geometry url="#mesh180-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_20_0" target="#material_20_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh181" name="mesh181"&gt;
                    &lt;instance_geometry url="#mesh181-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh182" name="mesh182"&gt;
                    &lt;instance_geometry url="#mesh182-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh183" name="mesh183"&gt;
                    &lt;instance_geometry url="#mesh183-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh184" name="mesh184"&gt;
                    &lt;instance_geometry url="#mesh184-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh185" name="mesh185"&gt;
                    &lt;instance_geometry url="#mesh185-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh186" name="mesh186"&gt;
                    &lt;instance_geometry url="#mesh186-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh187" name="mesh187"&gt;
                    &lt;instance_geometry url="#mesh187-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh188" name="mesh188"&gt;
                    &lt;instance_geometry url="#mesh188-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh189" name="mesh189"&gt;
                    &lt;instance_geometry url="#mesh189-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
                 &lt;node id="mesh190" name="mesh190"&gt;
                    &lt;instance_geometry url="#mesh190-geometry"&gt;
                       &lt;bind_material&gt;
                          &lt;technique_common&gt;
                             &lt;instance_material symbol="material_21_0" target="#material_21_0ID"/&gt;
                          &lt;/technique_common&gt;
                       &lt;/bind_material&gt;
                    &lt;/instance_geometry&gt;
                 &lt;/node&gt;
              &lt;/node&gt;
           &lt;/node&gt;

Regards
Harshal

You can’t ignore the visual scene since that is where COLLADA describes the the scene that is rendered. By ignoring that you are ignoring the placement of geometry in the world coordinate system.

The <scene> element describes the default (visual, kinematic,physics) scene to instantiate.

Starting with a <visual_scene>, default is from <scene>, concatenate node local coordinate systems and instantiate geometry, lights, cameras, and nodes in the respective local coordinate systems.

Nodes are local coordinate systems (places) and geometry is instantiated there. A child node coordinate system is transformed by its parent node’s coordinate system. The <visual_scene> contains the root node of the transform hierarchy. There are no controls or flags that affect mesh vertices or primitives.