b3d-Tutorial

Hier kann alles Allgemeine rund um Zusi 3 gefragt und beantwortet werden. Neuigkeiten zum Programm werden hier erscheinen.
Nachricht
Autor
Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

b3d-Tutorial

#1 Beitrag von Carsten Hölscher »

Für alle, die mal etwas im b3d-Format basteln möchten:

Einleitung
Zum Verständnis ist das b3d-Format nicht schlecht. Man wird damit mangels gutem Editor vermutlich keine komplexen Gebilde erstellen wollen, aber als Einstieg ist es sehr gut dazu geeignet, das Prinzip der Texturerstellung zu verstehen.

b3d ist vom Informationsinhalt her dem Zusi-ls-Format recht ähnlich, es hat aber natürlich noch eine Information über die Textur. Als Editor dient i.d.R. ein üblicher Texteditor. Alternativ geht auch der Loksim-Editor, der einen b3d-Export bietet (in diesem sind kleine Fehler vorhanden, s. auch hier http://zusiforum.eisenbahn-seiten.de/vi ... php?t=2780)

Um das Getippte zu kontrollieren bietet sich der Zusi3-Betrachter an, bei bve soll es auch einen b3d-Viewer geben.

b3d-Format
Zunächst werfen wir mal einen Blick in eine b3d-Datei.

Beispiel:

Code: Alles auswählen

[MeshBuilder]
Vertex 0.6, 5.7, 8.6
Vertex 0.6, 5.7, -0.6
Vertex -6.6, 5.7, -0.6
Vertex -3, 7.5, 3
Vertex -3, 7.5, 5
Face 1, 2, 3 
Face 0, 1, 3, 4
Color 48, 48, 48

[MeshBuilder]
Vertex 0, 0, -1
Vertex 0, 4, -1
Vertex 2, 4, -1
Vertex 2, 0, -1
Face 0, 1, 2, 3

[Texture]
Load Tree.bmp
Coordinates 1, 0, 0
Coordinates 2, 1, 0
Coordinates 0, 0, 1
Coordinates 3, 1, 1
Transparent 0, 0, 0 

[MeshBuilder]
Vertex 1, 0, -2
Vertex 1, 4, -2
Vertex 1, 4, 0
Vertex 1, 0, 0
Face 0, 1, 2, 3

[Texture]
Load Tree.bmp
Coordinates 1, 0, 0
Coordinates 2, 1, 0
Coordinates 0, 0, 1
Coordinates 3, 1, 1
Transparent 0, 0, 0
Es gibt bei b3d zwei Schlüssel in eckigen Klammern:
[MeshBuilder] bedeutet, dass Informationen über die Vertices (Polygon-Eckpunkte) und die daraus gebildeten Polygone (Faces) folgen.
[Texture] bedeutet, dass Die Texturinformation, also Bitmap-Datei und Texturkoordinaten folgen.

Eine b3d-Datei kann aus mehreren solcher Blöcke bestehen, also [MeshBuilder] und [Texture] für die erste Polygongruppe, dann [MeshBuilder] und [Texture] für die zweite Polygongruppe usw. Wenn wie bei Zusi-ls Polygone ohne Textur erstellt werden sollen, dann kann der [Texture]-Abschnitt ersatzlos entfallen.
Kommentare sind überall möglich, indem ein ein Semikolon vorangestellt wird (Alles nach dem Semikolon wird dann beim Laden ignoriert).


Bau einer einfachen Lf-Tafel als b3d-Datei

Der Mast als untexturiertes Polygon

Die Bedeutung der Einträge sollen am Beispiel einer einfachen Lf2-Tafel erklärt werden. Diese soll aus einem Mast und der viereckigen Tafel bestehen. Der Mast soll als untexturiertes schwarzes Polygon dargestellt werden, das Signalbild und die Rückseite als Textur.

Die Koordinaten sind einer Zusi-Lf-Tafel entnommen und ins neue Koordinatensystem übertragen (x wird z, y wird -x, z wird y):

Für den Mast sind das vier Punkte, wir schreiben also im Meshbuilder-Abschnitt

Code: Alles auswählen

[MeshBuilder]
Vertex 3.143, -1.0, 0
Vertex 3.143,  1.93, 0
Vertex 3.043,  1.93, 0
Vertex 3.043, -1.0, 0
Damit sind zunächst die vier Punkte definiert, bei b3d wird dabei aber nicht gleich automatisch wie bei Zusi-ls ein Viereck erzeugt. Für die Polygoninformation folgt die Angabe Face und beschreibt, welche Punkte in welcher Reihenfolge das Polygon bilden. Die gerade definierten Vertices haben dabei je eine fortlaufende Nummer, beginnend bei 0. Um aus unseren 4 Punkten ein Viereck zu erstellen, muß also

Code: Alles auswählen

Face 3, 2, 1, 0 
geschrieben werden (der Drehsinn ist gegenüber Zusi 2 wegen des anderes Koordinatensystem andersrum).
Nun können wir aus denselben vier Punkten auch noch die Mastrückseite erstellen. Das hat gegenüber Zusi-ls den Vorteil, dass weniger Vertices benötigt werden, was gut für die Performance ist. Es folgt also eine zweite Face-Angabe mit unseren 4 Punkten in umgekehrter Reihenfolge:

Code: Alles auswählen

Face 0, 1, 2, 3
Da der Mast keine Textur braucht, sollte man eine Farbe zuweisen. Bei b3d wird der Farbton duch drei Werte zwischen 0 und 255 dargstellt. Diese Werte entsprechen dem Rot-/Grün-/Blau-Anteil und sind auch in üblichen Windwos-Farbauswahldialogen zu finden. Für schwarz folgt also die Zeile:

Code: Alles auswählen

Color 0, 0, 0
Damit wäre der Mast komplett.

Das Signalbild mit Textur

Für das Signal wird auch ein Viereck benötigt. Der erste Schritt entspricht also dem Mastbau und führt zu folgendem Code für die Vorderseite:

Code: Alles auswählen

[MeshBuilder]
Vertex 2.87, 1.93, 0
Vertex 3.33, 1.93, 0
Vertex 3.33, 2.63, 0
Vertex 2.87, 2.63, 0
Face 3, 2, 1, 0 
Grundlegendes über Texturen
Texturen werden bei allen Dateiformaten als separate Datei mitgeliefert. Diese Datei wird mit einem Bitmapeditor erzeugt und im bmp-Format in demselben Verzeichnis wie die b3d-datei abgelegt. Es sind auch andere Texturformate wie tga möglich, es kann aber sein, dass der aktuelle Zusi-Betrachter diese noch nicht einliest.

DirectX kann nur Texturen verwalten, die als Kantenlänge einer 2er Potenz haben, also 2x2, 4x4, 8x8 usw. bis 1024x1024. Die meisten Grafikkarten können auch bis 4096x4096, aber manche haben ein Limit bei 1024x1024, dieser Wert sollte also nicht überschritten werden. Wenn Bitmapdateien mit anderen Abmessungen geladen werden, benötigen die immer soviel Speicher wie die nächstgrößere 2er Potenz. Eine 3x65 Pixel große Textur schlägt also mit 128x128 Pixel Speicherbedarf zu.
Es ist ganz wichtig, die Texturen so klein wie möglich zu machen, da die Texturen DER Engpaß bei Zusi 3 sein werden.

Wenn ein Polygon mit einer Textur versehen wird, kann man sich das wie ein Tapezieren vorstellen, bei dem man aus dem Tapetenvorrat für jede einzelne Fläche ein genau passendes Stück herausschneidet. Jedes einzelne Dreieck des Polygons wird also mit einem Stück Bitmap belegt. Die Textur wird dabei nicht als Ganzes über unsere Landschaft "gestülpt", sondern es wird jedes Dreick einzeln betrachtet und jedes Dreieck mit einem genau zu definierendes Ausschnitt aus der Textur belegt. Ein Texturausschnitt kann auch mehrmals benutzt werden (z.B. Mauerornament, das mehrmls im Haus verbaut ist, muß nur einmal auf der Textur vorhanden sein) - in diesem Punkt unterscheidet sich das ganze erfreulicherweise etwas vom echten Tapezieren.

Beim Zeichnen eines Dreiecks muß jetzt irgendwie definiert werden, welcher Ausschnitt der Textur auf das Dreieck gezeichnet werden soll. Diese Aufgabe erledigen die sogannnten Texturkoordinaten: Diese werden auch als u und v bezeichnet (da ein Bitmap eine zweidimensionale Angelegenheit ist, gibt es nur zwei Koordinaten, u ist die waagerechte, v die senkrechte Bitmapkoordinate). Jeder Vertex enthält also neben den altbekannten x-, y-, und z-Koordinaten auch noch eine u- und v-Koordinate. Um die Koordinaten unabhängig von der Größe des Bitmaps zu halten, sind sie auf 1 normiert. Also Koordinatenwert x Bitmapbreite ergibt das jeweilige Pixel. Der folgendes Abschnitt zeigt das am Beispiel der Tafel.


Bitmap für die Lf-Tafel (32x32):

Bild

Zur Ermittlung der Texturkoordinaten siehe folgendes Bild:

Bild

Der einzige Punkt, bei dem man etwas rechnen muß, ist der blau eingetragene Abschnitt, der Rest läßt sich sofort ablesen, nämlich
Punkt 0: u=0 v="blau"
Punkt 1: u=0.5 v="blau"
Punkt 2: u=0.5 v=0
Punkt 3: u=0 v=0
Der Wert für blau ergibt sich Abzählen der Pixel. Der blaue Strich ist 23 Pixel, geteilt durch die Texturhöhe 32 erhält man 0.72



Der b3d-Texturabschnitt


Im Texturabschnitt wird zunächst die zu ladende Datei "lf.bmp" angegeben.

Code: Alles auswählen

[Texture]
Load lf.bmp
es folgen dann die Angaben über die Vertices und ihre Texturkoordinaten, es werden also direkt die Werte von oben übernommen:

Code: Alles auswählen

Coordinates 0, 0,   0.72
Coordinates 1, 0.5, 0.72
Coordinates 2, 0.5, 0
Coordinates 3, 0,   0
Für die Rückseite wird im Gegensatz zum Mast ein eigenes Polygon benötigt, da hier ja der andere Ausschnitt der Textur dargestellt werden soll und damit andere Texturkoordinaten benötigt werden.

Meshbuilder- und Textur-Abschnitt werden also entsprechend erweitert.

[MeshBuilder]
Vertex 2.87, 1.93, 0
Vertex 3.33, 1.93, 0
Vertex 3.33, 2.63, 0
Vertex 2.87, 2.63, 0
Vertex 2.87, 1.93, 0
Vertex 3.33, 1.93, 0
Vertex 3.33, 2.63, 0
Vertex 2.87, 2.63, 0

Face 3, 2, 1, 0
Face 4, 5, 6, 7


[Texture]
Load lf.bmp
Coordinates 0, 0, 0.72
Coordinates 1, 0.5, 0.72
Coordinates 2, 0.5, 0
Coordinates 3, 0, 0
Coordinates 4, 1, 0.72
Coordinates 5, 0.5, 0.72
Coordinates 6, 0.5, 0
Coordinates 7, 1, 0



Zum Abschluß noch einmal der gesamte b3d-Inhalt:

Code: Alles auswählen

; Mast
[MeshBuilder]
Vertex 3.143, -1.0, 0
Vertex 3.143,  1.93, 0
Vertex 3.043,  1.93, 0
Vertex 3.043, -1.0, 0
Face 3, 2, 1, 0
Face 0, 1, 2, 3 
Color 0, 0, 0


; Signalbild
[MeshBuilder]
Vertex 2.87, 1.93, 0
Vertex 3.33, 1.93, 0
Vertex 3.33, 2.63, 0
Vertex 2.87, 2.63, 0
Vertex 2.87, 1.93, 0
Vertex 3.33, 1.93, 0
Vertex 3.33, 2.63, 0
Vertex 2.87, 2.63, 0
Face 3, 2, 1, 0
Face 4, 5, 6, 7 

[Texture]
Load lf.bmp
Coordinates 0, 0,   0.72
Coordinates 1, 0.5, 0.72
Coordinates 2, 0.5, 0
Coordinates 3, 0,   0
Coordinates 4, 1,   0.72
Coordinates 5, 0.5, 0.72
Coordinates 6, 0.5, 0
Coordinates 7, 1,   0
Und das Ergebnis:
Bild
Zuletzt geändert von Carsten Hölscher am 04.11.2003 19:43:22, insgesamt 4-mal geändert.

Benutzeravatar
Sven Jähnig
Beiträge: 613
Registriert: 04.11.2001 17:34:26
Aktuelle Projekte: Überraschunnnng!!!
Wohnort: Köln, Deutschland
Kontaktdaten:

#2 Beitrag von Sven Jähnig »

Soweit so gut, kleine Anmerkung noch:
Für Vorder- und Rückseite kann auch Face2 0,1,2,3 verwendet werden.

Fänd ich gut, wenn sich b3d-Objekte später vollwertig in Zusi einbinden lassen.

Sven, letztens das hier mit b3d gebastelt (Nur im Notepad geschrieben):
Bild

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#3 Beitrag von Carsten Hölscher »

gibt es eigentlich irgendwo eine verbindliche b3d-Dateiformats-Doku? Das Face2-Kommando kannte ich noch nicht.

Wie hast Du die Halbtransparenz erzeugt?

Carsten

Benutzeravatar
Sven Jähnig
Beiträge: 613
Registriert: 04.11.2001 17:34:26
Aktuelle Projekte: Überraschunnnng!!!
Wohnort: Köln, Deutschland
Kontaktdaten:

#4 Beitrag von Sven Jähnig »

Eine richtige Doku für das b3d-Format habe ich leider auch noch nicht gefunden. Das meiste ist durch herumprobieren entstanden, Hilfe habe ich auch von Rüdiger Hülsmann gekriegt.
Halbtransparenz kriegt man hin, indem man an den Colorwert noch einen 4ten Wert als Alphakanal dran setzt. Wenn ich an deinen Lf-mast also Color 0,0,0,125 setzen würde, wäre der mast halb durchscheinbar.
Wertebereich ist von 1 (durchsichtig) bis 255 (undurchsichtig).
Geht sowohl bei Texturen als auch bei gefärbten Flächen, bei Texturen sollte man den Farbwert auf 255,255,255 setzen, da sonst die Textur mit einem Farbstich überdeckt wird (bzw. man bei 0,0,0 nur noch schwarz sieht). Mit Color 255,255,255,125 ist also deine Lf-Tafel halbtransparent.
Zusätzlich kann man im Texturbereich mit transparent xx,xx,xx eine Transparenzfarbe angeben, die dann komplett durchsichtig ist.

Sven

Benutzeravatar
Pegasus-wtal
Beiträge: 222
Registriert: 13.03.2003 17:45:31
Wohnort: Wuppertal
Kontaktdaten:

Warnung vor B3D-Studio !!

#5 Beitrag von Pegasus-wtal »

Da mir das Dateiformat auch neu ist, hab ich mal ein bißchen herumgegoogelt. Dabei bin ich auf die Firma Brilliantdigital gestoßen, die das Programm B3D-Studio vertreibt.

Vor der Installation (auch der Trial Version) kann nur heftigst gewarnt werden !!

Es wird anscheinend aller möglicher Werbemüll etc. auf der Platte mitinstalliert.

Einen ausfühlichen Bericht über diesen Schädling gibt es hier:

http://news.com.com/2100-1023-873181.html

Benutzeravatar
Pegasus-wtal
Beiträge: 222
Registriert: 13.03.2003 17:45:31
Wohnort: Wuppertal
Kontaktdaten:

#6 Beitrag von Pegasus-wtal »

So, was nützliches hab ich doch noch gefunden. Ein Umwandlungsprogramm um in 3D Canvas erzeugte *.X Dateien in das B3D Format umzuwandeln. Erspart bestimmt eine Menge Arbeit !

Hier ist der Link:

http://www.blitzbasic.com/

scrollen bis zum Beitrag

3D Canvas .X (script) to B3D file Converter
(submitted by Stickman on 2003-10-26 12:00:10)

Benutzeravatar
Roland Ziegler
Beiträge: 5510
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#7 Beitrag von Roland Ziegler »

Solch kommerzielle Freeware oder Trialware nimmt immer groteskere Züge an. Es empfiehlt sich dringend, nach der Installation solcher Tools erst mal eine aktuellen Spyware-Scanner laufen zu lassen.

Zu 3DC und b3d: Wie schon an anderer Stelle geschrieben, gibt es auch von Paul Gausden, dem MSTS-Plugin-Bauer für 3DC, einen b3e-Exporter.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#8 Beitrag von Carsten Hölscher »

eine Konvertierung x -> b3d ist sicherlich für unsere Belange nicht wirklich nötig. Umgekehrt wäre es schon spannender.

Carsten

Sebastian Sperling
Beiträge: 2422
Registriert: 23.04.2002 17:27:44
Aktuelle Projekte: Was in der Ausbildung lernen
Wohnort: Nürnberg
Kontaktdaten:

#9 Beitrag von Sebastian Sperling »

Das b3d-Format kommt mir doch da schon wieder etwas näher als 3DCanvas und gleichartiges - irgendwie fühl' ich mich bei sowas wohl, wenn ich einfach tippen kann ;)
Ich mag Besprechungen, da muss man nichts arbeiten.

Benutzeravatar
Pegasus-wtal
Beiträge: 222
Registriert: 13.03.2003 17:45:31
Wohnort: Wuppertal
Kontaktdaten:

#10 Beitrag von Pegasus-wtal »

@Sebastian:

Siehst du, mir geht es genau andersherum. Ich erinnere mich noch, als ich (damals...) mal was für BVE gebastelt hab im B3D Format, es war eine Quälerei, wogegen man mit 3DCanvas direkt sieht, was man da baut !

Aber die Geschmäcker sind halt verschieden...

@Carsten:

Mittlerweile hab ich durch das Lesen eines anderen Postings gemerkt, dass ich B3D garnicht brauch. Eine Frage hab ich aber doch:

Gibt es irgendwelche Einschränkungen in Bezug auf die Texturen ? Größe etc ? Bei MSTS z.B. konnten nur Texturen in einem bestimmenten Größenverhältnis benutzt werden.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#11 Beitrag von Carsten Hölscher »

s.oben bei "Grundlegendes zu Texturen"

carsten

Benutzeravatar
Pegasus-wtal
Beiträge: 222
Registriert: 13.03.2003 17:45:31
Wohnort: Wuppertal
Kontaktdaten:

#12 Beitrag von Pegasus-wtal »

aah ja !

Ich dachte erst, das bezieht sich nur auf die B3D Dateien, aber da ist ja von DirektX die Rede, also gilt das wohl allgemein.


DANKE !

Benutzeravatar
Roland Ziegler
Beiträge: 5510
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

#13 Beitrag von Roland Ziegler »

Zu den Texturen: Wie man eine quadratische Fläche geschickt ausnutzt, wird im 3DC-MSTS-Tutorial mit dem historischen Güterwagen gezeigt (der mit den angemeckerten 500 Polygonen)

Benutzeravatar
Pegasus-wtal
Beiträge: 222
Registriert: 13.03.2003 17:45:31
Wohnort: Wuppertal
Kontaktdaten:

#14 Beitrag von Pegasus-wtal »

ja, das muss ich auch noch irgendwo rumliegen haben...

werd ich wohl noch mal einen Blick reinwerfen.

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

#15 Beitrag von Andreas Karg »

Sprich: Anstatt eine Extra-Datei für jeden Schmarn eine einzige große Datei und ihren Inhalt verhackstücken, sodass nach Möglichkeit jeder Pixel mit Textur für irgendwas ausgefüllt ist. Dabei ist aber meiner Ansicht nach noch eine kleine Lücke im B3D-Format. Ein ensprechendes Anzeigeprogramm KANN schlau genug sein, die Textur nur einmal in den Speicher zu schieben, wenn sie laut Code mehrfach geladen wird. Niemand hindert es aber dran. Ich hab jetz bei DirectX zugegebenermaßen nicht wirklich die große Tschekkung, kann mich aber an diverse (meiner Ansicht nach ziemlich sinnlose und den Bus eigentlich völlig unnötig belastende) Dinge erinnern, die nicht sein müssten. Falls es also einen Verantwortlichen bei Microsoft (oder bei nVidia/sonstwo?) gibt, der es erlaubt, eine Texturdatei für mehrere unabhänhige Meshes zu nutzen, ohne die Textur doppelt in den Speicher zu laden: Wieso legt man nicht gleich das Format drauf aus? Alle Naslang darf man in B3D mit irgendwelchen hochabstrakten Indizes die diversen Vertizen als Parameter für die weiterführenden Funktionen benutzen; wieso macht man sowas nicht auch mit Texturen? In einem Textur-Abschnitt eine Liste von zu ladenden Texturdateien, die geladen und durchnummeriert werden. Dann lädt man in den folgenden Texturierungs-Abschnitten nicht nochmal jede Textur einzeln und ggf. mehrfach, sondern "benutzt" sie halt nur an verschiedenen Stellen.
Das dürfte sich jetzt wahrscheinlich lesen, als müsste man nur das Dateiformat ändern, um sofort und auf der Stelle eine bessere Welt zu schaffen, in der Texturspeicher hocheffektiv ausgenutzt wird. Aber die oben angesprochenen Erinnerungen aus dem D3D-Tutorial (Damals war DX..8 oder 7, jedenfalls das erste ohne DDraw grad neu) warn doch recht prägend... Eigentlich wollte ich nur ein paar zweidimensionale Sachen auf dem Bildschirm darstellen, und zwar weniger flimmerig als mit der Delphi-Komponente TImage, die für Echtzeitanimationen nicht gebaut ist. Stattdessen sollte ich erstmal lernen, wie man mittels einer Transformationsmatrix (im Tutorial wird offensichtlich vorausgesetzt, dass man weiß, was das ist) diverse bunte Dreiecke im Raum dreht und eine Sache, die mir da ein wenig aufgestoßen ist war die Tatsache, dass offensichtlich bei jedem Frame die komplette Szene nochmal durch den Bus zur Grafikkarte gejagt wird. Ich hätte es da viel lieber gesehen, wenn der ganze Scheiß bei der GraKa bleibt und man vordefinierte Polygongruppen (=Objekte) und/oder Texturen mit diversen anderen Befehlen MODIFIZIEREN kann, sprich einfach irgendwelche WInkel ändern oder die Vertizes bereits existierender Polygone verschieben, (for great Animation) ohne halt jedes Mal den ganzen zusätzlichen Scheiß übertragen zu müssen, welche Polygone denn überhaupt existieren, eine Tatsache, die sich nur in den wenigsten Fällen vom vorhergehenden Frame unterscheiden wird. Will man irgendwelche NEUEN Sachen in den Speicher schaufeln, so könnte man das auch so noch tun und die alten rauslöschen... Muss man halt wissen, WAS man löschen will und nicht davon ausgehen, dass alles gelöscht wird und den verbleibenden Teil wieder auffüllen. Das sind alles so die Eindrücke, die ich von diesem tollen Tutorial gekriegt habe, und ich wollte doch eigentlich nur ein paar fliegende Kreise zeichnen... :(
Ich habs dann irgendwie aufgegeben, weil ich die supertollkrasgeilen Erklärungen im DX-Tutorial nicht geblickt habe, (is auch schon ne Weile her) weil mich die Sache nach ner Weile einfach genervt hat und weil die Deppen von Microsoft DirectDraw (welches WIMNI vergleichsweise simpel zu bedienen war) einfach "aus dem Programm" (zumindest aus der Doku) genommen haben, ohne Anfängern einen vergleichbaren Ersatz zu bieten.

OT-Geschwalle Ende.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#16 Beitrag von Carsten Hölscher »

DirectX macht das, was man ihm sagt und kümmert sich nicht selbst um die Verwaltung der Ressourcen. Das wäre vermutlich auch (wenn es zwangsweise so wäre) nicht immer im Sinne des Programmierers. Bei Zusi 3.0 wird eine Textur nur einmal im Speicher gehalten, auch wenn sie 623x in verschiedenen b3d- und x-Files benutzt wird.
Ein bißchen kann der Erbauer aber auch zu sinnvollem Ressourceneinsatz beitragen. In Deinem Beispiel würde man optimalerweise alle Vertices und Faces in einer Polygongruppe zusammenfassen, das ist erheblich effektiver als zig einzelne [Meshcontainer]+[Textures]-Abschnitte.

Edit: Daß es das DDraw-Tutorial nicht mehr gibt, könnte daran liegen, dass es DDraw auch nicht mehr gibt... ;D

Carsten
Zuletzt geändert von Carsten Hölscher am 06.11.2003 16:37:55, insgesamt 1-mal geändert.

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

#17 Beitrag von Andreas Karg »

DDraw gibt es meines Wissens noch wegen Abwärtskompatibilität. Aber es ist nirgends dokumentiert oder erwähnt oder so.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#18 Beitrag von Carsten Hölscher »

es gibt natürlich sämtliche alte Schnittstellen weiterhin, sonst würde ja mit DirectX9 eine DirectX7-Anwendung wie Zusi 2.3 nicht mehr laufen. Bei DiretX8+9 ist DDraw aber nicht mehr vorhanden.

Carsten

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

#19 Beitrag von Andreas Karg »

Nun gut. Ändert nix an der Tatsache, dass es den Leuten nicht grad leicht gemacht wird, mal eben eine hardwarebeschleunigte zwecks flimmerfreie Darstellung von vielen Bildern in kurzer Zeit zu bauen.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33517
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

#20 Beitrag von Carsten Hölscher »

Falls "flimmerig" den zu langsamen Bildaufbau meint: Da kann man auch (wie der Strecken-Eddi) erst im Hintergrund ein TBitmap bemalen und dann in einem Schlag nach vorne bringen, ohne erst mit DirectX rumzuwerkeln.

Carsten

Antworten