Guten Morgen!
Ich habe habe in Blender einen Würfel erstellt, dessen Pivot auf der Koordinate (1, 1, 1) ist (siehe Anhang). Der Würfel hat keine Rotation und die Skalierung bleibt bei 1. Die Rotationsmatrix, die hier nicht weiter relevant sein wird, ist somit (1, 0, 0, 0, 1, 0, 0, 0, 1).
Mithilfe eines Exporters wird eine Modelldatei für ein Computerspiel erstellt, die sich auslesen lässt, da sie nicht kompiliert wird.
Mir fiel dabei folgendes auf: Das Modell scheint über seine Vertices (Vertex) in der Modelldatei abgebildet zu werden. Dabei werden Hexadezimalzahlen verwendet. Beim IndexBuffer ist eine gewisse Logik erkennbar (ein Würfel hat acht Vertices und nachfolgender Block hat auch acht Unterblöcke), hier werden wohl anscheinend gewisse Vertex-Punkte einer Koordinate zugewiesen.
Es ist noch gut zu wissen, dass jeder der acht Blöcke vier Hexadezimalzahlen enthält. Das heißt, dass 0000 eine Zahl ist (in diesem Falle 0) und 0100 ebenso eine (256). Was ich mir hier allerdings nicht erschließen kann, ist, warum Zahlen wie 256 heraus kommen. Die achte Wurzel davon ist zwei. Soweit ich weiß, spielt die zwei bei den Zahlen eine Rolle, aber da bin ich nicht tief genug in der Materie drin. Der VertexBuffer irritiert mich dann noch mehr:
Spoiler anzeigen
"80BF" bspw. ergibt -32577, wo schon mal gar kein Wurzelziehen möglich ist und auch ohne Vorzeichen keine gerade Zahl heraus kommt, wenn irgendeine Wurzel gezogen wird. Fakt wird sein, dass der IndexBuffer einen direkten Zusammenhang mit dem VertexBuffer hat.
Meine Frage ist nun, ob es möglich ist, mithilfe der oben gegebenen Daten auf die Koordinaten der einzelnen Vertices zu kommen. Hat jemand vielleicht Ahnung von der Materie? Ich wusste nun auch nicht, ob das OffTopic ist, aber da es nicht viel mit Programmierung zutun hat, gehe ich mal davon aus, dass das Thema hier richtig angesiedelt ist.
Gruß Michael
Ich habe habe in Blender einen Würfel erstellt, dessen Pivot auf der Koordinate (1, 1, 1) ist (siehe Anhang). Der Würfel hat keine Rotation und die Skalierung bleibt bei 1. Die Rotationsmatrix, die hier nicht weiter relevant sein wird, ist somit (1, 0, 0, 0, 1, 0, 0, 0, 1).
Mithilfe eines Exporters wird eine Modelldatei für ein Computerspiel erstellt, die sich auslesen lässt, da sie nicht kompiliert wird.
Mir fiel dabei folgendes auf: Das Modell scheint über seine Vertices (Vertex) in der Modelldatei abgebildet zu werden. Dabei werden Hexadezimalzahlen verwendet. Beim IndexBuffer ist eine gewisse Logik erkennbar (ein Würfel hat acht Vertices und nachfolgender Block hat auch acht Unterblöcke), hier werden wohl anscheinend gewisse Vertex-Punkte einer Koordinate zugewiesen.
Es ist noch gut zu wissen, dass jeder der acht Blöcke vier Hexadezimalzahlen enthält. Das heißt, dass 0000 eine Zahl ist (in diesem Falle 0) und 0100 ebenso eine (256). Was ich mir hier allerdings nicht erschließen kann, ist, warum Zahlen wie 256 heraus kommen. Die achte Wurzel davon ist zwei. Soweit ich weiß, spielt die zwei bei den Zahlen eine Rolle, aber da bin ich nicht tief genug in der Materie drin. Der VertexBuffer irritiert mich dann noch mehr:
XML-Quellcode
- <d:blob d:size="768">010080BF010080BF FFFF7FBF000080BF 01000033FFFFFF32 ACAA2A3FACAA2A3F
- 000080BFFFFF7F3F 010080BF000080BF 01000033FFFFFF32 AFAAAA3EABAA2A3F
- 000080BFFFFF7FBF 0100803F000080BF 01000033FFFFFF32 ABAA2A3F0000803F
- 000080BF0100803F FFFF7F3F000080BF 01000033FFFFFF32 ADAAAA3EFFFF7F3F
- 000080BFFFFF7FBF 0100803F00000000 6921A2330000803F ABAAAA3EACAAAA3E
- 000080BF0100803F FFFF7F3F00000000 6921A2330000803F A8AA2A33AAAAAA3E
- 0000803FFFFF7FBF 0100803F00000000 6921A2330000803F A9AAAA3EAAAA2A3F
- 0000803F0100803F FFFF7F3F00000000 6921A2330000803F 00000000AAAA2A3F
- 0000803FFFFF7FBF 0100803F0000803F 0000000000000000 ADAAAA3EACAA2A3F
- 0000803F0100803F FFFF7F3F0000803F 0000000000000000 A9AA0A34AAAA2A3F
- 0000803F010080BF FFFF7FBF0000803F 0000000000000000 AAAAAA3E0000803F
- 0000803FFFFF7F3F 010080BF0000803F 0000000000000000 00000000FFFF7F3F
- 000080BFFFFF7F3F 010080BF00000000 6921A2B3000080BF ABAA2A3FAAAA2A3F
- 010080BF010080BF FFFF7FBF00000000 6921A2B3000080BF ACAA2A3FACAAAA3E
- 0000803FFFFF7F3F 010080BF00000000 6921A2B3000080BF ADAAAA3EAAAA2A3F
- 0000803F010080BF FFFF7FBF00000000 6921A2B3000080BF AFAAAA3EACAAAA3E
- 0000803F010080BF FFFF7FBF00000000 000080BF6921A233 ACAA2A3F0000803F
- 010080BF010080BF FFFF7FBF00000000 000080BF6921A233 0000803F0000803F
- 0000803FFFFF7FBF 0100803F00000000 000080BF6921A233 ACAA2A3FACAA2A3F
- 000080BFFFFF7FBF 0100803F00000000 000080BF6921A233 0000803FACAA2A3F
- 0000803F0100803F FFFF7F3F00000000 0000803F6921A2B3 A8AAAA3EAAAAAA3E
- 000080BF0100803F FFFF7F3F00000000 0000803F6921A2B3 A9AAAA3E00008033
- 0000803FFFFF7F3F 010080BF00000000 0000803F6921A2B3 00000000A8AAAA3E
- 000080BFFFFF7F3F 010080BF00000000 0000803F6921A2B3 5255553300008033</d:blob>
- </cHcVertexBufferDx>
"80BF" bspw. ergibt -32577, wo schon mal gar kein Wurzelziehen möglich ist und auch ohne Vorzeichen keine gerade Zahl heraus kommt, wenn irgendeine Wurzel gezogen wird. Fakt wird sein, dass der IndexBuffer einen direkten Zusammenhang mit dem VertexBuffer hat.
Meine Frage ist nun, ob es möglich ist, mithilfe der oben gegebenen Daten auf die Koordinaten der einzelnen Vertices zu kommen. Hat jemand vielleicht Ahnung von der Materie? Ich wusste nun auch nicht, ob das OffTopic ist, aber da es nicht viel mit Programmierung zutun hat, gehe ich mal davon aus, dass das Thema hier richtig angesiedelt ist.
Gruß Michael