Italia
Online-Documentazione

ogl.xpgl Erklärung: OpenGL

 
Was ist XPGL? XPGL steht per XProfanGraphicsLanguage. Inspiriert wurde ich dazu von der Textdatei, die die "Welt" in Lektion 10 von NeHe's OpenGL-Tutorial beschreibt: <a href='https://nehe.gamedev.net/'>Neon Helium OpenGL Tutorial</a>

In diesem Tutorial wurde die Textdatei allerdings lediglich benutzt, diese Welt zu beschreiben. Im Programm wurde sie dann Dreieck per Dreieck ausgelesen und dargestellt. Das war mir entschieden zu langsam. Die Idee zu XPGL kam mir dann, als ich mich mit den Vektor-Funktionen von OpenGL befaßte, die es ermöglichen per Vertex (Koordinaten), Farbe, Texturabschnitt und Normalwerte je ein Datenarray (= Vektor) anzugeben und das Ganze dann mit einem einzigen OpenGL-Befehl auf den Bildschirm zu bringen.

Die Idee war, diese Textdatei so umzugestalten, daß sie possibile universell ist (also nicht nur per Dreiecke mit Textur funktioniert) und derart in den Speicher gelesen wird, daß sie mit einem OpenGL-Befehl angezeigt werden kann. Damit war XPGL geboren.

[head]XPGL besteht also aus folgenden Komponenten[/head]
Da ist zunächst die XPGL-File, die die Daten der darzustellenden "Welt" enthält.

Dann gibt es eine Datenstruktur in XProfan, die diese Werte aufnimmt. Mit @oGL("LoadXPGL " kann eine XPGL-datei in den Speicher geladen werden. Es können bis zu 1999 XPGL-File gleichzeitig im Speicher sein, wenn die Ausstattung des Rechners mit RAM es hergibt.

Mit der @oGL("UseXPGL " werden die Daten einer XPGL-Datenstruktur blitzschnell an das OpenGL-System übetragen. Ab hier übernimmt die Grafik-Karte, sofern sie OpenGL-fähig ist. (Bei älteren Karten käme hier der OpenGL-Treiber und der RAM des Rechners zum Einsatz, was nicht sehr effizient ist.)

Das letzte Glied in der Kette ist die Funktion @oGL("DrawXPGL ", mit der die komplette "Welt" (oder ein beliebiger Teil derselben) auf den OpenGL-Bildschirm gebracht wird.

Als zusätzliche Möglichkeit ist noch vorgesehen, die geladenen XPGL-Daten mit o@GL("SaveXPGLData " als binäres Datenfile abzuspeichern und mit oGL("LoadXPGLData " wieder zu laden. Mit @oGL("CreateXPGL " kann man XPGL-Daten auch direkt im Programm erzeugen. @oGL("XPGLCount " ermittel die Anzahl der Punkte in den XPGL-Daten, @oGL("XPGLObjType " ermittelt den Objekttyp und @oGL("XPGLType " die Art der Werte.

[head]Das Format einer XPGL-File[/head]
Eine XPGL-File ist ein Textdatei. Zeilen die mit einem "/" beginnen, werden als Kommentarzeilen interpretiert und überlesen. Leerzeilen dienen der Gliederung und werden auch überlesen.

Wichtig ist die 1. Daten-Zeile: Sie hat die Struktur Objekttyp; Art der Werte; Anzahl[; Autonormal] (4 Werte, durch Komma getrennt). Autonormal kann weggelassen werden. Die anderen Werte müssen vorhanden sein.

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 der 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)

Das V per Vertex muß immer vorhanden sein.

Anzahl:

Anzahl der Objekte (bei Q, T und L) bzw. Anzahl der Punkte (bei allen anderen).Ein Quad hat 4, ein Triangle hat 3 und eine Line hat 2 Punkte

4 Werte per "Autonormal":

x, y und z per den Mittelpunkt des Objektes und der Normalwert (0.5 wenn die Beleuchtung von außen kommt, -0.5 wenn sie von innen kommt). Werden diese Werte trotz des Kennzeichens "N" weggelassen, werden hierfür die Defaultwerte von 0, 0, 0, 0.5 angenommen.

Beispiele per eine 1. Zeile:

T;VT;36 (36 Triangles mit Vertex und Textur)

T;VTN;36;0,-0.5,-2,0.5 (zusätzlich automatisches Erstellen des Normal-Vektors, wenn keine Normal-Werte vorhanden sind

Die weiteren Zeilen enthalten die Wertegruppen: Gruppen getrennt durch ";", Werte getrennt durch ",". Das Dezimaltrennzeichen bei den Werten ist der Punkt. Die Wertegruppen müssen in der gleichen Reihenfolge stehen, wie die Kennzeichen per die Art der Werte. Im Falle von "VT" stehen also in jeder Zeile zunächst die drei durch Komma getrennten Koordinaten, dann folgen nach einem Semikolon die beiden durch ein Komma getrennten Textur-Koordinaten.

Wird bei der Werteart N mit angegeben, liegen aber keine N-Werte vor, werden diese automatisch generiert.

Eine dettagliato Beschreibung mit Beispielen findet sich im ogl->xpgl 

[head]Beispielinhalt einer XPGL-File:[/head]
T;VT;36
// Normale sind nicht angegeben, daher wird 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

 
22.12.2006  
 



Note / Question or Comment to the Help--Topic


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

584 Views

Untitledvor 0 min.
H.Brill31.05.2024
Sven Bader03.08.2021
ByteAttack04.02.2016
maxilars26.11.2015
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

iF (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie