| Was es XPGL? XPGL es para XProfanGraphicsLanguage. Inspiriert wurde Yo dazu de el Textdatei, el el "Welt" en Lektion 10 de NeHe's OpenGL-Tutorial beschreibt: <a href='https://nehe.gamedev.net/'>Neon Helium OpenGL Tutorial</a>
In diesem Tutorial wurde el Textdatei allerdings lediglich benutzt, esta Welt a beschreiben. Im Programa wurde ellos entonces Dreieck para Dreieck ausgelesen y dargestellt. Das war me entschieden a langsam. La idea a XPGL kam me entonces, como Yo mich con el Vektor-Características de OpenGL befaßte, el lo ermöglichen para Vertex (Koordinaten), Farbe, Texturabschnitt y Normalwerte je una Datenarray (= Vektor) anzugeben y el Ganze entonces con un einzigen OpenGL-Befehl en el Bildschirm a bringen.
La idea war, esta Textdatei así umzugestalten, daß ellos möglichst universell es (also no sólo para Dreiecke con Textur funktioniert) y derart en el Speicher gelesen se, daß ellos con un OpenGL-Befehl adecuado voluntad kann. Damit war XPGL geboren.
[head]XPGL besteht also de folgenden Komponenten[/head] Como es primero el XPGL-Expediente, el el Daten el darzustellenden "Welt" enthält.
Dann hay una Datenstruktur en XProfan, el esta Werte aufnimmt. Mit @oGL("LoadXPGL " kann una XPGL-datei en el Speicher geladen voluntad. Lo puede a a 1999 XPGL-Archivos gleichzeitig en el Speicher ser, si la Ausstattung des Rechners con RAM lo hergibt.
Mit el @oGL("UseXPGL " voluntad el Daten uno XPGL-Datenstruktur blitzschnell a el OpenGL-Sistema übetragen. Ab hier übernimmt el Grafik-Karte, sofern ellos OpenGL-fähig es. (En älteren Karten käme hier el OpenGL-Treiber y RAM des Rechners para Einsatz, qué no muy effizient es.)
Das letzte Glied en el Kette Es el Función @oGL("DrawXPGL ", con el el komplette "Welt" (oder una beliebiger Teil derselben) en el OpenGL-Bildschirm gebracht se.
Als zusätzliche Möglichkeit es todavía vorgesehen, el geladenen XPGL-Daten con o@GL("SaveXPGLData " como binäres Datenfile abzuspeichern y oGL("LoadXPGLData " otra vez a invitar. Mit @oGL("CreateXPGL " puede ser XPGL-Daten auch direkt en el Programa erzeugen. @oGL("XPGLCount " ermittel el número el Punkte en el XPGL-Daten, @oGL("XPGLObjType " ermittelt el Objekttyp y @oGL("XPGLType " el Art el Werte.
[head]Das Formato uno XPGL-Expediente[/head] Un XPGL-Expediente es una Textdatei. Zeilen el con un "/" beginnen, voluntad como Kommentarzeilen interpretiert y überlesen. Leerzeilen dienen el Gliederung y voluntad auch überlesen.
Wichtig Es el 1. Daten-Línea: Sie ha el Struktur Objekttyp; Art el Werte; Anzahl[; Autonormal] (4 Werte, por Komma getrennt). Autonormal kann weggelassen voluntad. El otro Werte necesario disponible ser.
Objekttyp:
·P = Punkt ·L = Line ·T = Triangle ·Q = Quad ·LS = Line-Strip ·LL = Line-Loop ·TS = Triangle-Strip ·TF = Triangle-Fan ·QS = Quad-Strip ·PY = Polygon
Art el Werte:
·V = Vertex (Koordinaten des Punktes: 3 Werte/Punkt) ·C = Color (4 Werte/Punkt) ·T = Textur (2 Werte/Punkt) ·N = Normal(3 Werte/Punkt)
Ejemplo: VT (Vertex + Textur)
Das V para Vertex muß siempre disponible ser.
Anzahl:
Anzahl los objetos (en Q, T y L) o. Anzahl el Punkte (en allen otro).Ein Quad ha 4, una Triangle ha 3 y una Line ha 2 Punkte
4 Werte para "Autonormal":
x, y y z para el Mittelpunkt des Objektes y Normalwert (0.5 si la Beleuchtung de außen kommt, -0.5 si ellos de innen kommt). Werden esta Werte trotz des Kennzeichens "N" weggelassen, voluntad esta el Defaultwerte de 0, 0, 0, 0.5 angenommen.
Beispiele para una 1. Línea:
T;VT;36 (36 Triangles con Vertex y Textur)
T;VTN;36;0,-0.5,-2,0.5 (zusätzlich automatisches Erstellen des Normal-Vektors, si no Normal-Werte disponible son
El más Zeilen enthalten el Wertegruppen: Gruppen getrennt por ";", Werte getrennt por ",". Das Dezimaltrennzeichen en el Werten es el Punkt. El Wertegruppen necesario en el gleichen Reihenfolge posición, como Kennzeichen para el Art el Werte. Im Falle de "VT" posición also en cada Línea primero el drei por Komma getrennten Koordinaten, entonces folgen una Semikolon el beiden por una Komma getrennten Textur-Koordinaten.
Wird en Werteart N con angegeben, mentira pero no N-Werte antes, voluntad esta automáticamente generiert.
Un ausführlichere Descripción con Beispielen findet se en el ogl->xpgl
[head]Beispielinhalt uno XPGL-Expediente:[/head]
T;VT;36
// Normale son no angegeben, por lo tanto se 1, 1, 1 genommen
// 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
// Left 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
// Left 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
|
|