For great justice!
I've been tinkering with these triangles like an apologist for Ptolemy's model of the universe, adding circles within circles and wondering why the hell things weren't working out 100% of the time. Then the spirit of Copernicus must have come upon me and showed me that simplicity rules after all.
The triangle pointers can be understood as follows:
Rule for Positive Pointers (hex)*If you're in the first column, divide the byte pair value by 0x8. This value is the vertex index.
*If you're in one of the last two columns, divide the byte pair value by 0x2, then by 0x8. This value is the vertex index.
Rule for Negative Pointers (dec)*If you're in the first column, divide the byte pair value by 8. Go backward that number of positions into the non-UV data.
*If you're in one of the last two columns, divide the byte pair value by 16. Go backward that number of positions into the non-UV data.
*Switch pointers such that the first UV coordinate gets the second pointer; the second UV coordinate gets the third pointer; the third UV coordinate gets the first pointer. The pointers retain the division properties they had in their original positions.We've known this much for the past week or so. The
new news is, even though there's only three pointer "slots" in the triangle non-UV data,
the fourth "slot" is still there for purposes of negative pointing!So let's see how this works. Here's the data from those 12 triangles in Section 1-2 I've previously rattled on about; the non-UV pointer columns have been re-ordered so that they correspond directly to the UV coordinates:
2658 69 EC 67 FB 5D EB 50 20 D0 21 08 10
2664 5A EF 5D EB 56 F9 70 22 D0 FF 50 11
2670 51 D9 3B DB 4B D6 90 21 00 21 D8 10
267C 3B DB 33 DC 37 D7 D0 FF F0 20 E0 10
2688 33 DC 33 D7 37 D7 D0 FF A0 21 E0 FF
2694 3B DB 37 D7 3C D7 80 FF D0 FF A0 FF
26A0 6A D9 6E D6 7F DA 60 21 20 21 70 10
26AC 47 DC 36 D5 32 DA E0 FF 30 21 68 10
26B8 32 DA 36 D5 33 D7 E0 FF C0 FF A0 10
26C4 47 DC 3A D5 36 D5 80 FF 40 FF D8 FF
26D0 30 DB 24 D7 2A D7 80 FE 80 21 38 FF
26DC 31 DA 2B D6 25 D6 40 FF 50 FF B8 10
We'll run through the triangle @ address 0x2694:
0x
FF80 = -128, /16 (because it was once in the second column) = 8 slots back. Add an imaginary fourth column and this leads to address 0x2682, value 0x
FFD0. 0xFFD0 = -48, /16 = 3 positions back. With the imaginary fourth column, this leads to address 0x2679, value 0x
2100.0x
FFD0 = -48, /16 (because it was once in the third column) = 3 slots back. Add the imaginary column and this leads to address 0x2692, value 0x
FFE0. 0xFFE0 = -32, /8 (because it was once in the first column) = 4 slots back. With the imaginary fourth column, this leads to address 0x2686, value 0x
10E0.
0x
FFA0 = -96, /8 (because it was once in the first column) = 12 slots back. Add the imaginary columns and this leads to address 0x267A, value 0x
10D8.
Suffice it to say I've tested these values to ensure that this scheme accurately describes the behavior of the negative pointers. But rather than flood this post with pics of Serge's battle model in various states of intact-ness, I'll end with some awesome artwork I found on my hard drive.
PS: Luminaire, to answer a question you asked earlier, it does seem that the quad and triangle sections are self-contained as far as negative pointers are concerned; once you cross the boundary from triangles to quads and vice-versa, the negative pointers will not go back beyond that boundary.
Once I get the quad and triangle pointers in the wiki, it's time to hunt for bone data.
[attachment deleted by admin]