.b3d Aufbau
Übersicht

JeckBetreff: .b3d Aufbau |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Ich möchte einen .b3d Importer für Blender schreiben dafür muss ich aber wissen wie es aufgebaut ist. Gibt es eine Seite am besten auf deutsch wo der Aufbau beschrieben ist? | ||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau mal hier: http://www.blitzbasic.com/sdkspecs/sdkspecs.php. Auf deutsch kenne ich keine Seite. | ||
Jeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gibt es das b3D Format in zwei Formen. Einmal als Text und einmal als Binar. Wenn ja ich möchte einen Importer für das Binare Format schreiben.
Was steht hinter Tris? Das kann ich aus der Specification nich genau rauslesen. Wieso sind hinter jeder Zahl hinter Tris immer drei Byte die den Wert 0 haben? |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Jeck,
es ist ein rein binäres Format. Die Spezifikation gibt nur Auskunft über die Bedeutung der Speicherblöcke. Code: [AUSKLAPPEN] BB3D
Ist zum Beispiel so zu lesen: Eine B3d-Datei besteht aus einem BB3D, der Länge der Datei danach, gefolgt von nem Int für die Version, gefolgt von einem Block, der alle Texturen benennt, einem Block der alle Brushes enthält und einem Block, der alle Nodes enthält. (Wobei jeder Chunk auch wegfallen kann...)
int version ;file format version: default=1 [TEXS] ;optional textures chunk [BRUS] ;optional brushes chunk [NODE] ;optional node chunk Code: [AUSKLAPPEN] TEXS
Der Texturblock ist dann eine mit "TEXS" und der Bytelänge des Blocks eingeleitete Liste von Texturen. Der Texturname steht als C-String da, dann zwei 32Bit-Ints für flags und blend, Floats für Position, Skalierung und Rotation in oben ersichtlicher Reihenfolge. Am Ende des Blocks für eine Textur kommt entweder noch ein Texturblock oder ein BRUS bzw. NODE oder evtl. auch das Ende der Datei.
{ char file[] ;texture file name int flags,blend ;blitz3D TextureFLags and TextureBlend: default=1,2 float x_pos,y_pos ;x and y position of texture: default=0,0 float x_scale,y_scale ;x and y scale of texture: default=1,1 float rotation ;rotation of texture (in radians): default=0 } Möglicherweise habe ich das nicht mehr alles ganz perfekt in Erinnerung. Du kannst dir auch übersichtliche b3d-Dateien erstellen und in nem Text- oder Hex-Editor öffnen. Ansonsten gibt es ja netterweise auch den Beispielcode, wie das ganze zu parsen geht. |
||
MrKeks.net |
Jeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Hilfe
Was ich jetzt noch nicht verstehe ist. Wie der Verts Chunk aufgebaut ist. Kann mir jemand diesen erklären? Und wie sind die Werte in diesen gespeichert? |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Evt. hilft Dir dieser Thread, der alle möglichen Exporter (auch ein paar B3D Exporter) verlinkt. Was man exportieren kann, geht auch umgekehrt, evt. hilft Dir das weiter.
http://www.blitzbasic.com/Comm...opic=66815 speziell: www.blitzbasic.com/codearcs/codearcs.php?code=866 www.blitzbasic.com/codearcs/codearcs.php?code=707 www.blitzbasic.com/codearcs/codearcs.php?code=1794 http://www.blitzbasic.com/code...p?code=342 |
||
Jeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn in der Specification steht das ein Int oder ein float gespeichert werden soll wie sieht das dann in Byteform also im Format aus? | ||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guck mal hier
Int = 4 Bytes -2147483648 bis +2147483647 Float = 4 Bytes -2 Mrd. bis +2 Mrd. |
||
Jeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie lese ich float und Integerwerte in Byteform aus einer Datei wenn ich nur den Befehl hab um ein einzelnes Byte aus der Datei auszulesen?
Die Basic befehle um ein float und ein Integer auszulesen nutzen mir nicht da ich ja ein Importer für Blender schreibein möchte. |
||
![]() |
Jo0oker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du meinst nicht zufälligerweise die Funktion ReadFloat() ?
lg Jo0oker |
||
Tehadon, das kostenlose 3D RPG
www.tehadon.de http://www.blitzforum.de/worklogs/14/ Das Abenteuer wird beginnen! |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du nur die Byte-Funktion zur Verfügung hast - aus welchem Grund auch immer - dann geht das für Integer so:
Ein Integer besteht aus 4 Bytes: Code: [AUSKLAPPEN] Byte1 Byte2 Byte3 Byte4 a b c d Integer=a+b*256+c*256^2+d*256^3 Für Floats wird das Schwieriger. Da musst du auf der Ebene der Bits arbeiten und die 4 Bytes eines Float-Werts in Mantisse und Hochzahl zerlegen. mfg Thunder PS: musst du das wirklich mit den Bytefunktionen machen? |
||
Jeck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Giebt es in Python ein Befehl um aus einer Datei ein Float in Byteform auszulesen. Wenn ja wie heißt der? | ||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht gibt es noch eine nettere Methode, aber im Zweifelsfall hilft dir sicherlich Folgendes weiter:
http://docs.python.org/library/struct.html Muss gestehen, dass noch niemals gemacht zu haben, habe aber bisher auch nur sehr wenig mit Python gecodet. Das ganze sollte dann vermutlich in etwa folgende Form haben, Code: [AUSKLAPPEN] dein_float = struct.unpack("f", dein_file.read(4))
Das Elegante daran ist dann, dass du auch gleich so was in der Art schreiben kannst, um alle Infos für eine Textur auf einmal zu laden, wie Code: [AUSKLAPPEN] filename, flags, blend, x_pos, y_pos, x_scale, y_scale, rotation = struct.unpack_from("siifffff", b3dfile_buffer)
|
||
MrKeks.net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group