Skip to main content
Tweeted twitter.com/#!/StackReverseEng/status/473854742678876160
Spellchecking
Source Link
perror
  • 19.2k
  • 29
  • 87
  • 150

I'm analyzing an rather ancient 3D mesh format (from 1995 or 1996). Inside the files, there are blocks of what I think are vertices.

For example, the following is a direct hex dump from such a part:

7855DAFF 5BE60E00 353D0200 C82D0B00 5BE60E00 353D0200 C82D0B00 5BE60E00 B61AEDFF 7855DAFF 5BE60E00 B61AEDFF 7855DAFF 59D2FDFF 363D0200 C82D0B00 59D2FDFF 363D0200 C82D0B00 59D2FDFF B61AEDFF 7855DAFF 59D2FDFF B61AEDFF

7855DAFF
5BE60E00
353D0200
C82D0B00
5BE60E00
353D0200
C82D0B00
5BE60E00
B61AEDFF
7855DAFF
5BE60E00
B61AEDFF
7855DAFF
59D2FDFF
363D0200
C82D0B00
59D2FDFF
363D0200
C82D0B00
59D2FDFF
B61AEDFF
7855DAFF
59D2FDFF
B61AEDFF

These blocks are introduced by a little header, which has a value that could be the number of vertices that are present in the corresponding data block. For this excerpt, there is a 0x080x08. Since we have 24 values of 32bit, I think it is safe to assume that these blocks are actual vertices (0x08 * 3 = 240x08 * 3 = 24, with xyzxyz). Other headers also have this value and their data blocks also have the exact number of dwords ([value in header] * 3 => number of dwordsdwords ([value in header] * 3 => number of dwords).

But, now I'm struggling at deciphering the number format that was used. It isn't IEEE754; a friend of mine also pointed out that the hardware that was used these days didn't perform well with floating-point numbers and therefore often fixed-point numbers where used.

So, any idea what kind of format this could be  ? Thank you!

I'm analyzing an rather ancient 3D mesh format (from 1995 or 1996). Inside the files, there are blocks of what I think are vertices.

For example, the following is a direct hex dump from such a part:

7855DAFF 5BE60E00 353D0200 C82D0B00 5BE60E00 353D0200 C82D0B00 5BE60E00 B61AEDFF 7855DAFF 5BE60E00 B61AEDFF 7855DAFF 59D2FDFF 363D0200 C82D0B00 59D2FDFF 363D0200 C82D0B00 59D2FDFF B61AEDFF 7855DAFF 59D2FDFF B61AEDFF

These blocks are introduced by a little header, which has a value that could be the number of vertices that are present in the corresponding data block. For this excerpt, there is a 0x08. Since we have 24 values of 32bit, I think it is safe to assume that these blocks are actual vertices (0x08 * 3 = 24, with xyz). Other headers also have this value and their data blocks also have the exact number of dwords ([value in header] * 3 => number of dwords).

But now I'm struggling at deciphering the number format that was used. It isn't IEEE754; a friend of mine also pointed out that the hardware that was used these days didn't perform well with floating-point numbers and therefore often fixed-point numbers where used.

So, any idea what kind of format this could be? Thank you!

I'm analyzing an rather ancient 3D mesh format (from 1995 or 1996). Inside the files, there are blocks of what I think are vertices.

For example, the following is a direct hex dump from such a part:

7855DAFF
5BE60E00
353D0200
C82D0B00
5BE60E00
353D0200
C82D0B00
5BE60E00
B61AEDFF
7855DAFF
5BE60E00
B61AEDFF
7855DAFF
59D2FDFF
363D0200
C82D0B00
59D2FDFF
363D0200
C82D0B00
59D2FDFF
B61AEDFF
7855DAFF
59D2FDFF
B61AEDFF

These blocks are introduced by a little header, which has a value that could be the number of vertices that are present in the corresponding data block. For this excerpt, there is a 0x08. Since we have 24 values of 32bit, I think it is safe to assume that these blocks are actual vertices (0x08 * 3 = 24, with xyz). Other headers also have this value and their data blocks also have the exact number of dwords ([value in header] * 3 => number of dwords).

But, now I'm struggling at deciphering the number format that was used. It isn't IEEE754; a friend of mine also pointed out that the hardware that was used these days didn't perform well with floating-point numbers and therefore often fixed-point numbers where used.

So, any idea what kind of format this could be  ?

Source Link

Ancient number formats (probably fixed-point)

I'm analyzing an rather ancient 3D mesh format (from 1995 or 1996). Inside the files, there are blocks of what I think are vertices.

For example, the following is a direct hex dump from such a part:

7855DAFF 5BE60E00 353D0200 C82D0B00 5BE60E00 353D0200 C82D0B00 5BE60E00 B61AEDFF 7855DAFF 5BE60E00 B61AEDFF 7855DAFF 59D2FDFF 363D0200 C82D0B00 59D2FDFF 363D0200 C82D0B00 59D2FDFF B61AEDFF 7855DAFF 59D2FDFF B61AEDFF

These blocks are introduced by a little header, which has a value that could be the number of vertices that are present in the corresponding data block. For this excerpt, there is a 0x08. Since we have 24 values of 32bit, I think it is safe to assume that these blocks are actual vertices (0x08 * 3 = 24, with xyz). Other headers also have this value and their data blocks also have the exact number of dwords ([value in header] * 3 => number of dwords).

But now I'm struggling at deciphering the number format that was used. It isn't IEEE754; a friend of mine also pointed out that the hardware that was used these days didn't perform well with floating-point numbers and therefore often fixed-point numbers where used.

So, any idea what kind of format this could be? Thank you!