Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 12, 2025 04:44

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Fragen zu euren OpenGL Menüs
BeitragVerfasst: Do Mär 11, 2004 02:51 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 08:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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:
  1.  
  2. x, y sind Mauskoordinaten
  3. ...
  4. rx, ry: single;
  5. ...
  6. rx := x / ClientWidth;
  7. 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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 08:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
ich dachte immer es gibt bei so komischen größen fehler beim laden :-/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 08:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Man kann ja ein 800x600 Bitmap auch in eine 1024x1024 Textur hineinpacken - sagt ja niemand, dass alle Texel genutzt werden müssen.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 10:51 
Offline
DGL Member
Benutzeravatar

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:
  1. var
  2.  MousePos : TPoint;
  3. ...
  4. MousePos := Point(X * 640 div ClientWidth, Y * 480 div ClientHeight);
  5.  

Bei mir sinds halt 640 respektive 480, weil ich für die 2D-Menüs eine orthagonale Ansicht mit diesen Dimensionen setze.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 11:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zitat:
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.


Guter Trick - den muss ich mir merken :wink: .

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich poste mal zwei Screenshots, anhand derer man den Unterschied sogar sehr gut erkennen kann :

Hauptmenü ohne scharfgezeichnete Textur
Hauptmenü mit scharfgezeichneter Textur

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 13:02 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
:idea: Der Thread is ja recht lehrreich :D

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 13:16 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 13:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Son of Satan hat geschrieben:
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?

Wegen den MipMaps... Aber schon das Nein reicht mir 8)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 13:33 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 13:46 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also meine Graka aufm Laptop kanns net. Habs gerade probiert. Resultat: Ein weißes Quad. :(
Aber hauptsache es geht auch so.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 14:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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 :wink:

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 16:47 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 11, 2004 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mach einfach ein dreieck... und halt immer die mauskoordinaten angeben oder so ^^


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 15 Queries | GZIP : On ]