Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn ihr in Spielen mit OpenGL Menüs bastelt wie macht ihr da
1. Das Menü an sich. 2. die OnClick abfrage? (Da sich die größe des Formulars ja ändern kann, ändern sich ja auch die Koordinaten.)
zu1: Also ich hab mich da mal an SOS gehalten und eine Textur auf ein Quad geklebt, und selbiges Screenfüllend in Scene gesetzt. Leider is die Optik net Optimal da meine 800x600 Tex auf 1024x768 gezerrt wird (wie kann man sowas schöner machen?). Das ganze läuft auf meinem Laptop mit 64-100 FPM (Auf anderen Systemen wahrscheinlich ne Ecke schneller)
zu2: Eigentlich wollte ich einfach die X/Y Koords auslesen und mit If Abfragen reagieren. Das wird aber wahrscheinlich probleme geben, wenn sich z.B. die Auflösung ändert oder!?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Du kannst schon die OnClick Abfragen nehmen - allerdings solltest du Koordinatenpositionen relativ zur Fensterauflösung nehmen, wenn du also ein Delphiformular hast, schaut das so aus:
Code:
x, y sind Mauskoordinaten
...
rx, ry: single;
...
rx := x / ClientWidth;
ry := y / ClientHeight; // oder 1.0 - y/ClientHeight wenn du lieber das OpenGL Koordinatensystem verwendest
Und dann nimmst du rx und ry für Positionsabfragen her, die jetzt ebenso wie dein Menü relativ zur Fenstergröße konstant bleiben.
Zitat:
Leider is die Optik net Optimal da meine 800x600 Tex auf 1024x768 gezerrt wird
Größere Textur nehmen - oder sogar unterschiedliche Texturen für unterschiedliche Bildschirmauflösungen, obwohl Runterskalieren mit einem geeigneten Filtermodus meist recht gut funktioniert.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
@Adler :
Wenn man seine Texturen mit gluBuildMipMaps2D lädt spielt das keine Rolle. Da kann es auch ruhi != 2^n*2^n sein, da da diese Funktion die Textur dann auf die passende Größe streckt bzw. schrumpft. Alternativ kann man (machen auch kommerzielle Spiele) ein Menü mit nem Ration von 1:!=1 auch auf nen Ration von 1:1 bringen (im Bildbearbeitungsprogramm), also ne 640x480-Textur einfach auf 512x512 verzerren. Qualitätsverlust bei der Anzeige in der OpenGL-Anwendung gibts da nicht sehr viel, habs nämlich bereits selbst so getestet.
@Flash :
Texturengröße ist natürlich so eine Sache und hängt im Endeffekt eigentlich davon ab wie detailliert sie nachher auf dem Bildschirm aussehen soll. Allerdings gehe ich prinzipiell hin und lasse über meine Menügrafiken vorher einen Scharfzeichnungsfilter laufen. Das sieht dann im Bildbearbeitungsprogramm nicht sehr toll aus, aber da OpenGL ja die Textur biliniear filtert erreicht man so bei der Anzeige im eigenen Programm eine schärfer Darstellung die nicht überzeichnet wirkt.
Zum Thema Mauskoordinaten hat Mars eigentlich alles wichtige erzählt. Ob du es im OnClick-Event machst oder (so wie ich) im Renderloop via GetAsyncKeyState abfrägst ob die Maustaste gedrückt ist spielt im Endeffekt keine Rolle. Die Koordinaten lassen sich auch sehr leicht umrechnen, am besten direkt im OnMouseMove :
Code:
var
MousePos : TPoint;
...
MousePos:= Point(X *640div ClientWidth, Y *480div ClientHeight);
Bei mir sinds halt 640 respektive 480, weil ich für die 2D-Menüs eine orthagonale Ansicht mit diesen Dimensionen setze.
Allerdings gehe ich prinzipiell hin und lasse über meine Menügrafiken vorher einen Scharfzeichnungsfilter laufen. Das sieht dann im Bildbearbeitungsprogramm nicht sehr toll aus, aber da OpenGL ja die Textur biliniear filtert erreicht man so bei der Anzeige im eigenen Programm eine schärfer Darstellung die nicht überzeichnet wirkt.
Das Scharfzeichnen erledige ich im Picture Publisher 9 (war bei meinem alten Webspace im Softwarepaket enthalten und ist quasi sowas wie PS-Light), wo sich er Effekt "Selektive Schärfte" nennt. Dort kann man dann Radius, Intensität und Schwellenwert variieren um den Effekt anzupassen. Im Bildbearbeitungsprogramm sieht die Textur dann etwas verfälscht (sprich "zu scharf") aus, aber das wird durch das bilineare Filtering ausgebügelt, so dass es in der OpenGL-Anwendung im Endeffekt besser aussieht.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Der Thread is ja recht lehrreich
Nach den bisherigen Antworten ist die relative Cursorposition ja jetzt klar.
Zu den Texturen:
Ich lade die mit keinem extra Befehl (@SOS), sondern ganz normal mit der Loadfunction der Klasse des TextureLoaders (glBitmap). Is das jetzt verkehrt?
Wenn man auf kleinere Texturen setzt die aber strchen will was sollte man dabei tun? (Scharf zeichnen hat SOS ja schon angemerkt) Gibts sonst noch Tricks?
Arbeitet ihr eigentlich bei solchen Programmen im Fullscreen Modus? (Template_Fullscreen is ja auch im SDK)
Viele Commerzielle Spiele sind ja anscheinend auf eine Auflösung ausgelegt und setzen zum Spielstart die Auflösung entsprechend. Macht ihr sowas auch (bzw. wie macht ihr das?)?
@SOS: Bei deinem mom. Spiel gefällt mir die MetallTextur deines Menüs. Wie hast du dein Menü so hingegrigt? Hast du da bestehende Texturen genommen oder hast du selber gezeichnet?
Vorallem die geschwungenen Formen gefallen mir sehr gut, da sie auch 3D wirken. Wie hast du die gemacht ?
Das wirkt langsam wie ein Interview, aber ich denke das Thema is für so ziemlich jeden hier im Forum wichtig wenn er mal ein Spiel basteln will.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Flash hat geschrieben:
Ich lade die mit keinem extra Befehl (@SOS), sondern ganz normal mit der Loadfunction der Klasse des TextureLoaders (glBitmap). Is das jetzt verkehrt?
Nein, wieso?
Flash hat geschrieben:
Arbeitet ihr eigentlich bei solchen Programmen im Fullscreen Modus? (Template_Fullscreen is ja auch im SDK)
Nein, zum einen verwende ich kein DGL-Template und zum andere kann man bei Terrorcide über eine Ini sowohl die Auflösung als auch Fenster/Vollbild einstellen.
Flash hat geschrieben:
Viele Commerzielle Spiele sind ja anscheinend auf eine Auflösung ausgelegt und setzen zum Spielstart die Auflösung entsprechend. Macht ihr sowas auch (bzw. wie macht ihr das?)?
So viele sind das nicht. Da fällt mir spontan nur RavenShield ein, bei dem das Menü nur in 640x480 dargestellt wird. Da mich das aber total stört mache ich das bei meinen Spielen anders. Das Hauptmenü wird in der selben Auflösung wie das Spielgeschehen gezeigt, da ein Umschalten der Auflösung nur für den Wechsel zum Menü sehr störend ist.
Flash hat geschrieben:
Bei deinem mom. Spiel gefällt mir die MetallTextur deines Menüs. Wie hast du dein Menü so hingegrigt? Hast du da bestehende Texturen genommen oder hast du selber gezeichnet? Vorallem die geschwungenen Formen gefallen mir sehr gut, da sie auch 3D wirken. Wie hast du die gemacht ?
Hab ich doch im Projektethread gesagt. Das mach ich mit Photoshop, da gibts sog. Pfadwerkzeuge mit denen man Flächen boolean Erstellen kann. Also z.B. Kreis+Rechteck, oder davon ne andere Form abziehen. Die Textur kann man dann über Ebeneneigenschaften festlegen. Aber so ein Menü ist recht aufwendig und kann locker 5 oder mehr Stunden bis zur Fertigstellung brauchen. So sehen z.B. die Pfade für den grünen Overlay des Menüs aus.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
In der aktuellen Version (1.15) von der glBitmap.pas existiert eine Property namens "BuildMipsMaps". Wenn du diese auf False setzt dann erzeugt er die Textur ohne Glut und erstellt auch keine MipMaps mehr. Dann sollte es auch möglich sein solche NonPowerOfTwo Texturen zu erstellen. Sofern deine Grafikkarte das mit macht.
Das zu benutzen bietet sich sowieso immer an sobald man keine MipMaps benutzt. Also bei Menüs etc. Das spart ja letzten Endes auch Speicher auf der GrafikKarte.
Du musst dann natürlich auch einen Filtermodus verwenden, der keine Mipmaps benötigt (GL_NEAREST oder GL_LINEAR) - dann kann es deine GraKa ziemlich garantiert auch
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Öhhm ... Filter?
@SOS und überhaupt: Du hast doch einen Eigenen Cursor für dein Spiel gebastelt. Ich schätze mal das is einfach ein normales Bitmap in einer Definierten Größe oder? Wie bindet man das ein?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.