*
<input semantic="VERTEX" source="#ID2-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#ID2-mesh-normals" offset="1"/>
This tells you that for each vertex, you have 2 indices poking into the referenced sources. 0 0
is the first set, 1 1
is the second, 2 2
is the third. since your first polylist value is 3 (really, all of them are), that makes up your first triangle.
Now, those indices are going through the source accessor for the float array...
<accessor source="#ID2-mesh-normals-array" count="266" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
This tells you that to read the normal associated with an index, you have to stride the array by 3 elements, and each vector is made up of 3 floats (X, Y, Z). Note that stride does not have to be the number of elements in each vertex, though it is often the case.
So, to conclude that example, to read the index 2 of the normal array, you need to go read the elements indexed with X_index=index*stride=6, Y_index=X_index+1=7, Z_index=X_index+2=8
, to find the normal (X,Y,Z) = (-0.2561113 0 -0.8390759 -0.4953154)
And yes, this means that you have multiple indices per vertex, something that OpenGL does not support natively. See those various questions as reference material.
Rendering meshes with multiple indices
How to use different indices for tex coords array and vertex array using glDrawElements