VertexBuffer auslesen

  • Allgemein

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von φConst.

    VertexBuffer auslesen

    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.

    Spoiler anzeigen

    XML-Quellcode

    1. <NumIndices d:type="sUInt32">34</NumIndices>
    2. <BytesPerIndex d:type="sUInt8">2</BytesPerIndex>
    3. <d:blob d:size="68">0000010002000300 0300040004000500 0600070007000800 080009000A000B00
    4. 0B000C000C000D00 0E000F000F001000 1000110012001300 1300140014001500
    5. 16001700</d:blob>


    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

    XML-Quellcode

    1. <d:blob d:size="768">010080BF010080BF FFFF7FBF000080BF 01000033FFFFFF32 ACAA2A3FACAA2A3F
    2. 000080BFFFFF7F3F 010080BF000080BF 01000033FFFFFF32 AFAAAA3EABAA2A3F
    3. 000080BFFFFF7FBF 0100803F000080BF 01000033FFFFFF32 ABAA2A3F0000803F
    4. 000080BF0100803F FFFF7F3F000080BF 01000033FFFFFF32 ADAAAA3EFFFF7F3F
    5. 000080BFFFFF7FBF 0100803F00000000 6921A2330000803F ABAAAA3EACAAAA3E
    6. 000080BF0100803F FFFF7F3F00000000 6921A2330000803F A8AA2A33AAAAAA3E
    7. 0000803FFFFF7FBF 0100803F00000000 6921A2330000803F A9AAAA3EAAAA2A3F
    8. 0000803F0100803F FFFF7F3F00000000 6921A2330000803F 00000000AAAA2A3F
    9. 0000803FFFFF7FBF 0100803F0000803F 0000000000000000 ADAAAA3EACAA2A3F
    10. 0000803F0100803F FFFF7F3F0000803F 0000000000000000 A9AA0A34AAAA2A3F
    11. 0000803F010080BF FFFF7FBF0000803F 0000000000000000 AAAAAA3E0000803F
    12. 0000803FFFFF7F3F 010080BF0000803F 0000000000000000 00000000FFFF7F3F
    13. 000080BFFFFF7F3F 010080BF00000000 6921A2B3000080BF ABAA2A3FAAAA2A3F
    14. 010080BF010080BF FFFF7FBF00000000 6921A2B3000080BF ACAA2A3FACAAAA3E
    15. 0000803FFFFF7F3F 010080BF00000000 6921A2B3000080BF ADAAAA3EAAAA2A3F
    16. 0000803F010080BF FFFF7FBF00000000 6921A2B3000080BF AFAAAA3EACAAAA3E
    17. 0000803F010080BF FFFF7FBF00000000 000080BF6921A233 ACAA2A3F0000803F
    18. 010080BF010080BF FFFF7FBF00000000 000080BF6921A233 0000803F0000803F
    19. 0000803FFFFF7FBF 0100803F00000000 000080BF6921A233 ACAA2A3FACAA2A3F
    20. 000080BFFFFF7FBF 0100803F00000000 000080BF6921A233 0000803FACAA2A3F
    21. 0000803F0100803F FFFF7F3F00000000 0000803F6921A2B3 A8AAAA3EAAAAAA3E
    22. 000080BF0100803F FFFF7F3F00000000 0000803F6921A2B3 A9AAAA3E00008033
    23. 0000803FFFFF7F3F 010080BF00000000 0000803F6921A2B3 00000000A8AAAA3E
    24. 000080BFFFFF7F3F 010080BF00000000 0000803F6921A2B3 5255553300008033</d:blob>
    25. </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
    Bilder
    • Unbenannt.png

      215,36 kB, 3.381×1.120, 74 mal angesehen
    Soweit ich das zu überschauen vermag,
    das:

    XML-Quellcode

    1. <NumIndices d:type="sUInt32">34</NumIndices>
    2. <BytesPerIndex d:type="sUInt8">2</BytesPerIndex>
    3. <d:blob d:size="68">0000010002000300 0300040004000500 0600070007000800 080009000A000B00
    4. 0B000C000C000D00 0E000F000F001000 1000110012001300 1300140014001500
    5. 16001700</d:blob>


    ist folgendermaßen strukturiert; sagen wir 0000010002000300 - das konvertierst du in seine Binärdarstellung:
    10000000000000010000000000000001100000000
    und bildest 2*8-er-Komplemente:
    0000000100000000 0000001000000000 0000001100000000

    Verschieben wir jeweils ein Komplement 8 Bits nach rechts erhalten wir:
    00000001 - 1
    00000010 - 2
    00000011 - 3

    ... hier werden also - auf die Schnelle geraten - die Indices (im Sinne der Topologie) angegeben, aber die Topologie irgendwie noch nicht beschrieben.
    (Um ehrlich zu sein: Kann man ja direkt ablesen: 0000010002000300 - wollte das aber im Bezug auf die 2-Bytes verdeutlichen.)

    Bezüglich:
    Spoiler anzeigen

    XML-Quellcode

    1. <d:blob d:size="768">010080BF010080BF FFFF7FBF000080BF 01000033FFFFFF32 ACAA2A3FACAA2A3F
    2. 000080BFFFFF7F3F 010080BF000080BF 01000033FFFFFF32 AFAAAA3EABAA2A3F
    3. 000080BFFFFF7FBF 0100803F000080BF 01000033FFFFFF32 ABAA2A3F0000803F
    4. 000080BF0100803F FFFF7F3F000080BF 01000033FFFFFF32 ADAAAA3EFFFF7F3F
    5. 000080BFFFFF7FBF 0100803F00000000 6921A2330000803F ABAAAA3EACAAAA3E
    6. 000080BF0100803F FFFF7F3F00000000 6921A2330000803F A8AA2A33AAAAAA3E
    7. 0000803FFFFF7FBF 0100803F00000000 6921A2330000803F A9AAAA3EAAAA2A3F
    8. 0000803F0100803F FFFF7F3F00000000 6921A2330000803F 00000000AAAA2A3F
    9. 0000803FFFFF7FBF 0100803F0000803F 0000000000000000 ADAAAA3EACAA2A3F
    10. 0000803F0100803F FFFF7F3F0000803F 0000000000000000 A9AA0A34AAAA2A3F
    11. 0000803F010080BF FFFF7FBF0000803F 0000000000000000 AAAAAA3E0000803F
    12. 0000803FFFFF7F3F 010080BF0000803F 0000000000000000 00000000FFFF7F3F
    13. 000080BFFFFF7F3F 010080BF00000000 6921A2B3000080BF ABAA2A3FAAAA2A3F
    14. 010080BF010080BF FFFF7FBF00000000 6921A2B3000080BF ACAA2A3FACAAAA3E
    15. 0000803FFFFF7F3F 010080BF00000000 6921A2B3000080BF ADAAAA3EAAAA2A3F
    16. 0000803F010080BF FFFF7FBF00000000 6921A2B3000080BF AFAAAA3EACAAAA3E
    17. 0000803F010080BF FFFF7FBF00000000 000080BF6921A233 ACAA2A3F0000803F
    18. 010080BF010080BF FFFF7FBF00000000 000080BF6921A233 0000803F0000803F
    19. 0000803FFFFF7FBF 0100803F00000000 000080BF6921A233 ACAA2A3FACAA2A3F
    20. 000080BFFFFF7FBF 0100803F00000000 000080BF6921A233 0000803FACAA2A3F
    21. 0000803F0100803F FFFF7F3F00000000 0000803F6921A2B3 A8AAAA3EAAAAAA3E
    22. 000080BF0100803F FFFF7F3F00000000 0000803F6921A2B3 A9AAAA3E00008033
    23. 0000803FFFFF7F3F 010080BF00000000 0000803F6921A2B3 00000000A8AAAA3E
    24. 000080BFFFFF7F3F 010080BF00000000 0000803F6921A2B3 5255553300008033</d:blob>
    25. </cHcVertexBufferDx>


    Wahrscheinlich sind hier a) die Koordinaten der Vertices, b) die der Normalen, c) der Texture-Koordinaten enthalten. Ohne genau zu wissen welches Format du verwendest, kann man halt nur
    das in seine Binärdarstellung überführen und dann versuchen daraus schlau zu werden.

    Wie gesagt: Was ich hier schreibe sind reine Vermutungen - finde, du könntest einfach mal das Modell hier hochladen, statt nur Fetzen seines Formats.
    _
    Und Gott alleine weiß alles am allerbesten und besser.
    Nein, ich bin mir sicher, dass du mit deiner Vermutung recht hast, denn gerade wo ich das mit Koordinaten der Vertices, Normalen und Textur lese, fällt mir ein, dass in der Datei noch das hier steht:

    Spoiler anzeigen

    XML-Quellcode

    1. <Element>
    2. <cHcVertexTypeDeclarationDx-cElementDecl>
    3. <UsageIndex d:type="sUInt32">0</UsageIndex>
    4. <Usage d:type="cDeltaString">D3DDECLUSAGE_POSITION</Usage>
    5. <Type d:type="cDeltaString">D3DDECLTYPE_FLOAT3</Type>
    6. <StreamIndex d:type="sUInt32">0</StreamIndex>
    7. </cHcVertexTypeDeclarationDx-cElementDecl>
    8. <cHcVertexTypeDeclarationDx-cElementDecl>
    9. <UsageIndex d:type="sUInt32">0</UsageIndex>
    10. <Usage d:type="cDeltaString">D3DDECLUSAGE_NORMAL</Usage>
    11. <Type d:type="cDeltaString">D3DDECLTYPE_FLOAT3</Type>
    12. <StreamIndex d:type="sUInt32">0</StreamIndex>
    13. </cHcVertexTypeDeclarationDx-cElementDecl>
    14. <cHcVertexTypeDeclarationDx-cElementDecl>
    15. <UsageIndex d:type="sUInt32">0</UsageIndex>
    16. <Usage d:type="cDeltaString">D3DDECLUSAGE_TEXCOORD</Usage>
    17. <Type d:type="cDeltaString">D3DDECLTYPE_FLOAT2</Type>
    18. <StreamIndex d:type="sUInt32">0</StreamIndex>
    19. </cHcVertexTypeDeclarationDx-cElementDecl>
    20. </Element>



    Das wäre die gesamte Datei:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <cHcGeometry xmlns:d="http://www.kuju.com/TnT/2003/Delta" d:version="1.0" d:id="36808336">
    3. <LODController>
    4. <cHcGeometryLODController d:id="36933008">
    5. <LOD>
    6. <e d:type="sFloat32" d:alt_encoding="0000000000004940" d:precision="string">50</e>
    7. </LOD>
    8. </cHcGeometryLODController>
    9. </LODController>
    10. <Material>
    11. <cHcEffectMaterialDx d:id="36808896">
    12. <ShaderName d:type="cDeltaString">TrainBasicObjectDiffuse.fx</ShaderName>
    13. <TextureByName>
    14. <e d:type="cDeltaString">textures\[00]cube</e>
    15. </TextureByName>
    16. <Name d:type="cDeltaString">M_LSw1</Name>
    17. <CollisionSurface d:type="cDeltaString">METAL</CollisionSurface>
    18. <VertexType d:type="ref">37111896</VertexType>
    19. <FrameAlphaMode d:type="cDeltaString">ALPHA_MODE_NONE</FrameAlphaMode>
    20. <PassPlatformData/>
    21. <FloatParam>
    22. <cHcEffectMaterialDx-cFloatParam d:id="36809100">
    23. <Name d:type="cDeltaString">SPECULARPOWER</Name>
    24. <Value d:type="sFloat32" d:alt_encoding="0000000000003940" d:precision="string">25</Value>
    25. </cHcEffectMaterialDx-cFloatParam>
    26. <cHcEffectMaterialDx-cFloatParam d:id="36809112">
    27. <Name d:type="cDeltaString">CUSTOMPARAM0</Name>
    28. <Value d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Value>
    29. </cHcEffectMaterialDx-cFloatParam>
    30. <cHcEffectMaterialDx-cFloatParam d:id="36809124">
    31. <Name d:type="cDeltaString">CUSTOMPARAM1</Name>
    32. <Value d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Value>
    33. </cHcEffectMaterialDx-cFloatParam>
    34. <cHcEffectMaterialDx-cFloatParam d:id="36809136">
    35. <Name d:type="cDeltaString">CUSTOMPARAM2</Name>
    36. <Value d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Value>
    37. </cHcEffectMaterialDx-cFloatParam>
    38. <cHcEffectMaterialDx-cFloatParam d:id="36809148">
    39. <Name d:type="cDeltaString">CUSTOMPARAM3</Name>
    40. <Value d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Value>
    41. </cHcEffectMaterialDx-cFloatParam>
    42. <cHcEffectMaterialDx-cFloatParam d:id="36809160">
    43. <Name d:type="cDeltaString">CUSTOMPARAM4</Name>
    44. <Value d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Value>
    45. </cHcEffectMaterialDx-cFloatParam>
    46. <cHcEffectMaterialDx-cFloatParam d:id="36809172">
    47. <Name d:type="cDeltaString">CUSTOMPARAM5</Name>
    48. <Value d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Value>
    49. </cHcEffectMaterialDx-cFloatParam>
    50. </FloatParam>
    51. <VectorParam>
    52. <cHcEffectMaterialDx-cVectorParam d:id="36809296">
    53. <Name d:type="cDeltaString">AMBIENT</Name>
    54. <Value d:numElements="4" d:elementType="sFloat32" d:precision="string">1.0000000 1.0000000 1.0000000 1.0000000</Value>
    55. </cHcEffectMaterialDx-cVectorParam>
    56. <cHcEffectMaterialDx-cVectorParam d:id="36809320">
    57. <Name d:type="cDeltaString">EMISSIVE</Name>
    58. <Value d:numElements="4" d:elementType="sFloat32" d:precision="string">1.0000000 1.0000000 1.0000000 1.0000000</Value>
    59. </cHcEffectMaterialDx-cVectorParam>
    60. <cHcEffectMaterialDx-cVectorParam d:id="36809344">
    61. <Name d:type="cDeltaString">SPECULARCOLOR</Name>
    62. <Value d:numElements="4" d:elementType="sFloat32" d:precision="string">1.0000000 1.0000000 1.0000000 1.0000000</Value>
    63. </cHcEffectMaterialDx-cVectorParam>
    64. <cHcEffectMaterialDx-cVectorParam d:id="36809368">
    65. <Name d:type="cDeltaString">DIFFUSECOLOR</Name>
    66. <Value d:numElements="4" d:elementType="sFloat32" d:precision="string">0.8000000 0.8000000 0.8000000 1.0000000</Value>
    67. </cHcEffectMaterialDx-cVectorParam>
    68. </VectorParam>
    69. <AlphaTestType d:type="cDeltaString">HC_ALPHATEST_GREATER</AlphaTestType>
    70. <AlphaRef d:type="sUInt32">127</AlphaRef>
    71. <TwoSided d:type="bool">0</TwoSided>
    72. <MipLodBias>
    73. <e d:type="sFloat32" d:alt_encoding="00000000000000C0" d:precision="string">-2</e>
    74. </MipLodBias>
    75. <TextureAddrModeU>
    76. <e d:type="cDeltaString">HC_TEXTURE_ADDR_MODE_WRAP</e>
    77. </TextureAddrModeU>
    78. <TextureAddrModeV>
    79. <e d:type="cDeltaString">HC_TEXTURE_ADDR_MODE_WRAP</e>
    80. </TextureAddrModeV>
    81. <TextureAddrModeW>
    82. <e d:type="cDeltaString">HC_TEXTURE_ADDR_MODE_WRAP</e>
    83. </TextureAddrModeW>
    84. <BorderColour>
    85. <e d:type="sUInt32">151587390</e>
    86. </BorderColour>
    87. </cHcEffectMaterialDx>
    88. </Material>
    89. <SourceLToPTransform>
    90. <e d:numElements="16" d:elementType="sFloat32" d:precision="string">1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 1.0000000 1.0000000 1.0000000 1.0000000</e>
    91. </SourceLToPTransform>
    92. <TransformDependency>
    93. <e d:type="sInt32">-1</e>
    94. </TransformDependency>
    95. <TransformName>
    96. <e d:type="cDeltaString">M_LSw1</e>
    97. </TransformName>
    98. <Root>
    99. <cHcSGBoundingSphere d:id="37169152">
    100. <Child>
    101. <cHcSGNodeLODSelector d:id="37169664">
    102. <Child>
    103. <cHcSGBoundingSphere d:id="37170048">
    104. <Child>
    105. <cHcSGNodeMaterial d:id="37158312">
    106. <Child>
    107. <cHcGeometryNodeSameState d:id="37089984">
    108. <Child/>
    109. <PrimitiveSetByDesc>
    110. <cHcPrimitiveSetDescDx d:id="38835376">
    111. <NumPrimitives d:type="sUInt32">32</NumPrimitives>
    112. <PrimitiveType d:type="cDeltaString">PRIMTYPE_TRIANGLESTRIP</PrimitiveType>
    113. <VertexIndexMin d:type="sUInt32">0</VertexIndexMin>
    114. <VertexIndexRange d:type="sUInt32">24</VertexIndexRange>
    115. <VertexIndexBase d:type="sInt32">0</VertexIndexBase>
    116. <IndexArrayStart d:type="sInt32">0</IndexArrayStart>
    117. <NumOriginalTriangles d:type="sUInt32">12</NumOriginalTriangles>
    118. </cHcPrimitiveSetDescDx>
    119. </PrimitiveSetByDesc>
    120. </cHcGeometryNodeSameState>
    121. </Child>
    122. <Material d:type="ref">36808896</Material>
    123. </cHcSGNodeMaterial>
    124. </Child>
    125. <Centre d:numElements="4" d:elementType="sFloat32" d:precision="string">-0.0000001 -0.0000001 -0.0000001 1.0000000</Centre>
    126. <Radius d:type="sFloat32" d:alt_encoding="000000203419FD3F" d:precision="string">1.81865</Radius>
    127. <TransformID d:type="sInt32">0</TransformID>
    128. </cHcSGBoundingSphere>
    129. </Child>
    130. <LODController d:type="ref">36933008</LODController>
    131. <TransformID d:type="sInt32">0</TransformID>
    132. <Point d:numElements="4" d:elementType="sFloat32" d:precision="string">-0.0000001 -0.0000001 -0.0000001 1.0000000</Point>
    133. </cHcSGNodeLODSelector>
    134. </Child>
    135. <Centre d:numElements="4" d:elementType="sFloat32" d:precision="string">0.9999999 0.9999999 0.9999999 1.0000000</Centre>
    136. <Radius d:type="sFloat32" d:alt_encoding="000000203419FD3F" d:precision="string">1.81865</Radius>
    137. <TransformID d:type="sInt32">-1</TransformID>
    138. </cHcSGBoundingSphere>
    139. </Root>
    140. <CollisionRoot>
    141. <d:nil/>
    142. </CollisionRoot>
    143. <RequiresScaledTransforms d:type="bool">0</RequiresScaledTransforms>
    144. <RootMinExtents d:numElements="4" d:elementType="sFloat32" d:precision="string">-0.0000001 -0.0000001 -0.0000001 1.0000000</RootMinExtents>
    145. <RootMaxExtents d:numElements="4" d:elementType="sFloat32" d:precision="string">2.0000000 2.0000000 2.0000000 1.0000000</RootMaxExtents>
    146. <VertexData>
    147. <cHcGeometryVertexDataDx d:id="38835456">
    148. <VertexBuffer>
    149. <cHcVertexBufferDx d:id="37122820">
    150. <NumVertices d:type="sUInt32">24</NumVertices>
    151. <VertexType>
    152. <cHcVertexTypeDeclarationDx d:id="37111896">
    153. <Element>
    154. <cHcVertexTypeDeclarationDx-cElementDecl>
    155. <UsageIndex d:type="sUInt32">0</UsageIndex>
    156. <Usage d:type="cDeltaString">D3DDECLUSAGE_POSITION</Usage>
    157. <Type d:type="cDeltaString">D3DDECLTYPE_FLOAT3</Type>
    158. <StreamIndex d:type="sUInt32">0</StreamIndex>
    159. </cHcVertexTypeDeclarationDx-cElementDecl>
    160. <cHcVertexTypeDeclarationDx-cElementDecl>
    161. <UsageIndex d:type="sUInt32">0</UsageIndex>
    162. <Usage d:type="cDeltaString">D3DDECLUSAGE_NORMAL</Usage>
    163. <Type d:type="cDeltaString">D3DDECLTYPE_FLOAT3</Type>
    164. <StreamIndex d:type="sUInt32">0</StreamIndex>
    165. </cHcVertexTypeDeclarationDx-cElementDecl>
    166. <cHcVertexTypeDeclarationDx-cElementDecl>
    167. <UsageIndex d:type="sUInt32">0</UsageIndex>
    168. <Usage d:type="cDeltaString">D3DDECLUSAGE_TEXCOORD</Usage>
    169. <Type d:type="cDeltaString">D3DDECLTYPE_FLOAT2</Type>
    170. <StreamIndex d:type="sUInt32">0</StreamIndex>
    171. </cHcVertexTypeDeclarationDx-cElementDecl>
    172. </Element>
    173. </cHcVertexTypeDeclarationDx>
    174. </VertexType>
    175. <Owner d:type="ref">36808336</Owner>
    176. <d:blob d:size="768">010080BF010080BF FFFF7FBF000080BF 01000033FFFFFF32 ACAA2A3FACAA2A3F
    177. 000080BFFFFF7F3F 010080BF000080BF 01000033FFFFFF32 AFAAAA3EABAA2A3F
    178. 000080BFFFFF7FBF 0100803F000080BF 01000033FFFFFF32 ABAA2A3F0000803F
    179. 000080BF0100803F FFFF7F3F000080BF 01000033FFFFFF32 ADAAAA3EFFFF7F3F
    180. 000080BFFFFF7FBF 0100803F00000000 6921A2330000803F ABAAAA3EACAAAA3E
    181. 000080BF0100803F FFFF7F3F00000000 6921A2330000803F A8AA2A33AAAAAA3E
    182. 0000803FFFFF7FBF 0100803F00000000 6921A2330000803F A9AAAA3EAAAA2A3F
    183. 0000803F0100803F FFFF7F3F00000000 6921A2330000803F 00000000AAAA2A3F
    184. 0000803FFFFF7FBF 0100803F0000803F 0000000000000000 ADAAAA3EACAA2A3F
    185. 0000803F0100803F FFFF7F3F0000803F 0000000000000000 A9AA0A34AAAA2A3F
    186. 0000803F010080BF FFFF7FBF0000803F 0000000000000000 AAAAAA3E0000803F
    187. 0000803FFFFF7F3F 010080BF0000803F 0000000000000000 00000000FFFF7F3F
    188. 000080BFFFFF7F3F 010080BF00000000 6921A2B3000080BF ABAA2A3FAAAA2A3F
    189. 010080BF010080BF FFFF7FBF00000000 6921A2B3000080BF ACAA2A3FACAAAA3E
    190. 0000803FFFFF7F3F 010080BF00000000 6921A2B3000080BF ADAAAA3EAAAA2A3F
    191. 0000803F010080BF FFFF7FBF00000000 6921A2B3000080BF AFAAAA3EACAAAA3E
    192. 0000803F010080BF FFFF7FBF00000000 000080BF6921A233 ACAA2A3F0000803F
    193. 010080BF010080BF FFFF7FBF00000000 000080BF6921A233 0000803F0000803F
    194. 0000803FFFFF7FBF 0100803F00000000 000080BF6921A233 ACAA2A3FACAA2A3F
    195. 000080BFFFFF7FBF 0100803F00000000 000080BF6921A233 0000803FACAA2A3F
    196. 0000803F0100803F FFFF7F3F00000000 0000803F6921A2B3 A8AAAA3EAAAAAA3E
    197. 000080BF0100803F FFFF7F3F00000000 0000803F6921A2B3 A9AAAA3E00008033
    198. 0000803FFFFF7F3F 010080BF00000000 0000803F6921A2B3 00000000A8AAAA3E
    199. 000080BFFFFF7F3F 010080BF00000000 0000803F6921A2B3 5255553300008033</d:blob>
    200. </cHcVertexBufferDx>
    201. </VertexBuffer>
    202. <IndexBuffer>
    203. <cHcIndexBufferDx d:id="38835504">
    204. <NumIndices d:type="sUInt32">34</NumIndices>
    205. <BytesPerIndex d:type="sUInt8">2</BytesPerIndex>
    206. <Owner d:type="ref">36808336</Owner>
    207. <d:blob d:size="68">0000010002000300 0300040004000500 0600070007000800 080009000A000B00
    208. 0B000C000C000D00 0E000F000F001000 1000110012001300 1300140014001500
    209. 16001700</d:blob>
    210. </cHcIndexBufferDx>
    211. </IndexBuffer>
    212. </cHcGeometryVertexDataDx>
    213. </VertexData>
    214. <NamedObject/>
    215. <OcclusionRegionMin/>
    216. <OcclusionRegionMax/>
    217. </cHcGeometry>
    Okay, ich vermute, dass das:
    Spoiler anzeigen

    XML-Quellcode

    1. ​010080BF010080BF FFFF7FBF000080BF 01000033FFFFFF32 ACAA2A3FACAA2A3F
    2. 000080BFFFFF7F3F 010080BF000080BF 01000033FFFFFF32 AFAAAA3EABAA2A3F
    3. 000080BFFFFF7FBF 0100803F000080BF 01000033FFFFFF32 ABAA2A3F0000803F
    4. 000080BF0100803F FFFF7F3F000080BF 01000033FFFFFF32 ADAAAA3EFFFF7F3F
    5. 000080BFFFFF7FBF 0100803F00000000 6921A2330000803F ABAAAA3EACAAAA3E
    6. 000080BF0100803F FFFF7F3F00000000 6921A2330000803F A8AA2A33AAAAAA3E
    7. 0000803FFFFF7FBF 0100803F00000000 6921A2330000803F A9AAAA3EAAAA2A3F
    8. 0000803F0100803F FFFF7F3F00000000 6921A2330000803F 00000000AAAA2A3F
    9. 0000803FFFFF7FBF 0100803F0000803F 0000000000000000 ADAAAA3EACAA2A3F
    10. 0000803F0100803F FFFF7F3F0000803F 0000000000000000 A9AA0A34AAAA2A3F
    11. 0000803F010080BF FFFF7FBF0000803F 0000000000000000 AAAAAA3E0000803F
    12. 0000803FFFFF7F3F 010080BF0000803F 0000000000000000 00000000FFFF7F3F
    13. 000080BFFFFF7F3F 010080BF00000000 6921A2B3000080BF ABAA2A3FAAAA2A3F
    14. 010080BF010080BF FFFF7FBF00000000 6921A2B3000080BF ACAA2A3FACAAAA3E
    15. 0000803FFFFF7F3F 010080BF00000000 6921A2B3000080BF ADAAAA3EAAAA2A3F
    16. 0000803F010080BF FFFF7FBF00000000 6921A2B3000080BF AFAAAA3EACAAAA3E
    17. 0000803F010080BF FFFF7FBF00000000 000080BF6921A233 ACAA2A3F0000803F
    18. 010080BF010080BF FFFF7FBF00000000 000080BF6921A233 0000803F0000803F
    19. 0000803FFFFF7FBF 0100803F00000000 000080BF6921A233 ACAA2A3FACAA2A3F
    20. 000080BFFFFF7FBF 0100803F00000000 000080BF6921A233 0000803FACAA2A3F
    21. 0000803F0100803F FFFF7F3F00000000 0000803F6921A2B3 A8AAAA3EAAAAAA3E
    22. 000080BF0100803F FFFF7F3F00000000 0000803F6921A2B3 A9AAAA3E00008033
    23. 0000803FFFFF7F3F 010080BF00000000 0000803F6921A2B3 00000000A8AAAA3E
    24. 000080BFFFFF7F3F 010080BF00000000 0000803F6921A2B3 5255553300008033


    die einzelnen Koordinaten-Komponenten (jeweils Position, Normal, Texture-Koordinate) in hexadezimal darstellt, siehe:
    en.wikipedia.org/wiki/Single-p…ng-point_format:_binary32

    Nehmen wir z.B.
    5255553300008033 - wir sehen, die Zahl hat 16 Stellen - das bedeutet: ln(16^16)/ln(2) = 64 bits, pro Zahl passen also zwei float-Werte rein.
    Ich empfehle dir mindestens einen der Vertizes in den Nullpunkt zu verschieben, so könntest du eindeutig identifizieren welcher das ist, und Näheres zu der Speicherung ableiten.
    _
    Und Gott alleine weiß alles am allerbesten und besser.
    Ungefähr das habe ich nun mal gemacht. Ich habe alle Ecken (Vertices) genommen und sie in den Ursprung verschoben, sodass alle 8 Kanten die Koordinaten 0, 0, 0 haben. Heraus kommt dann als VertexBuffer folgendes:
    Spoiler anzeigen
    0000000000000000 0000000000000000 0000000000000000 ACAA2A3FACAAAA3E
    0000000000000000 0000000000000000 0000000000000000 ABAAAA3EACAAAA3E
    0000000000000000 0000000000000000 0000000000000000 ACAA2A3FACAA2A3F
    0000000000000000 0000000000000000 0000000000000000 AFAAAA3EABAA2A3F
    0000000000000000 0000000000000000 0000000000000000 ADAAAA3EFFFF7F3F
    0000000000000000 0000000000000000 0000000000000000 00000000FFFF7F3F
    0000000000000000 0000000000000000 0000000000000000 00000000AAAA2A3F
    0000000000000000 0000000000000000 0000000000000000 A8AA2A33AAAAAA3E
    0000000000000000 0000000000000000 0000000000000000 5255553300008033
    0000000000000000 0000000000000000 0000000000000000 A9AAAA3E00008033
    0000000000000000 0000000000000000 0000000000000000 ABAA2A3F0000803F
    0000000000000000 0000000000000000 0000000000000000 0000803FACAA2A3F
    0000000000000000 0000000000000000 0000000000000000 0000803F0000803F


    Der IndexBuffer gibt nun das aus:
    Spoiler anzeigen
    0000010002000300 0400030005000300 0600010007000100 0800090009000400
    04000A0002000A00 0B000C00


    Es ist logisch, dass sich die Indexe verringert haben, da man nun mit weniger Positionen die Koordinaten der Vertices beschreiben kann. Schlau werde ich daraus aber trotzdem noch nicht.
    Ich habe jetzt die leise Vermutung, dass die Rotationsmatrix doch direkt etwas mit den angegebenen Buffern zutun hat. Vielleicht werden die Blöcke irgendwie damit multipliziert oder dergleichen. ?(
    DIe Rotationsmatrix ist die Zeile hier <e d:numElements="16" d:elementType="sFloat32" d:precision="string">2.0000000 0.0000000 0.0000000 0.0000000 0.0000000 2.0000000 0.0000000 0.0000000 0.0000000 0.0000000 2.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000</e>
    Schau mal, mit den paar Fetzen kann ich nicht viel anfangen. Du musst schon die ganze XML hier rein posten.
    Analytisch würde man folgendergestalt vorgehen: Du nimmst ein einzelnen Vertex (keine Ahnung ob das bei dir jetzt möglich ist) und schiebst es in den Koordinatenursprung, speicherst es ab und untersuchst
    a) wie viele Indizes (das ist übrigens der Plural) erzeugt und b) wie der Vertex abgespeichert worden ist.

    Falls es mit einem einzelnen Vertex nicht klappt, nimmst du ein Würfel (1x1x1 groß) und schiebst ein einzelnes Vertex des Quadrats in den Koordinatenursprung - du skalierst nicht den Würfel in den Koordinatenursprung, sondern translatierst nur eine einzelne Ecke - so kannst du schauen wie sich das in der Speicherung niederschlägt, auch rotierst du es nicht. Du erstellst es einfach und schiebst es den in Nullpunkt - das war's, und schon könnten wir viel weiter sein.

    Meine Vermutung:
    Die ersten drei Hex-Zahlen sind jeweils Position und Normale, die übrige Hex-Zahl die Texture-Koordinate, denn
    0000000000000000 0000000000000000 0000000000000000 ACAA2A3FACAAAA3E

    Pro Hex-Zahl passen jeweils 2-floats rein,
    das heißt: 2 + 2 + 2 + 2 floats = 8 floats, und wir lesen in der Struktur: POSITION, NORMAL, TEXCOORD, das ist: 3-float, 3-float, 2-float = 8 floats.

    Mach bitte folgendes: Erstelle einen Würfel (1x1x1), verschiebe eines seiner Ecken in den Nullpunkt, speichere es ab und poste die GESAMTE XML hier.

    Grüße.
    Und Gott alleine weiß alles am allerbesten und besser.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „φConst“ ()