Fragen zum B3D Dateiformat

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Kernel32

Betreff: Fragen zum B3D Dateiformat

BeitragMo, Okt 23, 2006 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin gerade dabei, eine Funktion zu basteln, womit ich meine Meshes als B3D speichern kann. Aber beim Durchgehen der Spezifikation bleiben leider noch ein paar Fragen offen, weil die Beschreibung leider ziemlich dürftig ist.

1. Sowohl im MESH-Chunk, als auch im TRIS-Chunk wird eine Brush-id angegeben. Wo ist der Unterschied?

2. Angenommen, ich exportiere drei Brushes am Anfang des Files, hat dann der erste den Index 0, der zweite 1 und der dritte 2 usw., also in der Reihenfolge, wie man sie in die Datei schreibt?

3. Wie verknüpfe ich ein Mesh im File dann mit einem der angegebenen Brushes? Wahrscheinlich, in dem ich die Brush ID (siehe 2.) angebe -aber im MESH-Chunk, im TRIS-Chunk oder in beiden?
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt.
Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen.
Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O

biggicekey

BeitragMo, Okt 23, 2006 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe davon leider nicht so viel ahnung aber vllt hilft dir die datei die ich gerade ins archiv hochgeladen habe
b3dfile_utils.zip
vllt nimmt sie dir aber auch schon dein ergebniss voraus.
hoffe das hilft dir
gruß
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]
 

antome

!!! gesperrt !!!

BeitragMo, Okt 23, 2006 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 1.
Ich probiere solche Sachen immer aus, ich nehme an, nehme aber nur an, die Brush ID beim Mesh Chunk (es steht da MasterBrush) wird dann eingesetzt wenn ein TRIS Chunk keine Brush ID zugewiesen bekommen hat.

Bei 2. ja soweit ich mich erinnere. Aber was meinst du mit exportieren ?

Bei 3. ja zuweisen 0 ist der erste Brush und so weiter.
antome
 

Kernel32

BeitragMo, Okt 23, 2006 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch, funktioniert soweit -ich habe einach im jeweiligen MESH-Chunk und im TRIS-Chunk die Brush-id angegeben. Geht anscheinend.

Allerdings: wenn ich jetzt Meshes mit mehreren Texturen (Multitextur) habe (z.B. eine Textur im Layer 0, eine andere im Layer 3), wie kann ich das dann im Dateiformat angeben Question
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt.
Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen.
Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O
 

Dreamora

BeitragMo, Okt 23, 2006 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

BRUS
int n_texs
{
char name[] ;eg "WATER" - just use texture name by default
float red,green,blue,alpha ;Blitz3D Brushcolor and Brushalpha: default=1,1,1,1
float shininess ;Blitz3D BrushShininess: default=0
int blend,fx ;Blitz3D Brushblend and BrushFX: default=1,0
int texture_id[n_texs] ;textures used in brush
}


Der letzte Eintrag kommt da zum tragen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Kernel32

BeitragMo, Okt 23, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist schon klar, aber wie gibt man dort den Texturlayer an?
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt.
Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen.
Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O
 

Dreamora

BeitragMo, Okt 23, 2006 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
garnicht
Das ist ein Array

0 - Irgend eine Textur
1 - 0
2 - 0
3 - Irgend eine andere Textur

wenn du Layer 0 und 3 nutzt.
Oben wäre dann natürlich vor dem bruch n_texs = 4
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Kernel32

BeitragMo, Okt 23, 2006 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber dann wohl nicht 0 für "keine Textur", sondern eher -1, da 0 ja für den ersten Texturindex steht.

Und in welcher Form muss hier ein Array angegeben werden? C++-mässig null-terminiert, wie bei den Strings? Oder einfach als Ints in Folge?
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt.
Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen.
Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O
 

Dreamora

BeitragMo, Okt 23, 2006 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
C mässig, also int int int int
Ob 0 oder -1 weiss ich jetzt grad nicht, das kommt draufan ob er die Indizes bei 0 beginnt zu lesen oder bei 1. Das lässt sich dann mit einem simplen Laden testen Smile

(0 terminiert ist garkein Array, das gilt nur bei Strings die es in C++ standardmässig so aber auch nicht gibt sondern über string.h eingebunden werden und ansonsten einfach eine Konvention sind)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BIG BUG

BeitragMo, Okt 23, 2006 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Wichtig ist noch, dass n_texs dann natürlich die Anzahl der Texturen enthalten muss. Also hier z.B. '2'. Am Schluss wird dann halt 2 mal ein Int mit der gewünschten Textur eingefügt.
Zwischendrin irgendwelche Texturen leer zu lassen bringt wahrscheinlich eh nix...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

Kernel32

BeitragDi, Okt 24, 2006 3:51
Antworten mit Zitat
Benutzer-Profile anzeigen
BIG BUG hat Folgendes geschrieben:
Also hier z.B. '2'. Am Schluss wird dann halt 2 mal ein Int mit der gewünschten Textur eingefügt.
Zwischendrin irgendwelche Texturen leer zu lassen bringt wahrscheinlich eh nix...

Aber wie sollte man dann den angeben können, in welchen Layer eine Textur kommt, wenn man nur die tatsächlich benutzen Texturen angibt, ohne "leere"?

Andererseits: wenn man "leere Layers" angeben müsste, müsste man ja auch nicht n_texs angeben, da das Format dann sowieso 7 Ints erwartet (alle Layer).

Ey, jetzt bin ich total verwirrt Shocked
-------------
Wollte neulich Herrn Brot anrufen, aber da war belegt.
Dann hab ich bei Wheight Watcher's angerufen, aber niemand hat abgenommen.
Schliesslich hab ich im Irak angerufen, aber dort war besetzt o.O
 

Dreamora

BeitragDi, Okt 24, 2006 7:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst leere Layer angeben, da es explizit einen Array der Länge n_texs erwartet. (das max wär übrigens 8 also 0 - 7)

Wenn du nicht "auffüllen" willst von unten (also 0, dann 1, dann 2 etc verwenden), aus welchem Grund auch immer, dann musst du mit leeren Layern auffüllen und entsprechend n_texs vergrössern.

Machst du das nicht, so wird er beim auslesen über die BRUS grenze raus auslesen und den nächsten BRUS trashen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Kernel32

BeitragDi, Okt 24, 2006 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, funktioniert nicht. Habe es mit der Angabe der Texturanzahl versucht und ohne (leere Layer dazwischen mit -1 gefüllt). Gile[s] crasht beim Importieren des Meshes.

Das ist wohl auch der Grund, warum es bis heute keinen B3D-Export-Code gibt, der multiple Texture Layers unterstützt. Auf dieses Problem sind wohl alle anderen auch gestossen Sad
 

antome

!!! gesperrt !!!

BeitragDi, Okt 24, 2006 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst mal versuchen einen Farbbrush zu erstellen und den dafür einzutragen, wenn er nicht gebraucht wird sieht man die Farbe ja nicht, ich glaube Blitz3D nimmt dafür weiß.

Edit:
Farbtextur meine ich oder setz einfach eine andere vorhandene ein.
antome
 

Dreamora

BeitragDi, Okt 24, 2006 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Kernel32 hat Folgendes geschrieben:
Das ist wohl auch der Grund, warum es bis heute keinen B3D-Export-Code gibt, der multiple Texture Layers unterstützt. Auf dieses Problem sind wohl alle anderen auch gestossen Sad


Das ist defakto falsch, solltest du wohl auch wissen, denn sonst würde Gile[s] nicht funktionieren.
Kannst ja Mal deinen Code posten, dann können wir darauf basierend versuchen den Fehler zu finden.
Alternativ kannst du dir einen B3D Parser schreiben, der dir den Output von Gile[s] oder Ultimate Unwrap 3D lädt und als PlainText ausspuckt mit einrücken etc. Dann siehst du wie es aufgebaut sein könnte / müsste.

Was mir allerdings eben beim nochmaligen Anschauen des Formates aufgefallen ist, ist das das B3D Format eigentlich 8 UV Sets unterstützt, B3D befehlstechnisch aber nur 2?
Das ist eine durchaus interessante Erkenntnis Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

lettorTrepuS

BeitragDi, Okt 24, 2006 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragDi, Okt 24, 2006 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Dachte ich auch
Aber es steht da explizit das bis zu 8 UV möglich sind.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

antome

!!! gesperrt !!!

BeitragDi, Okt 24, 2006 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
XWorld / G.L.E.T. speichert bis zu 4 Texturen im B3D Format ab, also sind mehr wie 2 möglich.
antome
 

Dreamora

BeitragDi, Okt 24, 2006 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Texturen <> UV Sets
Du kannst schon seit jeher bis zu 8 Texturen haben im B3D.
Aber du kannst in Blitz3D selbst per Befehl nur 2 UV Sets haben. Das B3D Format aber unterstützt scheinbar mehr (ausser er hätte da seine "ursprünglichen" Ideen dokumentiert ^^)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BIG BUG

BeitragDi, Okt 24, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch nicht so schwer(zwar kein BB aber außer bei der For-Schleife machts eh keinen Unterschied):

Code: [AUSKLAPPEN]


   b3dBeginChunk( "BRUS" );

      b3dWriteInt( val_texcnt );            //textures per brush
      b3dWriteString( mat->GetName() );         //name
      b3dWriteVector( val_color );            //RGB-color
      b3dWriteFloat( 1-val_transp );            //alpha
      b3dWriteFloat( val_specular );            //shininess
      b3dWriteInt( val_blend );            //blend
      b3dWriteInt( val_entityfx );            //FX

      for (tex=0; tex < val_texcnt; tex++)
      {   

         b3dWriteInt( g_arr_tex_for_brush[tex] );            //Texture
      }

   b3dEndChunk();   //end of BRUS chunk



val_texcnt enthält die Anzahl der Texturen für diesen Brush und genau so oft wird halt ein Int mit dem Texturindex angehängt...
Index 0 ist unterste Schicht, Index 1 dann zweitunterste usw.
Irgend welche Leertexturen bringen Dir nix, also kannst Du da getrost drauf verzichten.

Und ich kann Dir versichern, dass das so funktioniert...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group