Ah, well, it looks like the indices range can be larger than 64 then.
The length of this range is 19. The range starts at the 6233-th vertex.
I'll give an explanation of what my understanding is of the gdb-files. (might not be 100% correct):
Going with the above values as an example, they mean:
The 87 next indices starting at the 0-th one (87*3 values, one for each corner of a triangle), reference vertices from the 6233-th onward.
So let's say the first few index values starting at the (0*3)-th one are these:
10
8
15
10
11
9
The first 3 indices create a triangle consisting of the 6243-rd, the 6241-st, and the 6248-th vertices. (6233+10-0, 6233+8-0, 6233+15-0)
The next 3 indices create a triangle consisting of the 6243-rd. the 6244-th, and the 6242-nd vertices.
As long as the 0 <= index value < vrange_length(19 in this example), the calculation of the index of the vertex that the indexvalue references is simple: vrange_start+indexvalue-vrange_offset.
if not, the indexvalue references a vertex outside of the [vrange_start,vrange_length] offset.
Looking at sluicer's post now, I get confused again, as it looks like his definitions of vrange and irange are swapped.
I'm not so certain anymore, but I think the calculation of what vertex an indexvalue references is this:
check = indexvalue - vrange_offset
if (check >= vrange_length)
{
vertex = previous_vrange_start + (indexvalue - previous_vrange_offset)
}
else if (check < 0)
{
vertex = previous_vrange_start + indexvalue
}
else
{
vertex = vrange_start + (indexvalue - vrange_offset)
}
I hope you can make something of that, and that this information is even correct, because reading back on all this made me only more confused than before.
The above is also what my track viewer uses, and I believe it displays color-based gdbs correctly. (It screws up on normal-based gdbs, not sure why).