ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4442018
Jetzt (Chat):
31 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"BSP-2-Portalmap Konverter" von Torsten Richter (Torsten Richter)


Eine einfache sektorbasierende Portalenerige zu programmieren ist nicht allzu schwer.
Aber wie erzeugt man dann die Maps?
Die Maps mit einen Modelleditor zu erstellen, erwies
sich als sehr umständlich. (Punkte,Flächen,Portale..)
Die meisten Indoor-Editoren arbeiten mit sogenannten Blocks
die sich frei positionieren lassen, auch ineinander verschoben.
Die CSG des BSP-Compilers rechnet dann die nach außen sichtbaren Flächen heraus.
Einen ganzen Editor mit CSG zu schreiben war mir zu zeitaufwendig.
Warum nicht vorhandene Programm, die sich bewehrt haben, für eigene Zwecke nutzen?
Ich habe mich dabei für den Worldcraft-Editor entschieden.
Bei der Erstellung geht man wie folgt vor:
Die Maps mit Worldcraft erstellen und zu einer Bspmap compilieren.
Dann Portalmapkonverter starten, Bspmap laden,alle Portale festlegen.
Nun braucht man nur noch die Sektoren berechnen lassen und fertig.
Am Ende kann man noch die Performance testen und notfalls noch ein Portal einfügen.

Die blauen Flächen im oberen Bild sind die von Hand festgelegten Portale.
Unten sieht man die daraus berechneten Sektoren.


Download: http://www.3dprogrammierung.gmxhome.de/daten/portkonv.zip






Von Eisflamme am 08.06.2003, 10:50:59 Uhr
Hallo,

das sieht ja sehr fein aus :)
Aber der Download scheint nicht zu klappen. :(

MfG MAV

Von Timm von Puttkamer am 08.06.2003, 10:52:06 Uhr
Das sieht wirklich sehr gut aus! Aber der Link funktioniert nicht! Error 404

@Mis2Com: Telepathie? (oder wie man das schreibt)
lol

Von Cme am 08.06.2003, 11:12:23 Uhr
Hi,
sieht echt sehr gut aus !! Repeckt. Auch der Editor ist ziemlich umfassend.

Schaut doch einfach auf http://www.3dprogrammierung.gmxhome.de/#modeleditor

da kann man ihn runterladen....

Von ChrisM am 08.06.2003, 11:14:51 Uhr
Respekt, sieht wirklich gut aus (also net nur die Map, weil die iss ja AFAIK von Half-Life und hinten links holt man seinen Schutzanzug, oder? sondern die Technik)! :D

ChrisM

Von Mr.DX am 08.06.2003, 11:26:12 Uhr
Sieht sehr gut aus. Doch überprüfe noch mal den Link, bei mir findet er die Datei nicht.

Von gibbets2000 am 08.06.2003, 12:12:39 Uhr
finde ich toll.

@ChrisM
genial, wie du das so schnell erkannt hast.
Ich hab es erst noch deinem post und beim zweiten hinsehen erkannt ;) :D

Von Torsten Richter am 08.06.2003, 13:08:31 Uhr
Jetzt geht der Download! Ich war noch nicht ganz ferig.
Habe noch Exportfunktion , die die im Map verwendete Texturen als JPEGs abspeichert, eingebaut.
Ich möchte niemanden einen Download für die 37MB große 'halflife.wad' zumuten.
Die MAP und die Texturen sind von HL ausgeborgt.

Von Marc7759 am 08.06.2003, 13:42:42 Uhr
Hi,

dein Konverter gefällt mir sehr gut!!!
Da ich aber immer noch noch so recht weis, wozu Portale und Sektoren da sind, hätte ich an dieser Stelle mal ein paar Fragen:

1. Wozu sind Portale gut??? (Für die Performance...Das weis ich schon... :) Aber was tragen die Portale dazu bei ???)
2. Wozu sind Sektoren da ???
(Ich habe gesehen, dass wenn man sich von einem in ein anderen Sektor begibt, dass dann (durch anzeige des Overdraws) Räume (oder Teile davon) hinter den Portalen des betretenen Sektors gezeichnet werden...Wo ist der zusammanhang ??? Also, wiso werden diese beim Betreten eines Sektors gezeichnet ??? Was ist die Ursache ???)

3. Warum sind mache Portale rot ???

Jo, danke schon mal im Voraus...

Von Tanubi am 08.06.2003, 14:19:24 Uhr
Warum is im hellblauen Sektor vorne eine Wand weiß?

blutigerAnfaenger

Von Torsten Richter am 08.06.2003, 14:32:53 Uhr
"Wozu sind Sektoren da ?"

Sektoren werden zur Unterteilung der Map-Geometrie genötigt.
Damit man einfacher die sichtbaren Flächen ermitteln kann.
Sektoen sind sowas wie die einzelnen Räume in einen Gebäute.

"Wozu sind Portale gut?"

Portale verbinden die Sektoren untereinander.
Es ist eine Art Sichtfenster in den nächsten Sektor.
Nur Flächen vom nächsten Sektor, die in diesen Sichtfenster liegen , sind
wirklich Sichtbar und brauchen gerendert werden.
Um dies zutesten:
1. die BSP-Map sollte natürlich geladen sein
2. mit 'F9' Portalmap erzeugen
3. Kamera innerhalb der Map positionieren
4. und mit '5' auf Portalmapdarstellung umschalten
5. zuletzt mit 'T' Owerdrawtest einschalten.
Jetzt bekommen alle gezeichneten Flächen einen weißen Rand (auch verdeckte).
Nun kann man ,wenn man die Sicht ändert, wunderbar sehen wie Flächen hinter
einen Portal im nächsten Sektor erscheinen oder verschwinden.

"Warum sind mache Portale rot ?"

Portale können mit der "linken Maustaste+Strg" selectiert werden und erscheinen dann rot.
Nur dieses eine Rote kann mit der "Del-Taste" gelöscht werden.





Von Timm von Puttkamer am 08.06.2003, 14:37:26 Uhr
Kann man irgendwie VSync abschalten?
Verwendest du OpenGL?

Von Marc7759 am 08.06.2003, 16:55:11 Uhr
Danke!! Jetzt ist mir einiges klar geworden...

Also, ich glaube, das der Algo etwa so funzt:
Man befindet sich in einem Sektor1. Nun wird per ViewFrustrum ermittelt, welche Portale des Sektors1 (in dem ich mich grad befinde) ich sehe. OK, nun hat man den Sektor2/die Sektoren2 die sich hinter dem Portal befinden und testet die Leafs des BSP-Trees gegen den Frustrum vom Portal aus.

Was wenn aber ein Portal im Sektor2 auch gesehen wird ??? Wird dann der Sektor hinter dem Portal auch gegen den Frustrum getestet ???
Wie funktioniert es also im allgemeinen, wenn sich Portale im gesehenen Sektor befinden ???

Von Torsten Richter am 08.06.2003, 19:04:30 Uhr
@SlimTimmy:
Ja, ich verwende OpenGL.

@Marc7759:
Der Algoritmus arbeitet rekursiv.
Mit dem BSP-Tree wird nur der Startsektors ermitteln in dem sich die Kamera befindet.
Der Frustrum wird immer weiter verkleinert bis kein Sektorportal mehr in ihm liegt.

Algoritmus:
Code:
*Frustrum auf Bildschirmgröße zurücksetzen
   *Startsektors ermitteln mit BSP-Tree (sind eigenlich noch Knoten mit einer Ebene und 2 Kinderknoten,am Ende steht in diesen die Sektornummer)
   *'indoor_DrawSectorRekursiv(startsector)' aufrufen
         *alle Eckpunkte von Sektor gegen Frustrumebenen testen und
          Ergebnis in 'indoor_visflag[]' merken für Flächentest
         *für jede Sektorfläche:
               -sind alle Eckpunkte von Fläche hinder einer Frustrumebene? (außerhalb des Frustrum)
               -Ja ,dann Fläche nicht sichtbar!
               -Nein ,Fläche rendern

         *für alle Portale von Sektor:
              ist Portal in Frustrum?
              Ja,dann..
                   *Frustrum merken
                   *Frustrum verkleinern auf sichtbare Portalgröße 
                   *rekursiv 'indoor_DrawSectorRekursiv(portalzielsector)' aufrufen
                   *Frustrum zurücksetzen auf vorige Größe

Von Etahfrance am 09.06.2003, 16:16:07 Uhr
Ersteinmal: Sieht echt super aus.
Ich würde das nicht hinkrigen (liegt wahrscheinlich daran, dass ich mich mir gui nicht auskenne) Sorry für die dumme Frage: Wurde das PVS System nicht genau dazu entwickelt, damit man die Portale nicht alle selbst festlegen muss?

Von ThunderEye am 09.06.2003, 16:25:55 Uhr
Hi,
mann Spitzenteil!!!
Ich bin zwar erst am Anfang mit der Programmierung. ( hab Band I erst bis Seite 50 durch... lol ) Aber das ist ein sehr Hilfreiches Tool! :) Das mit dem selbersetzen der Portals finde ich schon richtig, denn so hat man halt "die ganze Macht" über seine Map und kann genaustens festlegen, wie, was, wann gerendert wird.
Mfg
ThunderEye

PS: Das Tool kommt auf meine Sicherungs CD, damit ich es nie mehr verliere. ;) Ist echt Top mann! :)

Von Torsten Richter am 09.06.2003, 20:12:40 Uhr
@Etahfrance:
@ThunderEye:

Sorry. Aber ihr habt da was falsch verstanden.
Das Programm dient nur dazu um eine HL-Map in mein eigenes Mapformat zu konvergieren.
ES macht also aus einer .BSP-datei eine .POR-Datei .
Wem's interessiert mein Dateiformat ist folgender Maßen aufgebaut:
http://www.3dprogrammierung.gmxhome.de/daten/portal.h
Ich könnnte, wenn Band III erschiehen ist, auch eine Unterstützung
für Stefans Portal basierte Engine mit einbauen.

Von Milkshapekiller am 09.06.2003, 22:51:46 Uhr
Schöne Arbeit, gefällt mir. :)

Von Diablo_bth am 10.06.2003, 14:42:25 Uhr
@Torsten:
dein Ansatz ist sehr interessant und zuerst dachte ich sogar, dass dein konverter die Portale automatisch bestimmt. (das hätte mich zutiefst beeindruckt!)
nach diesem Schema des Portal-per-editor-setzten arbeitet auch z.B. die Unreal2 oder Doom3 Engine. Hast Du oder irgend jemand sonst hier sich vielleicht schonmal gedanken gemacht wie man diesen Portalisierungsprozess automatisieren könnte ?? Klar weiß ich dass man Portale bei normaler BSP-Erstellung machen kann. Aber bei komplexer Architektur ist diese Methode nicht immer ratsam. Das sieht man auch an obogem Bild, welches BSP-Technisch viel mehr Portale haben müsste. Mein Ziel wäre es einen Algorithmus zu erstellen, welcher so vernünftig wie in obigem Bild die Portale setzten würde - vielleicht hat da jemand ne Idee,

thx & cya Diablo

Von Torsten Richter am 10.06.2003, 16:01:39 Uhr
@Diablo_bth:

Über die Möglichkeit Portale automatisch zu erzeugen darüber habe ich mir auch schon den
Kopf zerbrochen. Aber wie der BSP-Complier die Leafs anlegt, darauf hat man nun
mal wenig Einfluß. Es kann passieren das eins mitten durch einen Türrahmen
hindurch geht. Dieses Leaf wird dann bei mir automatisch gesplittet ,so das die eine
Hälfte vor und die andere hinter meinen handgesetzten Portal liegt.

Die Portale von Hand festlegen geht eigenlich relativ schnell,3-4 Punkte anklicken,
Enter-Taste und fertig ist das Portal. Die Positionen werden in einer Texdatei
gespeichert so das man bei Änderung der Map nicht wieder von vorn anfangen muß.

Ich berechne Intern natürlich auch die Leafsportale um die Leafs zu Sektoren
zusammenzufassen. Kommt der Alguritmus an ein handgesetztes Portal dann
ist Feierabend und es beginnt ein neuer Sektor.