Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
ich habe folgendes Problem:
Ich rendere eine Spielszene, und am Ende das HUD (Head Up Display). Soweit kein Problem. Aber damit das HUD nicht ganz so langweilig aussieht, hab ich mir gedacht: Lässt du die Spielfigur rotieren. (Es handelt sich um Mensch ärger dich nicht)
Das HUD ist aber im glOrtho Modus, und da dachte ich mir: Renderst du die Spielfigur in eine Texture und pappst sie einfach drauf.
Nur: Ich führe den Renderpass aus, als schon alle anderen Objekte gerendert sind. Und davor rendern geht auch nicht, da das HUD ja praktisch am Bildschirm kleben soll, und nicht hinterm Spielfeld.
Und da taucht jetzt folgendes Problem auf: ich muss glClear aufrufen um den Buffer zu löschen... und zack ist auch alles andere weg.
Und wenn ich die beiden glClear weglasse befindet sich ein Teil der Orginal-Scene im Hintergrund (logisch, weils ja noch da ist).
Mein Renderpass-Code:
Code:
glEnable(GL_TEXTURE_2D);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);// <----- hier
Eine Möglichkeit ist, vor dem Rendern des HUDs nur den Depth Buffer löschen. Dann braucht man keine zusätzliche Texture und das HUD liegt immer vor dem Spielfeld.
Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
hm.. ich habe ein bischen rumgespielt, aber es klappt nicht so ganz. Ich muss die Spielfigur leider in die Texture rendern, da ich meine GUI-Engine (nennt man das so) verwende und diese bietet mir nur die Möglichkeit Texturen anzuzeigen, nicht aber ganze Szene zu rendern.
Und den Depth Buffer zu löschen hat auch keine Wirkung.. vorallen nicht bevor ich das HUD rendere..
Mein Aufbau ist wir folgt:
Code:
DrawPlayground;//Spielfeld mit Figuren, etcpp rendern
[...]
RenderModelForHUD(red,PlayerPic);//Hier z.B. die rote Figur in gluInt PlayerPic rendern
HUD.Window('hud').Image('playerPic').Image:= PlayerPic;//Dem HUD die Texture zuweißen
HUD.Render;//Das Hud rendern
[...]
SwapBuffer(DC);
Vll verstehe ich dich auch nur falsch kann sein.
Ich formuliere es mal anders: Mein Problem besteht darin, das sich im Hintergrund immer noch das Spielfeld befindet. Kann man nicht irgendwie den Color-Buffer sichern und dann wieder zurückpoppen lassen (so was wie ColorBufferPush / ColorBufferPop ^^ )
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Ich verstehe nicht warum du dein Männchen nicht vor (zeitlich) ALLEM rendern kannst.
Denn dann könnteste diese Szene in eine Textur rendern und speichern.
Dann glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
Dann Spielfeld rendern.
Dann Hud mit erzeugter Textur.
Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
Klar, des wär die einfachste Möglichkeit, aber ich möchte das alles geordnet an einem Fleck haben (die einzelnen Aufrufe sind über n paar Units verteilt)
Aber wenn es anderes zu aufwendig wird oder es net geht, dann muss ichs wohl so machen..
Ich probier jetzt erst mal noch eh weng
Danke für eure Hilfe
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Du kannst in einen andern Buffer rendern, z.B. GL_AUX1.
dazu machst du folgende Aufrufe:
Code:
// Die normale Szene rendern
glDrawBuffer(GL_AUX1);
glReadBuffer(GL_AUX1);
// Rendern der Figur und speichern in Textur
glDrawBuffer(GL_BACK);// Oder GL_FRONT, falls du kein Doublebuffering aktiviert hast (ist aber standard)
glReadBuffer(GL_BACK);// Wie oben
// Deine normale Szene weiterrendern / GUI Rendern oder wasauchimmer
Du solltest aber vorher mit GL_AUX_BUFFERS sicherstellen, dass du einen AUX-Buffer hast.
Sonst gäbe es noch die Möglichkeit mit der Framebuffer-Erweiterung, aber das sollte nun wirklich übertrieben sein
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
Mitglieder in diesem Forum: 0 Mitglieder und 10 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.