Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

OpenGL-Bibliothek

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 14.03.2006, 15:00    Titel: OpenGL-Bibliothek Antworten mit Zitat

Servus!

Beim Rumspielen mit OpenGL hatte ich mich mal wieder geärgert, mir aus irgendwelchen Quellen mehr-oder-weniger guten Code zur Texturierung zusammenkopieren zu müssen. Rüberkopierter Code funktioneiert allerdings in den seltensten Fällen 100%ig, sondern meißt mit irgendwelchen Macken, weil man irgendwas übersehen hat. Irgendwann hat mir die Fehlersuche so gestunken, dass ich mich hingesetzt habe, und diese Funktion einmal richtig und sauber zu programmieren, um sie immer parat zu haben. Und wo ich grade dabei war: Ich wollte mir ja schon immer mal eine gscheite Funktion machen, um in OpenGL "print"-artig auf den Bildschirm zu schreiben. Und ach ja genau: Ein einfaches Werkzeug, um Texturen auszuprobieren, und ohne viel Aufwand auf ein Rechteck zu Projezieren. Ach und meine Splinekurven wollte ich ja auch nochmal fertig machen. Ach und nen einfachen Marker für irgendwelche Punkte. Ach, ach, ach, und, und, und. Auf einmal war es drei Uhr Nachts, und ich saß vor einer kleinen "FB-Utility-Libary-for-Open-GL".

Es ist nichts besonderes, und war wie gesagt auch nur für den persönlichen Gebrauch bestimmt, aber evtl. hat der ein oder Andere Interesse an dem Teil, weshalb ich mal alles als .dll kompiliert habe, und >>hier<< zum download anbiete. Ein selbsterklärendes Beispiel liegt bei.

"ligl" (Lutz Ifers Graphic Libary) wie ich das Teil jetzt hochtrabend nenne, umfasst im Moment folgende Funktionen:
Code:
function LI_LoadBMP (filename as string) as LI_RGB_IMAGE ptr"

Lädt eine BMP in den Speicher. Ist unabhängig vom Verwendeten [i]screen / screenres[i]. Texturen können so schon vor dem Initialisieren von OpenGL geladen werden.

Code:
function LI_LoadTexture (filename as string, flags as uinteger = 0) as uinteger

Lädt mit der Funktion "LI_LoadBMP" eine BMP in den Ram, und verarbeitet sie zu einer Textur. Der Rückgabewert ist der entsprechende Handle. Wenn die FUnktion = 0 ist, konnte die Textur nicht erstellt werden. Flags sind im Moment unbenutz, sollen später aber dazu dienen, gewisse Parameter einzustellen (z.B. ob Mipmaps erstellt werden sollen, usw.)

Code:
function LI_Print (byval x as integer, byval y as integer, text as string, byval fc as uinteger = &hffffff, byval bc as uinteger = &h000000)

Da bin ich direkt stolz drauf. Funktioniert wie Print. x und y sind die linke obere Ecke des Textes, fc die Vordergrundfarbe und bc die Hintergrundfarbe. wenn bc = &hff00ff ist, wird der Text ohne Hintergrund gezeichnet. Print ist auflösungsabhängig, dh. auf ein 1024*768-Fenster kann mehr geprinted werden als auf ein 640*480-Fenster.

Code:
function LI_Createfont  (byval filename as string = "") as integer

filename ist im Moment noch wirkungslos. Später sollen hier "Minischriftarten" (= Kleine BMPs mit den 255 Zeichen) einladbar sind. Die Funktion muss vor dem ersten Verwenden von LI_Print aufgerufen werden. Der Standardschriftsatz ist übrigens Sonderzeichenkorrigiert: ein Ä wird wirklich als Ä dargestellt.

Code:
function LI_DrawQuad (quad() as LI_POINT_3D, byval tex as uinteger = 0, byval c as uinteger = &hffffff) as integer

LI_POINT_3D ist ein einfaches UDT, bestehend aus den singles x, y und z. Das quad sollte vier dieser Werte enthalten. Wahlweise farbig, oder texturiert wird ein Rechteck mit den definierten Eckpunkten gezeichnet. Ist nicht für Leveldesigning gedacht, sondern eher zum "schnell was ausprobieren". Im Beispiel sieht man recht deutlich, dass das praktisch ist.

Code:
function LI_Draw_Sphere (byval center as LI_POINT_3D, byval radius as single, byval texture as integer = 0, c as uinteger = &hffffff) as integer

Malt eine Kugel an den Punkt "center" mit dem Radius "radius". Kann texturiert werden, oder gefärbt. "Wo ist jetzt der Punkt (20, 5, 7)?" - LI_Draw_Sphere ist deutlich besser sichtbar als GL_POINTS.

Code:
function LI_eSpline (source() as LI_POINT_3D, byval pol as single) as LI_POINT_3D

source ist ein belibig definiertes Array von Punkten. Die Funktion errechnet dann die Zwischenpunkte. Butterweiche Kamerafahrten oder Achterbahnen ließen sich so realisieren. Zur Technik: Die Punkte, die definiert wurden, werden nicht erreicht, also LI_Draw_Sphere(source(),1) <> source(1)!. Die Punkte sind die "Orientierungspunkte" der Kurve. Im Moment arbeite ich an einer Version, in der die Punkte selber auch auf der Splinekurve liegen. Im Moment tun das nur die Punkte mit "int+.5" als Durchschnitte des vorherigen und nächsten Punktes.

Also, eure Meinung: Weiterführen, oder in die Tonne kicken? Bestände interesse an so einer Lib? Falls Ja: Welche Funktionen müssten unbedingt noch hinein?

Screenshot des Beispiels


Gruß
Lutz böse Ifer

P.s: "ligl" soll trotz der Namensverwandschaft keine Konkurrenz von "yagl" werden - ligl zielt auf 3D ab, während yagls Augenmerk hauptsächlich auf dem 2D-Bereich liegen.
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 16.03.2006, 00:17    Titel: Antworten mit Zitat

erst mal super.

Dokus, Hilfestellungen oder wie bei dir Sammlungen benötigter Functionen sind immer toll ! Und grad bei FreeBasic extrem wichtig.
Überdenkt mal die Vielfältigkeit von FreeBasic, auch im Hinblick auf includen etc. Unzählig viel ist möglich, das wenigste sauber dokumentiert.

Also: auf jeden Fall weitermachen !

Hab (bis jetzt) kaum über den Tellerand von Basic rausgeschaut (Mal ausgenommen von ein paar Excursionen nach Assembler per Debug und Editor, ganz kleine Gehversuche mit C). Das einzige, wo ich mich grad schlau mache, ist Allegro.

Ich weiß von OpenGL grad mal in groben Zügen, was damit geht. Hab keine Ahnung, unter welchen Betriebssystemen OpenGL mit FreeBasic laufen kann. Dein Beispielbild zeigt mir aber, daß ich sowas unbedingt anschnuppern wenn nicht einverfleischen sollte.
Also die Frage:
Läuft OpenGL mit FreeBasic auf allen drei "großen" Systemen (Dos Win Linux)?

Danke im voraus

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 16.03.2006, 12:40    Titel: Antworten mit Zitat

Sers Eastler!

Danke für die Antwort, war schon kurz davor, das Teil wieder wegzuwerfen.

OpenGL läuft unter Windoof und Linux, Dos wage ich zu bezweifeln. Nagel mich nicht drauf fest, aber das Beispiel, dass in der rar dabei ist, sollte sich ohne irgendwas zu ändern auch unter Linux compilieren lassen.

Mittlerweile sind zwei Funktionen dazugekommen:
Einerseits lassen sich jetzt log-Dateien anlegen (siehe Fb@rchiv), andererseits lassen sich jetzt ms3d-Dateien laden, das sind 3D-Models, die mit Milkshape o.Ä. erstellt wurden.

Die aktuelle Version von ligl findet sich >>hier<<, der alte Link geht nicht mehr.

Gruß
Lutz böse Ifer
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 17.03.2006, 16:35    Titel: Antworten mit Zitat

Hi Lutz,
BLOß NICHT WEGSCHMEIßEN, SONDERN WEITERMACHEN!
Auf Anhieb habe ich zwar erst nur Verwendung für die grafische Textausgabe
(wie kann ich ° § und sowas ausgeben ?), aber da gibt es sicher noch mehr..
Als Erstes habe ich natürlich Konstanten für die Bildschirmgröße eingeführt.
Nachdem ich hoffentlich alle Stellen erwischt habe, funktioniert das auch prima.
(Ich habe probeweise MaxX auf 800 und MaxY auf 600 gesetzt)
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 18.10.2006, 21:21    Titel: Antworten mit Zitat

hallo, dein programm von opengl interessiert mich .

auf jeden fall weitermachen, opengl ist das beste was es für eine 3d-darstellung und spritedarstellung geben kann in freebasic.
ist eine gute mischung, um das 3dgrafikrad nicht mehr neu erfinden zu müssen.

versucht es so gut es geht in freebasic zu intregieren, es lohnt sich und freebasic wird dadurch sehr populär. es kann nur noch vorwärts gehen.

ich kann deine datei nicht runterladen, weil immer ein verbindungsfehler auftritt.

mfg


Zuletzt bearbeitet von pebisoft am 18.10.2006, 21:27, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 18.10.2006, 21:25    Titel: Antworten mit Zitat

Schau mal bitte auf das Datum des Threads. peinlich
Okay, das zweite kannst du net wissen: Lutz Ifer ist auf Mecki-Space umgezogen. zwinkern
Musst mal bei ihm anfragen, ob er's noch hat. Also bei Lutz Ifer selbstverständlich. durchgeknallt
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz