 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 14.03.2006, 15:00 Titel: OpenGL-Bibliothek |
|
|
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 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 |
|
 |
Eastler_dart

Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 16.03.2006, 00:17 Titel: |
|
|
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 |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 16.03.2006, 12:40 Titel: |
|
|
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 Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 17.03.2006, 16:35 Titel: |
|
|
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 |
|
 |
pebisoft gesperrt
Anmeldungsdatum: 28.11.2004 Beiträge: 131
|
Verfasst am: 18.10.2006, 21:21 Titel: |
|
|
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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 18.10.2006, 21:25 Titel: |
|
|
Schau mal bitte auf das Datum des Threads.
Okay, das zweite kannst du net wissen: Lutz Ifer ist auf Mecki-Space umgezogen.
Musst mal bei ihm anfragen, ob er's noch hat. Also bei Lutz Ifer selbstverständlich.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
|
|
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.
|
|