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

Aktuelle Zeit: Fr Mär 29, 2024 00:21

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 10:00 
Offline
DGL Member

Registriert: Sa Mai 16, 2015 17:25
Beiträge: 22
Programmiersprache: Pascal
Hallo Community, ich versuche meine gezeichneten Objekte in meiner OpenGL Anwendung zu spiegeln, da es aus aus irgendeinem Grund gespiegelt in den gelesenen Dateien gepsiechert ist.

Folgender aktueller Stand:

Bild

Aufgrund anderen Transformationen befindet sich die X-Achse von links nach rechts und die Z-Achse von oben nach unten, die Y-Achse ist die Blickrichtung.

Die auffällige Brücke, welche aus der oberen linken Ecke auftaucht und sich durch die Landschaft zieht, sollte eigentlich aus der linken unteren Ecke auftauchen. Also müsste ja ein Aufruf vor dem Zeichnen von
Code:
  1. glScalef(Scale, Scale, -Scale);

das ganze horizontal spiegeln.

Tatsächlich sieht das Ergebnis allerdings so aus:

Bild

Lustigerweise geht die Brücke nun, wie behelfsmäßig eingezeichnet, von der unteren Linken Ecke aus über den Bildschirm.
Allerdings ist diese nun auf der anderen Kartenseite, genauso wie die Gebäude auf der Karte. Ich habe schon einen Fehler in den Normalen vermutet, allerdings wird der Boden ja noch richtig herum gezeichnet

Frage: Warum?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 12:11 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Du hast gesagt die Z-Achse verläuft von unten nach oben.
Wenn Du jetzt auf ein Objekt Scale(1,1,-1) anwendest, spiegelst Du es an der xy-Ebene, in deinem Fall also wird quasi Oben und Unten vertauscht.
Für mich sieht es auch genau so aus, als hättest Du die Brücke eben so gespiegelt.
Hast Du das gemacht?
Falls irgendwas faul ist, schau doch nach, ob Du die Brücke vor oder nach dem Skalieren anders als den Rest rotierst und/oder verschiebst.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 14:12 
Offline
DGL Member

Registriert: Sa Mai 16, 2015 17:25
Beiträge: 22
Programmiersprache: Pascal
Meine Aussage war aus Sicht der Blickposition genannt.
Die X Achse geht von Links nach rechts (auf den bildern horizontal)
Die Z Achse geht von oben nach unten (auf den Bildern vertikal)
Die Y Achse ist der "Normalenvektor" der Blickposition.

Btw, es geht darum, die ganze Landschaft zu spiegeln, die Brücke war nur als Beispiel gewählt, da diese das ganze gut veranschaulicht hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 15:15 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
8.zwerg hat geschrieben:
Meine Aussage war aus Sicht der Blickposition genannt.
Die X Achse geht von Links nach rechts (auf den bildern horizontal)
Die Z Achse geht von oben nach unten (auf den Bildern vertikal)
Die Y Achse ist der "Normalenvektor" der Blickposition.

Hab ich auch so verstanden. Außer das mit dem "Normalenvektor der Blickposition". Meinst Du damit die Bilckrichtung?
8.zwerg hat geschrieben:
Btw, es geht darum, die ganze Landschaft zu spiegeln, die Brücke war nur als Beispiel gewählt, da diese das ganze gut veranschaulicht hat.


Also scale(1,1,-1) macht aus (x,y,z) -> (x,y,-z)

Du änderst also nur die z-Komponenten deiner Vektoren damit.
Und da bei dir die z-Achse vertikal am Bildschirm verläuft, und der Nullpunkt scheinbar in der Mitte des Bildschirms ist (das ist auch noch wichtig), wird die Brücke von oben nach unten gespiegelt.
\ vorher
-----z = 0
/ nachher

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 15:21 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Übrigens, ein lustiges Rätsel hierzu:
Warum vertauscht ein Spiegel scheinbar links und rechts, aber nicht oben und unten?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 15:28 
Offline
DGL Member

Registriert: Sa Mai 16, 2015 17:25
Beiträge: 22
Programmiersprache: Pascal
Wie meinst du das genau?
Du erklärst quasi genau das, was ich machen will, nur ist die Umsetzung bei mir nicht das gewünschte
Achja, der Nullpunkt liegt genau in der Mitte. Und ja, mit Nomalenvektor meine ich Blickrichtung^^

Um das ganze nochmal zu zeigen:
Das obere Bild zeigt einen Ausschnitt, wie es aktuell in meiner Szene aussieht. Das zweite Bild dazu zeigt, wie ich es haben will.
Bild

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 15:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Erstmal, glScalef ist recht veraltet.

Zweitens, stell mal sicher, dass du glScalef an der richtigen Stelle aufrufst. Für mich sieht es so aus, als ob du das vor dem Aufsetzen der View machst (was richtig ist), aber dann ist das Koordinatensystem halt eventuell noch nicht so wie du das gerade denkst. Probier mal glScalef(1, -1, 1) an der gleichen stelle.

viele Grüße,
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 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: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 15:44 
Offline
DGL Member

Registriert: Sa Mai 16, 2015 17:25
Beiträge: 22
Programmiersprache: Pascal
Wenn glScalef recht veraltet ist - was empfiehlt sich anstelle davon?

Meine Renderroutine sieht wie folgt aus - meines Wissenstandes nach müsste es da keine Porbleme geben.

Code:
  1. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  2. glClearColor(GetRValue(BGColor)/255, GetGValue(BGColor)/255, GetBValue(BGColor)/255, 0.0);
  3. glMatrixMode(GL_PROJECTION);
  4. glLoadIdentity;
  5. gluPerspective(60, PanelGL.Width/PanelGL.Height, 0.01, 500);
  6. glMatrixMode(GL_MODELVIEW);
  7. glLoadIdentity;
  8. glTranslatef(xPos,zPos,yPos); //move at start 7m away
  9. glScalef(Zoom, Zoom, Zoom);
  10. //glRotatef(yRot,-1,0,0);
  11. //glRotatef(xRot,0,-1,0);
  12.  
  13. //glRotatef(180 , 0, 0,1);
  14. glRotatef(yRot,-1, 0,0); //Rotate in
  15. glRotatef(xRot, 0,-1,0);
  16.  
  17.  
  18. if (LoadedFiles.QAD) and (LoadedFiles.GEO)=true then begin
  19.  case PageControl1.ActivePageIndex of
  20.   {GROUNDS}   0: RenderGeometrySimple(0, QAD.BlocksX, 0, QAD.BlocksZ);
  21. end; //case
  22. end;
  23.  


Im case Abschnitt sind weitere Abschnitte vorhanden, jedoch wird nie nochmals glScalef aufgerufen, abgesehen von einen glPushMatrix(), glPopMatrix() -Aufrufen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
glScalef gehört wie die ganzen anderen Matrix-Funktionen zur den Teilen der OpenGL-Pipeline , die mit OpenGL 3.3 Core rausgeschmissen worden sind. Dazu gehört auch der Immediate Mode (glBegin/glEnd), gl{Pop,Push}Matrix, glMatrixMode, …. Halt ungefähr alles, was entfällt wenn man VBOs und Shader verwendet. Praktisch läuft es dann darauf hinaus, dass man sich diese Funktionen sowie einen Matrixstack selber baut oder halt eine existierende Library verwendet – in der Praxis hat man sowas bei "großen" Projekten sowieso.

Löst aber dein Problem nicht. In dem Ausschnitt da hast du glScalef nirgendwo aufgerufen. Wo hattest du den Aufruf, als du das merkwürdige Verhalten vom Anfang produziert hast?

viele Grüße,
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 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: Spiegeln der Szene
BeitragVerfasst: Mi Sep 30, 2015 20:54 
Offline
DGL Member

Registriert: Sa Mai 16, 2015 17:25
Beiträge: 22
Programmiersprache: Pascal
Zeile 9? :wink:

Das ist die Zeile, um die es sich dreht. Mit dem gezeigten Code erreiche ich jeweils das erste der Beiden Bilder. Setzte ich vor dem dritten Wert ein Minus, was ja eigentlich die Z Achse spiegeln sollte, entsteht das zweite Bild im ersten Post.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Do Okt 01, 2015 07:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ah, ich hatte nach einem glScalef mit 1, 1, -1 gesucht. Probier an der Stelle mal glScalef(Zoom, -Zoom, Zoom). Das sollte mMn funktionieren.

viele Grüße,
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 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: Spiegeln der Szene
BeitragVerfasst: Do Okt 01, 2015 10:30 
Offline
DGL Member

Registriert: Sa Mai 16, 2015 17:25
Beiträge: 22
Programmiersprache: Pascal
Wenn das Problem so leicht lösbar wäre, würde ich sicherlich kein neues Thema hier aufmachen :)

Ich habe alle sieben Kombinationen in diesem glScale ausprobiert, jedoch ohne Erfolg.

Ich habe mittlerweile herausgefunden, dass glScale(1,-1,1) das gewünschte Ergebnis erreicht, wenn ich das Culling auf GL_BACK stelle, ich hatte es davor auf GL_FRONT eingestellt.
Hierzu noch eine kleine Frage, welche vielleicht nicht mehr direkt zum Thema passt:
Beeinflusst das Cu´lling auch die Normalen? da ich ja jetzt das ganze auf GL_BACK eingestellt habe, zeigen ja die Normalen alle in die entgegengesetzte Richtung, oder?

Grüße und vielen Dank


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Spiegeln der Szene
BeitragVerfasst: Do Okt 01, 2015 15:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 587
Programmiersprache: C++
Nein, die Normalen haben mit Culling nichts zu tun. Von Spiegelung sind die Normalen jedoch schon betroffen.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


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 » Mathematik-Forum


Wer ist online?

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