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

Aktuelle Zeit: Do Jul 10, 2025 12:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: 2D Enigne mit OpenGL?
BeitragVerfasst: Do Dez 11, 2003 21:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 11, 2003 20:57
Beiträge: 11
Wohnort: Düsseldorf
Hallo zusammen,

Schönes Forum hier, Respekt!
Ich bin im Bereich OpenGL ein Frischling, aber mit Delphi ein alter Hase. Aus Performance-Gründen möchte ich von meiner bisher genutzten G32-Lib Abschied nehmen und OpenGL eine Chance geben. Meine Ansprüche: 800*600*32-Auflösung, eine starre Hintergrundgrafik und einige vereinzelte Sprites mit AlphaMasks. Die bisherige Lib liefert auf einem 800Mhz/Geforce256-System nur eine maximale Framerate von 25. Das ist mir zuwenig. Die netten Tuts auf delphigl.de bringen auf diesem System aber nur maximale 30fps im kleinen Fenster! Was mache ich falsch? Wie gehe ich vor und wo gibt es für diesen Zweck performante Beispiele?

Ich wäre für ein paar Tips sehr dankbar!
Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 21:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Tipp 1: Sicherstellen, dass ein Modus mit Hardwarebeschleunigung aktiviert ist: die meisten Programme hier (sowie deine geforderte Anwendung) müssten auf deinem System mit mehreren hundert FpS laufen - dies führt zu

Tipp 2: wenn VSync eingestellt ist (und 30 FpS klingen stark nach zwei Refreshes pro Frame bei einer 60 Hz Auflösung) - sinkt deine Framerate logischerweise stark ab. Das ist zwar nicht tragisch, weil es dennoch flüssig läuft und die Leistung auch auf langsameren Rechnern deswegen nicht einbricht, kann aber verunsichernd sein.

Für deine gewünschte Applikation brauchst du nicht unbedingt OpenGL - insbesondere wenn sich die Hintergrundgrafik (z.B. als z.B. 1024x1024 Textur realisiert) oft ändert, bringt es dir primär nichts, da die meiste Zeit mit dem Hochladen der Daten zur Videokarte draufgehen wird. Einen Tile-based Hintergrund könnte man natürlich effizienter realisieren, indem die einzelnen Teils einmal als Texturen definiert und dann immer wieder verwendet werden.
Spätestens wenn du dann aber dynamische Beleuchtung hineinbringen möchtest (oder vielleicht doch ein paar 3D Effekte) lohnt sich OpenGL aber auf jeden Fall.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 21:19 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Eventuell hast du noch VSync eingestellt. Bei den Einstellungen der Grafikkarte kann man das in der Rubrik OpenGL auf "Immer aus" stellen.
Ansonsten sollten die von dir beschriebenen 2D Szenen eigentlich immer über 100 FPS auf deinem System erreichen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 22:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 11, 2003 20:57
Beiträge: 11
Wohnort: Düsseldorf
Hey, hab ja echt die Experten erwischt. Schön!

Das mit den 30Hz und VSync stimmte. Abgeschaltet und jetzt funktionieren die Beispiel-Apps mit 60Hz. Ok soweit. Darauf kann ich aufbauen. Kann ich denn nicht über 60Hz kommen, wegen der Monitorfrequenz?

Meine Hintergrundgrafik ist statisch und wird nur selten ausgetauscht, insofern kein Problem. Falls ich es aber nicht mit OpenGL mache, dann sehe ich aber mit traditionellen Delphi-Mitteln keine Chance eine ordentliche Framerate zu erzielen. Ausser DirectX oder OpenGL sehe ich da keine Möglichkeit. Ihr?

Hier ein Link zu der Projektbeschreibung, falls es jemanden interessiert:
http://timanfaya.chromeflowers.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 22:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
OpenGL eigenet sich sehr gut für 2D, so gut das sogar ganze Betriebssysteme es zur Darstellung ihrer GUI nutzen (siehe MacOS). Ich selbst nutze in meinem aktuellen OpenGL-Projekt sehr viel 2D in Form einer recht umfangreichen GUI und OpenGL ist dank der Hardwarebeschleunigung für solche Sachen eigentlich die beste Alternative.
Für ein Adventurespiel kannste also ruhig auf OpenGL setzen, denn das machen die Jungs von ScummVM auch und es läuft dort einwandfrei. Du hast dann ggü. z.B. der GDI halt mehr Geschwindigkeit und eine weitaus breitere und flexiblere Effektreichweite.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 22:31 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ach DAS ist dein Spiel :D , auf Timanfaya bin ich früher schon mal gestoßen, und habe mir gedacht, dass das eventuell ganz interessant werden könnte.

Die Frage nach OpenGL Alternativen solltest du eventuell nicht grad in einem einschlägigen Forum stellen :wink: - allerdings kannst du hier wirklich nicht viel falsch machen. Was ich vorher meinte, war nicht, dass OpenGL für ein "Hintergrundvideo" oder Riesenbild (a'la Baldurs Gate) zu langsam wäre, sondern nur, dass man in diesem Fall aus den Beschleunigerfunktionen der GraKa keinen besonderen Nutzen ziehen kann.

Statische Hintergrundbilder mit Sprites sind ja quasi schon fast eine Unterfordung von OpenGL - dessen 3D-Fähigkeiten kannst du aber sogar hier nutzen: mittels Stencil- und Z-Buffer musst du überhaupt keine Sorgen mehr machen, ob ein Stein oder Baum jetzt vor oder hinter dem Charakter liegt - theoretisch kannst du sogar statische Vordergrundobjekte im Hintergrundbild ablegen, und sie verdecken den Charakter dennoch, wenn es nötig sein sollte.

Wenn VSync abgeschaltet ist, sollte der Bildschirmaufbau nicht mehr durch die Monitorfrequenz beschränkt sein. Einfache Applikationen laufen sogar auf einer Riva TNT mit über 100 Hz - was für ein Demo ist es denn, das bei dir nur mit 60 Hz läuft ?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 07:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 11, 2003 20:57
Beiträge: 11
Wohnort: Düsseldorf
Zum Beispiel das Demo hier von delphigl.com -> Tuts -> OpenGLEinführung / Lesson3:

Dort habe ich bei jedem Beispiel maximal 60Hz. Ach ja, 'Lesson4' klappt nicht, weil eine 'DevIL.DLL' fehlt. Muss man eigentlich die Hardware-Beschleunigung explizit zuschalten oder machen die Treiber das automatisch? Ich bin noch sehr, sehr verunsichert gegenüber OpenGL, denn ich habe bei KEINEM meiner 3 Testsysteme bei einem Delphi/OpenGL-Programm eine Framerate von über 60Hz erzielt. Im Gegenteil: sobald ich den Rendering-Bereich vergrössere (auf 800*600), dann fällt die Framerate teilweise auf 10fps. Das kann doch nicht sein, das ist doch Softwaremodus!? Und ich bin mir sicher, dass meine Grafikkarten-Treiber ordentlich installiert sind (OpenGL-Spiele laufen bei mir odentlich). Gibt es denn kein Test-Programm/Tutorial für einen Vergleich: Hardwarebeschleunigung ein/aus?

Das Ganze erscheint mir nach einer ersten Euphorie ('das ist ja einfach') gar nicht mehr so einfach, denn ich muss bei einem OpenGL-Programm ja anscheinend darauf vertrauen, dass der Spieler/Anwender seine OpenGL-Treiber richtig installiert hat, ansonsten läuft ein OpenGL-Spiel bei 800*600 auf einem 1 Ghz-Rechner nur mit 20fps.... überspitzt ausgedrückt. Ich schiebe das jetzt einfach mal auf die Tuts und hoffe, dass ihr mir das Gegenteil beweisen könnt und mich doch noch zum OpenGL-Jünger bekehrt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 10:19 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
lade dir t.B. mal das hier runter: http://www.delphigl.com/main.php?page=downloadinfo&f=5001

das das alels bei dir immer maximal mit 60FPS arbeitet lässt darauf schließen, dass du die Vertikale Synchronisation noch immer eingeschaltet hast...
um sie auszuschalten gehst du wie folgt vor:
Desktop->Rechtsklick->Eigenschaften->Reiter Einstellungen->Erweitert->Reiter <Grafikkartenname>->OpenGL Einstellungen->Verticale Sync. ->Haken Rein bzw in Combobox anwählen...

dann soltle das ganze schonmal schneller laufen, wobei man bei eingeschalteter VSync nicht sagen kann, dass es schlechter läuft, denn das ganze hat ja auch seine Vorteile und wenn die Framerate höher als die Bildschirmwiederholfrequenz ist sieht man ja eh keinen Unterschied mehr...
das ganze hat AFAIK eigentlich nur zu BEnchmarkzwecken Sinn, das auszuschalten

MfG
Fiji-Fighter

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 11:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Schieb die Sache lieber darauf das Microsoft OpenGL als Konkurrenz zu Direct3D sieht. Denn genau aus diesem Grund haben die von Windows mitgebrachten Grafikkartentreiber (eigentlich egal für welche Grafikkarte) keine hardwareunterstützung für OpenGL. Stattdessen wird dort dann die uralt-OpenGL.DLL von Microsoft genutzt, welche als Softwareimplementation läuft.
Bei den Treibern die aber direkt vom Hardwarehersteller bezogen wurden ist immer eine OpenGL-Hardwareunterstützung vorhanden. Und da die meisten Leute sowieso diese Treiber verwenden sollte das für dein Spiel eigentlich kein Problem darstellen, zumal es ja auch diverse kommerzielle Titel gibt die OpenGL zum Rendern nutzen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 11:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 11, 2003 20:57
Beiträge: 11
Wohnort: Düsseldorf
Ich sitze gerade an einem anderen Rechner:
XP, 1.7Ghz mit einer 16MB Nvidia Vanta (? ähnlich einer TNT2)
Der neueste ForceWare-Treiber ist drauf und VSync ist 'immer aus'.

Ich erhalte bei dem 'Renderpass'-Demo ~25fps. Wenn ich das Fenster kleiner mache, dann erreiche ich auch >100fps. Das Ein/Ausschalten der 'virtuellen Monitore' hat keinen Einfluss auf die fps-Zahl.

Ich vermute mal, dass die Grafikkarte das Demo ausbremst, aber hier wurde doch gesagt, das mit einer TNT auch Frameraten>100 erzielt werden kann. Ich spreche aber nicht von kleinen Fenstern, sondern möchte schon 800*600*32. Durch Ausschalten von Licht oder anderen Optimierungen bekomme ich bestimmt für meine Zwecke noch ein paar Frames raus, aber gerade wenn ich die Demos auf 800*600 hochziehe, dann fällt die fps-Zahl ins Bodenlose... :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Stelle mal bitte in deinem OpenGL Programm 16 Bit als Farbtiefe ein. Und im Windows bitte auch sofern du keinen Vollbildmodus verwendest. Für mich klingt das ganz danach als ob die Karte mit ihrer Leistung am Ende ist. Die älteren Karten schwächeln bei 32 Bit ein wenig.

Sobald du jedes Mal einen Vollen Bildschirm zeichnest kannst du auch das GL_COLOR_BUFFER_BIT in dem Aufruf von glClear entfernen. Den DEPTH_BUFFER aber nicht sonst geht dein Programm nicht mehr vernünftig. Diese Veränderung bringt auch noch mal ein wenig Geschwindigkeit.

PS: Habe mit diesen Einstellungen auf dem Rechner (TNT2) meiner Freundin knappe 200 FPS hinbekommen. Vorher waren es auch nur 60 FPS.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 11:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Schliesse mich da Lossy an. Die Vanta ist da noch viel schlimmer als ne echte TNT2, denn bei ihr ist der Datenbus nur halb so breit (64 statt 128 Bit), wodurch sowohl Füllrate als auch Dreiecksdurchsatz (der für deinen Fall aber eher unwichtig ist) stark in Mitleidenschaft gezogen werden.
Eine TNT2 "Vanta" ist übrigens trotz leicht höherem Takt (100/125 ggü. 90/100 Mhz) "dank" dieser Sparmaßnahmen immernoch langsamer als eine original TNT (1)-Karte. Du kannst davon ausgehen das ein Großteil deiner Zielgruppe wohl über eine leistungsfähigere Grafikkarte verfügt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 11:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zumindest auf der GeForce 256 sollte es aber schon halbwegs anständig laufen, und soo schlecht war meine alte Riva TNT auch nicht, wenn ich mich recht entsinne.

Ich habe grad folgendes Programm zusammengestellt, wenn du das mal runterlädst, kompilierst und den Inhalt des Textfensters postest, sieht man eventuell weiter:


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 12:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 11, 2003 20:57
Beiträge: 11
Wohnort: Düsseldorf
Also das mit dem Umstellen auf 16bit auf dem Desktop hat schon mal was gebracht, was aber nicht im Sinne des Erfinders war :wink:

So, auf dem Vanta-System erziele ich jetzt ~25fps mit folgendem Text:

Code:
  1. Vendor:
  2. NVIDIA Corporation
  3.  
  4. Renderer:
  5. RIVA TNT2/AGP/SSE2
  6.  
  7. Version:
  8. 1.4.1
  9.  
  10. Extensions:
  11. GL_ARB_imaging GL_ARB_multitexture GL_ARB_point_parameters GL_ARB_texture_env_add GL_ARB_texture_mirrored_repeat GL_ARB_transpose_matrix GL_ARB_vertex_buffer_object GL_ARB_window_pos GL_EXT_texture_env_add GL_EXT_abgr GL_EXT_bgra GL_EXT_compiled_vertex_array GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_multi_draw_arrays GL_EXT_packed_pixels GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_stencil_wrap GL_EXT_texture_edge_clamp GL_EXT_texture_env_combine GL_EXT_texture_lod_bias GL_EXT_texture_object GL_EXT_vertex_array GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_fog_distance GL_NV_packed_depth_stencil GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_SGIS_multitexture GL_SUN_slice_accum GL_WIN_swap_hint WGL_EXT_swap_control


Ich fahr jetzt mal nach Hause und probier das Ganze nochmal auf dem Geforce256-System.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 12, 2003 12:37 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
die Frag eist ja auch, ob du bei vergleichbaren direct3D Anwendungen mehr FPS hättest, was ich bezweifle, sofern denn die Treiber aktuell sind...

_________________
. . .


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


Wer ist online?

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.

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