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

Aktuelle Zeit: Fr Jul 18, 2025 11:20

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Di Apr 14, 2009 16:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Hi.

Wenn ich z.B. FramebufferObjects fürs Offscreen Rendering nutze, steht die Textur die ich bekomme ja auf dem Kopf. Als ob man sie in der horizontalen gespiegelt hätte, im Vergleich zu dem was man gerendert hat (zumindest wars bei mir bisher immer so ^^).
Das hat mich bisher auch nicht sonderlich gestört, weil mans ja durch die Texturkoordinaten ausgleichen kann.

Jetzt wird das ganze aber zum Problem, da ich nicht weiß wie viele Offscreen Renderings hintereinander kommen bzw. die Anzahl variablen ist. Deswegen weiß ich auch nicht wie rum meine Textur gedreht ist.

Gibts da ne elegante Methode zu um auf dem Kopf stellen zu verhindern, oder ist die einzige Möglichkeit rausfinden wie viele Vorgänge hintereinander kommen und dann die Texturkoordinaten anzupassen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 17:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Komisch.. ich habe dieses Problem nicht. Wenn ich meine Szene in die Textur rendere ist alles wie es sein soll. Vielleicht machst du was bei der FBO-Erstellung "falsch"?! Zeig doch mal den Code dazu bitte.

Edit: Stimmt garnicht :D Ich hab nochmal nachgeschaut, bei mir es es genauso, habe das nur gleich mit den Texturkoordinaten angepasst.. wusste ich nicht mehr.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Jetzt wird das ganze aber zum Problem, da ich nicht weiß wie viele Offscreen Renderings hintereinander kommen bzw. die Anzahl variablen ist. Deswegen weiß ich auch nicht wie rum meine Textur gedreht ist.

Warum wird das zum Problem? Wenn du deine Texcoords anpasst kannst du das doch auch dann machen wenn du dein FBO verwendest um den nächsten FBO zu rendern. Übrigens kannst du alternativ auch einfach die entsprechende Achse in deiner Modelview-Matrix ändern, so wird das ganze gleich richtig in den FBO gerendert.

P.S. Ich glaube nicht das ein FBO falsch rum gerendert wird, sondern eher das bei dir irgendwo Texcoords oder ne Matrix verkehrt sind.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ich hab nochmal ganz genau nachgeschaut. Das was ich in mein FBO zeichne ist wenn ich "normale" Texturkoordianten benutze tatsächlich falschrum, deswegen habe ich nicht weiter nachgeschaut, weil es bei Deathball auch so zu sein scheint. Aber ich habe beim Einstellen der Matrix die beiden Werte bottom und top vertauscht. Es ist also doch richtig rum und du hast wahrscheinlich genau da auch den Fehler.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Aber ich habe beim Einstellen der Matrix die beiden Werte bottom und top vertauscht.

Hm, nur so eine Theorie....vielleicht gibt's hier im Wiki irgendwo ein Tutorial wo das falsch rum ist und ihr das deswegen beide so habt....

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 15, 2009 09:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Coolcat hat geschrieben:
Warum wird das zum Problem? Wenn du deine Texcoords anpasst kannst du das doch auch dann machen wenn du dein FBO verwendest um den nächsten FBO zu rendern.


...
hm...
... ich hasse dich :? :wink:
(Shit, ich hab ernsthaft übersehen das, wenn ich die Textur in jedem Rendervorgang richtig rum drehe und nicht einfach so wie sie kommt drauf pappe, ich weiß wie sie am Ende ankommt...)
Aber danke erstma!

Naja, damit der Thread nochn Sinn bekommt:
Zitat:
Aber ich habe beim Einstellen der Matrix die beiden Werte bottom und top vertauscht. Es ist also doch richtig rum und du hast wahrscheinlich genau da auch den Fehler.


Bei welchem Einstellen von was für einer Matrix? Denn normalerweise stelle ich vorm rendern in das FBO nur den Viewport neu ein.
In nem Spezialfall wechsel ich vorher noch in den orthogonalen Modus, aber da sind alle Parameter da wo sie hingehören...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 15, 2009 10:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ich wechsle auch in den glOrtho-Modus und genau da war mein Fehler.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 15, 2009 11:45 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich glaube es wird bewusst verkehrt herum gemacht, damit der Koordinatenursprung oben Links ist.
Kann diese These bestätigt werden?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 08:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Hm wo soll da was verdreht sein? Das hatte ich nie beo FBOs. Zeig doch mal Code-Ausschnitte

@flash: was meinst genau? Das der Nutzer bewusst die Spiegelung verursacht?

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ich mach das bei meiner GUI, z.B. wenn ich "On Paint" zeichne, denn da passiert das Zeichnen mitten zwischen dem Zeichnen der GUI-Elemente, also so:

Das Fenster fängt an mit dem Zeichnen an und versetzt Opengl in den Orthomodus mit dem Koordinatenursprung links OBEN. Dann werden die GUI-Elemente baum-mäßig gezeichnet, bis man zu einem Element kommt, wo ein 3D-Renderer in das Event "OnPaint" eigehängt ist. Der wechselt in den perspektivischen Modus mit dem Koordinatenursprung links UNTEN und macht ein PushMatrix, erledigt seine Zeichnerei und gibt mit PopMatrix wieder an die GUI zurück.

Wo sich der Koordinatenursprung befindet ist eine simple Einstellung, nämlich die Reihenfolge des dritten und vierten Parameters des glOrtho-Befehls, schaut genau hin:

Code:
  1. Procedure gsOrthoModeON;
  2. Var
  3.    Viewport: Array [0..3] Of TInt32;
  4. Begin
  5.    glMatrixMode(GL_PROJECTION);
  6.    glPushMatrix;
  7.    glLoadIdentity;
  8.    glGetIntegerv(GL_VIEWPORT, @Viewport);
  9.  
  10.    // Origin = lower left of the Viewport (= DEFAULT)
  11.    //glOrtho(0,ViewPort[2],0,ViewPort[3],+1,-1);
  12.  
  13.    // Origin = upper left of the Viewport (= UPSIDE DOWN)
  14.    glOrtho(0,ViewPort[2],ViewPort[3],0,+1,-1);
  15.  
  16.    glMatrixMode(GL_MODELVIEW);
  17.    glPushMatrix;
  18.    glLoadIdentity;
  19. End;


EDIT: Den Koordinatenursprung links oben zu definieren bringt was, denn die Mauskoordinaten, die das Betriebssystem liefert, haben auch den Ursprung links oben. Mittlerweise ziehe ich aber ernsthaft in Erwägung, wieder die OpenGL-Default-Einstellung (Ursprung=links UNTEN) einzuführen, denn ich muss meine 2D-Shapes alle im Uhrzeigersinn definieren, sonst sind sie wieder verkehrt. Irgendwie geht mir das gegen den Strich, weil ich es gewöhnt bin, dass alle Primitiven gegen den Uhrzeigersinn definiert werden müssen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 10:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Mit den Mauskoordinaten das is doch egal. Einfach die Transformationsmatrix anpassen und gut. Also ich arbeite immer mit urpsrung unten links, wenn ich OGL benutze.
Sicher das du da nicht spiegelst mit deinem Ortho? Müsst ich mir mal die Trafo anschauen. Mach ich später^^


MfG Pellaeon

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 11:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Zitat:
Sicher das du da nicht spiegelst mit deinem Ortho?

Meinst Du mich? Klar spiegel ich mit dem glOrtho. Ich meine: ich drehe die Y-Achse um.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 14:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm.... Das man dann die Vertexes in Umgekehrter Reihenfolge übergeben soll, ist mir ernsthaft noch gar nicht aufgefallen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Hmmm.... Das man dann die Vertexes in Umgekehrter Reihenfolge übergeben soll, ist mir ernsthaft noch gar nicht aufgefallen.

Wird daran liegen das es völlig egal ist ;)

Du musst OpenGL nur sagen ob die Vertices im Uhrzeigersinn angeordnet sind oder eben gegen den Uhrzeigersinn. Wobei glFrontFace(GL_CCW) allerdings die Default-Einstellung ist. Übrigens sollte man bei einer GUI das Backface-Culling abschalten, zumindest wenn sowieso alle Faces sichtbar sind.

P.S. Wenn man irgendwas spiegelt, spiegelt man ggf. auch die Reihenfolge der Vertices.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 15:36 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wieso sollte man das Culling ausschalten?

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


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 18 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.011s | 15 Queries | GZIP : On ]