.b3d Aufbau

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Jeck

Betreff: .b3d Aufbau

BeitragMo, Apr 12, 2010 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2010 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau mal hier: http://www.blitzbasic.com/sdkspecs/sdkspecs.php. Auf deutsch kenne ich keine Seite.
 

Jeck

BeitragMo, Apr 12, 2010 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2010 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Jeck,

es ist ein rein binäres Format. Die Spezifikation gibt nur Auskunft über die Bedeutung der Speicherblöcke.
Code: [AUSKLAPPEN]
BB3D
  int version                 ;file format version: default=1
  [TEXS]                      ;optional textures chunk
  [BRUS]                      ;optional brushes chunk
  [NODE]                      ;optional node chunk
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...)

Code: [AUSKLAPPEN]
TEXS
  {
   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
  }
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.

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

BeitragMo, Apr 12, 2010 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2010 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Apr 16, 2010 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Apr 16, 2010 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Guck mal hier

Int = 4 Bytes -2147483648 bis +2147483647
Float = 4 Bytes -2 Mrd. bis +2 Mrd.
 

Jeck

BeitragMo, Apr 19, 2010 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 19, 2010 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 19, 2010 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 21, 2010 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Giebt es in Python ein Befehl um aus einer Datei ein Float in Byteform auszulesen. Wenn ja wie heißt der?

Mr.Keks

BeitragMi, Apr 21, 2010 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group