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

Aktuelle Zeit: Mi Jul 09, 2025 16:59

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 16:24 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Guten Tag,

ich versuche mich gerade dabei ein Menü zu programmieren. D.h. wenn man "Esc" drückt öffnet sich das Menü. Deswegen habe ich folgendes gemacht:
SwapBuffers(DC); wird nicht mehr ausgeführt. Das Hintergrundbild und die Buttons werden sichtbar gemacht und der Mauscursor wird wieder sichtbar.
Allerdings bleibt der Hintergrund schwarz, ich kann zwar auf die Buttons drücken, allerdings sehe ich sie nicht. Das einzige was sichtbar wird ist der Mauscursor.

Ist mein Ansatz richtig? Was stimmt noch nicht oder kann ich den z-index der Buttons erhöhen, bzw. würde das überhaupt helfen?
Vielen Dank für eure Hilfe!

Mit freundlichen Grüßen,
Mario


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 16:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hallo netmario,

Verstehe ich das richtig, dass du dein Menü nicht in OpenGL zeichnest? Wenn dem so ist, renderst du in ein eigenes Panel?

SwapBuffers nicht mehr aufzurufen kann übrigens die unangenehme Nebenwirkung haben, dass dinge, die über das Panel(?) in das du Renderst, gezogen werden, eine schwarze Spur hinterlassen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 16:49 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Hallo Horazont,

es ist richtig, dass ich mein Menü nicht in OpenGL gemacht habe, ich denke das ist einfacher. Es besteht einfach aus einem Image und drei Buttons. Ich möchte ja eben bezwecken, dass während derjenige im Menü ist, nichts gerendert wird seitens OpenGL. Ist dies möglich, wenn ja wie?

Vielen Dank!

Mario


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ich möchte ja eben bezwecken, dass während derjenige im Menü ist, nichts gerendert wird seitens OpenGL. Ist dies möglich, wenn ja wie?

Das einfachste ist wohl einfach nur ein Aufruf von glClear gefolgt von SwapBuffers, wann immer du ein Paint-Event bekommst. Es ist nicht nötig die Render-Schleife laufen zu lassen. Ggf. brauchst du auch noch ein glViewport, je nachdem was du sonst noch so machst.

"Nichts" rendern geht nicht. Wenn ein dein OpenGL-Bereich durch andere Elemente oder Fenster verdeckt wird muss er neu gezeichnet werden. Ansonsten würdest du noch den alten Inhalt (eben diese Elemente) sehen. => Es würden komische Spuren dieser Elemente entstehen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 17:34 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Hi Coolcat,

ich verstehe nicht ganz was du meinst. Wenn ich es richtig verstanden habe, soll ich nichts in das Render-Event schreiben, sondern alles in das Paint-Event? Ich nehme an, ich soll bei glViewport alles auf null setzen.

Vielen Dank!

Mario


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 17:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ich nehme an, ich soll bei glViewport alles auf null setzen.

Wieso das?! Bloß nicht...glViewport sollte immer der tatsächlichen Größe des Framebuffers entsprechen.

Wenn dein Menü aktiv ist musst du Paint-Events an dein Panel (?) abfangen und dort drin glClear gefolgt von SwapBuffers aufrufen. Wenn dein Menü NICHT aktiv ist renderst du ganz normal und kannst die Paint-Events ignorieren sofern deine Render-Events (was immer das ist) regelmäßig genug kommen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 17:57 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Ah, vielen Dank! Jetzt habe ich verstanden was gemacht werden soll. Dementsprechend habe ich diesen Code zusammen gebastelt.
Code:
  1. procedure TForm1.FormPaint(Sender: TObject);
  2. begin
  3.   if menuActiv = true then begin
  4.     glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.     SwapBuffers(DC);
  6.   end;
  7. end;

Allerdings ist der Bildschirm schwarz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Allerdings bleibt der Hintergrund schwarz, ich kann zwar auf die Buttons drücken, allerdings sehe ich sie nicht.

Du musst deinen Buttons sagen, dass sie ihren Hintergrund zeichnen sollen. Ich kenne mich nur mit Qt aus, da gibt es eine Eigenschaft "autoFillBackground".

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 19:26 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Ich habe mal geschaut, ob ich etwas vergleichbares in Delphi finde, allerdings ohne Erfolg. Das kann doch nicht so schwer sein ein Menü zu machen. Sonst mach ich das Menü echt noch mit OpenGL.
Vielen Dank für deine Hilfe coolcat! Vllt. kannste mir doch noch weiter helfen oder jemand anderes, der dies schon umgesetzt hat, bzw. weiß wie man es anders lösen kann.

Mario


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Mo Mai 02, 2011 19:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Lord Horazont hat geschrieben:
Verstehe ich das richtig, dass du dein Menü nicht in OpenGL zeichnest? Wenn dem so ist, renderst du in ein eigenes Panel?

Ich warte noch auf eine Antwort darauf… Aber dennoch: Mach das menü lieber mit OpenGL. Es sieht besser aus und du hast solche Probleme nicht. Vorallem sind Buttons etc. über OpenGL Panels immer extrem ineffizient.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Di Mai 03, 2011 16:19 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Entschuldige, dass ich dies übersehen habe. Wenn ich es richtig verstehe, willst du wissen, ob meine Komponenten auf einem Panel sind? Nein, allerdings verwende ich Panels als Buttons, da ich dort die Hintergrundfarbe ändern kann.
Jetzt hätte ich noch eine Frage, wenn ihr mir empfehlt das Menü mit OpenGL zu machen. Welche Anweisungen benötige ich dafür? Wie setze ich das möglichst einfach, aber trotzdem professionell um? Bzw. kennt jemand ein Tutorial, dass ich mir durchlesen könnte, habe keins gefunden?

Vielen Dank!

Mario


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Di Mai 03, 2011 16:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Es besteht einfach aus einem Image und drei Buttons.

Sofern das alles ist reicht es doch einfach drei texturierte Quads für die Buttons über ein Hintergrundbild (ebenfalls texturiertes Quad) zu rendern. Die Beschriftung der Buttons baust du direkt in die Button-Textur mit ein. Wenn du weitere GUI-Elemente brauchst wird es natürlich möglicherweise schwieriger.

Um einen Klick auf den Button abzufangen musst du nichts weiter tun als die Cursor-Position abzufragen und zu prüfen ob der Cursor in der 2D-BoundingBox des jeweiligen Buttons liegt.

Tipp: Mache deine Buttons leicht transparent und verwende eine animierte 3D-Szene als Hintergrund. Sieht dann gleich viel cooler aus und die Transparenz ist mit OpenGL natürlich ganz simpel.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rendern deaktivieren
BeitragVerfasst: Di Mai 03, 2011 19:03 
Offline
DGL Member

Registriert: Mo Apr 25, 2011 12:45
Beiträge: 9
Vielen Dank! Es funktioniert jetzt einwandfrei.

Mit freundlichen Grüßen,
Mario


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.009s | 16 Queries | GZIP : On ]