 | quoi ist XPGL? XPGL steht pour XProfanGraphicsLanguage. Inspiriert wurde je en supplément de qui Textdatei, qui qui "Welt" dans Lektion 10 de NeHe's OpenGL-Tutorial beschreibt: <a href='https://nehe.gamedev.net/'>Neon Helium OpenGL Tutorial</a>
dans diesem Tutorial wurde qui Textdatei allerdings lediglich benutzt, cet monde trop décrire. Im Programme wurde vous ensuite Dreieck pour Dreieck ausgelesen et dargestellt. cela était mir entschieden trop lente. L'idée trop XPGL kam mir ensuite, comme je mich avec den Vektor-Funktionen de OpenGL befaßte, qui es ermöglichen pour Vertex (Koordinaten), la couleur, Texturabschnitt et Normalwerte je un Datenarray (= Vektor) anzugeben et cela Ganze ensuite avec einem einzigen OpenGL-Befehl sur den Bildschirm trop apporter.
L'idée était, cet Textdatei so umzugestalten, qui vous possible universell ist (alors pas seulement pour Dreiecke avec Textur funktioniert) et derart dans den grenier gelesen wird, qui vous avec einem OpenGL-Befehl angezeigt volonté peux. avec cela était XPGL née.
[head]XPGL besteht alors aus folgenden Komponenten[/head] voilà zunächst qui XPGL-Dossier, qui qui données qui darzustellenden "Welt" contient.
ensuite gibt es une Datenstruktur dans XProfan, qui cet Werte aufnimmt. avec @oGL("LoadXPGL " peux une XPGL-fichier dans den grenier geladen volonté. Es peut jusque 1999 XPGL-Fichiers gleichzeitig im grenier son, si le Ausstattung des Rechners avec RAM es hergibt.
avec qui @oGL("UseXPGL " volonté qui données einer XPGL-Datenstruktur blitzschnell à cela OpenGL-System übetragen. Ab ici übernimmt qui Grafik-carte, sofern vous OpenGL-fähig ist. (chez älteren Karten käme ici qui OpenGL-Treiber et qui RAM des Rechners zum Einsatz, quoi pas très effizient ist.)
cela dernier Glied dans qui Kette ist qui Funktion @oGL("DrawXPGL ", avec qui qui komplette "Welt" (ou bien un beliebiger partie derselben) sur den OpenGL-Bildschirm gebracht wird.
comme zusätzliche Possibilité ist encore vorgesehen, qui geladenen XPGL-données avec o@GL("SaveXPGLData " comme binäres Datenfile abzuspeichern et oGL("LoadXPGLData " wieder trop magasin. avec @oGL("CreateXPGL " peux on XPGL-données aussi direct im Programme erzeugen. @oGL("XPGLCount " ermittel le nombre qui Punkte dans den XPGL-données, @oGL("XPGLObjType " ermittelt den Objekttyp et @oGL("XPGLType " qui Art qui Werte.
[head]cela Format einer XPGL-Dossier[/head] une XPGL-Dossier est un Textdatei. Zeilen qui avec einem "/" commencer, volonté comme Kommentarzeilen interpretiert et überlesen. Leerzeilen dienen qui Gliederung et volonté aussi überlesen.
important ist qui 1. données-la ligne: elle a qui Struktur Objekttyp; Art qui Werte; Anzahl[; Autonormal] (4 Werte, par Komma getrennt). Autonormal peux être omis. qui anderen Werte doit vorhanden son.
Objekttyp:
·P = Punkt ·L = Line ·T = Triangle ·Q = Quad ·LS = Line-Strip ·LL = Line-Boucle ·TS = Triangle-Strip ·TF = Triangle-Fan ·QS = Quad-Strip ·PY = Polygon
Art qui Werte:
·V = Vertex (Koordinaten des Punktes: 3 Werte/Punkt) ·C = Color (4 Werte/Punkt) ·T = Textur (2 Werte/Punkt) ·N = Normal(3 Werte/Punkt)
Beispiel: VT (Vertex + Textur)
cela V pour Vertex doit toujours vorhanden son.
Anzahl:
Nombre de Objekte (chez Q, T et L) bzw. Nombre de Punkte (chez allen anderen).un Quad hat 4, un Triangle hat 3 et une Line hat 2 Punkte
4 Werte pour "Autonormal":
x, y et z pour den Mittelpunkt des Objektes et qui Normalwert (0.5 si le Beleuchtung de außen venez, -0.5 si vous de dedans venez). Werden cet Werte trotz des Kennzeichens "N" weggelassen, volonté hierfür qui Defaultwerte de 0, 0, 0, 0.5 angenommen.
Beispiele pour une 1. la ligne:
T;VT;36 (36 Triangles avec Vertex et Textur)
T;VTN;36;0,-0.5,-2,0.5 (zusätzlich automatisches Erstellen des Normal-Vektors, si aucun Normal-Werte vorhanden sommes
qui weiteren Zeilen enthalten qui Wertegruppen: Gruppen getrennt par ";", Werte getrennt par ",". cela Dezimaltrennzeichen chez den Werten ist qui Punkt. qui Wertegruppen doit dans qui gleichen Reihenfolge stehen, comment qui Kennzeichen pour qui Art qui Werte. Im piège de "VT" stehen alors dans chacun la ligne zunächst qui trois par Komma getrennten Koordinaten, ensuite folgen pour einem Semikolon qui beiden par un Komma getrennten Textur-Koordinaten.
Wird chez qui Werteart N avec angegeben, liegen mais aucun N-Werte avant, volonté cet automatisch generiert.
une détaillé Beschreibung avec Beispielen findet sich im ogl->xpgl 
[head]Beispielinhalt einer XPGL-Dossier:[/head]
T;VT;36
// Normale sommes pas angegeben, daher wird 1, 1, 1 pris
// Floor 1
-13.0, 0, -13.0; 0.0, 130.0
-13.0, 0, 13.0; 0.0, 0.0
13.0, 0, 13.0; 130.0, 0.0
-13.0, 0, -13.0; 0.0, 130.0
13.0, 0, -13.0; 130.0, 130.0
13.0, 0, 13.0; 130.0, 0.0
// Ceiling 1
-3.0, 1.0, -3.0; 0.0, 1.0
-3.0, 1.0, 3.0; 0.0, 0.0
3.0, 1.0, 3.0; 1.0, 0.0
-3.0, 1.0, -3.0; 0.0, 1.0
3.0, 1.0, -3.0; 1.0, 1.0
3.0, 1.0, 3.0; 1.0, 0.0
// A1
-2.0, 1.0, -2.0; 0.0, 1.0
-2.0, 0.0, -2.0; 0.0, 0.0
-0.5, 0.0, -2.0; 1.5, 0.0
-2.0, 1.0, -2.0; 0.0, 1.0
-0.5, 1.0, -2.0; 1.5, 1.0
-0.5, 0.0, -2.0; 1.5, 0.0
// A2
2.0, 1.0, -2.0; 2.0, 1.0
2.0, 0.0, -2.0; 2.0, 0.0
0.5, 0.0, -2.0; 0.5, 0.0
2.0, 1.0, -2.0; 2.0, 1.0
0.5, 1.0, -2.0; 0.5, 1.0
0.5, 0.0, -2.0; 0.5, 0.0
// B1
-2.0, 1.0, 2.0; 2.0, 1.0
-2.0, 0.0, 2.0; 2.0, 0.0
-0.5, 0.0, 2.0; 0.5, 0.0
-2.0, 1.0, 2.0; 2.0, 1.0
-0.5, 1.0, 2.0; 0.5, 1.0
-0.5, 0.0, 2.0; 0.5, 0.0
// B2
2.0, 1.0, 2.0; 2.0, 1.0
2.0, 0.0, 2.0; 2.0, 0.0
0.5, 0.0, 2.0; 0.5, 0.0
2.0, 1.0, 2.0; 2.0, 1.0
0.5, 1.0, 2.0; 0.5, 1.0
0.5, 0.0, 2.0; 0.5, 0.0
// C1
-2.0, 1.0, -2.0; 0.0, 1.0
-2.0, 0.0, -2.0; 0.0, 0.0
-2.0, 0.0, -0.5; 1.5, 0.0
-2.0, 1.0, -2.0; 0.0, 1.0
-2.0, 1.0, -0.5; 1.5, 1.0
-2.0, 0.0, -0.5; 1.5, 0.0
// C2
-2.0, 1.0, 2.0; 2.0, 1.0
-2.0, 0.0, 2.0; 2.0, 0.0
-2.0, 0.0, 0.5; 0.5, 0.0
-2.0, 1.0, 2.0; 2.0, 1.0
-2.0, 1.0, 0.5; 0.5, 1.0
-2.0, 0.0, 0.5; 0.5, 0.0
// D1
2.0, 1.0, -2.0; 0.0, 1.0
2.0, 0.0, -2.0; 0.0, 0.0
2.0, 0.0, -0.5; 1.5, 0.0
2.0, 1.0, -2.0; 0.0, 1.0
2.0, 1.0, -0.5; 1.5, 1.0
2.0, 0.0, -0.5; 1.5, 0.0
// D2
2.0, 1.0, 2.0; 2.0, 1.0
2.0, 0.0, 2.0; 2.0, 0.0
2.0, 0.0, 0.5; 0.5, 0.0
2.0, 1.0, 2.0; 2.0, 1.0
2.0, 1.0, 0.5; 0.5, 1.0
2.0, 0.0, 0.5; 0.5, 0.0
// Upper hallway - L
-0.5, 1.0, -3.0; 0.0, 1.0
-0.5, 0.0, -3.0; 0.0, 0.0
-0.5, 0.0, -2.0; 1.0, 0.0
-0.5, 1.0, -3.0; 0.0, 1.0
-0.5, 1.0, -2.0; 1.0, 1.0
-0.5, 0.0, -2.0; 1.0, 0.0
// Upper hallway - R
0.5, 1.0, -3.0; 0.0, 1.0
0.5, 0.0, -3.0; 0.0, 0.0
0.5, 0.0, -2.0; 1.0, 0.0
0.5, 1.0, -3.0; 0.0, 1.0
0.5, 1.0, -2.0; 1.0, 1.0
0.5, 0.0, -2.0; 1.0, 0.0
// Lower hallway - L
-0.5, 1.0, 3.0; 0.0, 1.0
-0.5, 0.0, 3.0; 0.0, 0.0
-0.5, 0.0, 2.0; 1.0, 0.0
-0.5, 1.0, 3.0; 0.0, 1.0
-0.5, 1.0, 2.0; 1.0, 1.0
-0.5, 0.0, 2.0; 1.0, 0.0
// Lower hallway - R
0.5, 1.0, 3.0; 0.0, 1.0
0.5, 0.0, 3.0; 0.0, 0.0
0.5, 0.0, 2.0; 1.0, 0.0
0.5, 1.0, 3.0; 0.0, 1.0
0.5, 1.0, 2.0; 1.0, 1.0
0.5, 0.0, 2.0; 1.0, 0.0
// À gauche hallway - Lw
-3.0, 1.0, 0.5; 1.0, 1.0
-3.0, 0.0, 0.5; 1.0, 0.0
-2.0, 0.0, 0.5; 0.0, 0.0
-3.0, 1.0, 0.5; 1.0, 1.0
-2.0, 1.0, 0.5; 0.0, 1.0
-2.0, 0.0, 0.5; 0.0, 0.0
// À gauche hallway - Hi
-3.0, 1.0, -0.5; 1.0, 1.0
-3.0, 0.0, -0.5; 1.0, 0.0
-2.0, 0.0, -0.5; 0.0, 0.0
-3.0, 1.0, -0.5; 1.0, 1.0
-2.0, 1.0, -0.5; 0.0, 1.0
-2.0, 0.0, -0.5; 0.0, 0.0
// Right hallway - Lw
3.0, 1.0, 0.5; 1.0, 1.0
3.0, 0.0, 0.5; 1.0, 0.0
2.0, 0.0, 0.5; 0.0, 0.0
3.0, 1.0, 0.5; 1.0, 1.0
2.0, 1.0, 0.5; 0.0, 1.0
2.0, 0.0, 0.5; 0.0, 0.0
// Right hallway - Hi
3.0, 1.0, -0.5; 1.0, 1.0
3.0, 0.0, -0.5; 1.0, 0.0
2.0, 0.0, -0.5; 0.0, 0.0
3.0, 1.0, -0.5; 1.0, 1.0
2.0, 1.0, -0.5; 0.0, 1.0
2.0, 0.0, -0.5; 0.0, 0.0
|
|