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

Aktuelle Zeit: Fr Jul 18, 2025 11:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 38 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mo Jul 26, 2010 15:01 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
nun soweit ich das verstanden habe ist das so das ich die Projektionsmatrix ja garnicht verändere. Ich drehe, skaliere zuerst meine "Welt", dann meine Scheinwerfer und dann das dranhängende Licht. Genau dann, bin ich ja quasi genau in der "Camera-Position", welche ich für meine Projektion brauche..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Di Jul 27, 2010 11:46 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
also ich krieg den Projektor einfach nicht in die richtige Position.. ich habe versucht die gesicherte ModelViewMatrix, welche ich beim Rendern des Scheinwerfers mit glGet... erzeugt habe, mit der IdentityMatrix zu multiplizieren, doch er projeziert immernoch wild woanders hin... bzw. wenn ich garnichts multipliziere, projeziert er immer dahin wo ich hingucke..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Di Jul 27, 2010 11:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wenn du uns nicht zeigst (Code) was du da so alles berechnest können wir nur herumraten was falsch sein könnte.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Di Jul 27, 2010 12:47 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Nun die projektion realisiere ich genau wie in Sasha seinem Beispiel. Doch an der Stelle (ProjectedTex1.pas Zeile 147) weis ich nicht wie ich meinen "Projektor" richtig ausrichten soll.. Ich habe die Matrix des Scheinwerfers, während er gerendert wird so gesichert:
Code:
glGetFloatv(GL_MODELVIEW_MATRIX, @TexMatrix);


meine Renderproc sieht vereinfacht so aus:
Code:

try
glMatrixMode(GL_PROJECTION);
// Identitätsmatrix laden
glLoadIdentity;
// Viewport an Clientareal des Fensters anpassen
glViewPort(0, 0, Panel1.Width, Panel1.Height);

// Perspective, FOV und Tiefenreichweite setzen
gluPerspective(60, Panel1.Width / Panel1.Height, 0.2, 200);

// In die Modelansichtsmatrix wechseln
glMatrixMode(GL_MODELVIEW);
// Identitätsmatrix laden
glLoadIdentity;
// Farb- und Tiefenpuffer löschen
 glClearColor(0, 0, 0, 0);
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

 glPushMatrix();


 //Ansicht ändern
    gltranslatef(xMov, -yMov, zMov);
         glRotatef(yRot, 1, 0, 0);
         glRotatef(xRot, 0, 1, 0);


  RenderAllLights;
 
  RenderMyObjectsInklProjection;

 glPopMatrix();

end;


Jetzt hab ichs so hinbekommen, das die Projektion "fest" an der Wand projeziert wird. Nun muss ich das ganze nur noch vom Scheinwerfer abhängig machen..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 10:24 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ich denke das Problem ist folgendes:

1. Ich Rotiere & Transformiere meine ModelViewMatrix zur Ansicht
2. popMatrix
3. Ich Rotiere & Transformiere meine "LampenMatrix"
4. Ich speichere diese "LampenMatrix" mittels glGetFloatv(GL_MODELVIEW_MATRIX, @TexMatrix);
4. pushMatrix
5. Ich zeichne meine Objekte und will hier projezieren


In meiner "LampenMatrix" (Sicht aus der Lampe) steckt also schon die Rot&Trans aus Schritt 1.. Um meinem Projektor in Schritt 5 in die Lampenposition zu bringen kann ich also nicht einfach mit meiner LampenMatrix multiplizieren, denn in Schritt 5 ist Schritt 1 auch schon drin...

Was kann ich machen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 10:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich vermute du hast hier push/popMatrix vertauscht, oder?

Code:
1.   Ich Rotiere & Transformiere meine ModelViewMatrix zur Ansicht
2.   pushMatrix
2.5. glLoadIdentity();
3.   Ich Rotiere & Transformiere meine "LampenMatrix"
4.   Ich speichere diese "LampenMatrix" mittels glGetFloatv(GL_MODELVIEW_MATRIX, @TexMatrix);
4.   popMatrix
5.   Ich zeichne meine Objekte und will hier projezieren


Jedenfalls sollte ein glLoadIdentity dafür sorgen das in der Lampenmatrix nur das gewünschte drin ist.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 10:58 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ja hatte ich vertauscht. So ganz kann ich das auch nicht machen, denn ich zeichne in Schritt 3 ja auch die Lampengehäuse, welche ja auch in die Richtige Richtung blicken müssen..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 14:27 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
nun ich hab die Rotationen erstmal für die TexMatrix wiederholt... zum testen reichts erstmal. Jetzt bin ich allerdings auf 2 neue Probleme gestossen...

1. die Größe des projezierten bildes ändert sich nicht entsprechend der Entfernung zum projector... (Siehe Bilder)
2. Ich habe eine Rückprojektion, wie bekomme ich die weg?


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 14:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Thmfrnk hat geschrieben:
1. die Größe des projezierten bildes ändert sich nicht entsprechend der Entfernung zum projector... (Siehe Bilder)

Das ist normal so. OpenGL projeziert die Textur zwar auf die Geometrie, aber mehr auch nicht. Du musst also die Entfernung messen und entsprechend dann die Textur z.b. via Texturmatrix skalieren.

Thmfrnk hat geschrieben:
2. Ich habe eine Rückprojektion, wie bekomme ich die weg?

Wenn du die feste Funktionspipeline nutzt musst du diese mit einer Clippingplane entfernen. Geht ganz einfach, da du diese Fläche ja direkt am Projektor ausrichten kannst.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 14:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Das ist normal so. OpenGL projeziert die Textur zwar auf die Geometrie, aber mehr auch nicht. Du musst also die Entfernung messen und entsprechend dann die Textur z.b. via Texturmatrix skalieren.

Bei Anwendung der Texturmatrix wird doch sicher irgendwo durch w geteilt? Es sollte reichen die z-Achse in die w-Achse zu packen, dann wird durch die Entfernung (z) geteilt.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 15:06 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Problem hab 1 hab ich schon in den griff bekommen... aber irgendwie bekomme ich das mit dem clipping nicht so ganz hin.. verstehe auch nicht wirklich was ich da als geometrie übergeben sollte..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 15:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Im Wiki steht alles Wichtige zum Thema "Clipping" : http://wiki.delphigl.com/index.php/glClipPlane

Geometrie gibt man dafür keine an, sondern nur die Schnittfläche, und Flächen haben ja eine unendliche Ausdehnung. Alles was dann "jenseits" dieser Fläche liegt wird abgeschnitten, genauso wie bei den 6 Schnittflächen die standardmäßig das Frustum (sichtbarer Bereich) beschreiben.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 15:48 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
hab ich mir schon durchgelesen, doch irgendwie nicht ganz verstanden.. Verstehe nicht wie ich mit den 4 Werten angeben kann was er nicht rendern soll..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 15:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Das dürfte eine Ebenengleichung sein, also a*x + b*y + c*z + d = 0. Dabei sind abcd deine vier Werte und xyz ein Punkt. Je nach dem ob dann das Ergebnis größer oder kleiner Null ist wird der Punkt dann gerendert oder halt nicht.

Edit:
Dabei ist abc die Normale der Ebene. d kannst du berechnen indem du einen Punkt xyz der auf der Ebene sein soll in die Gleichung einsetzt, also:
d = -(a*x + b*y + c*z)

In deinem Fall ist die Normale die Blickrichtung der Lichtquelle und du setzt dann die Position der Lichtquelle ein um d zu berechnen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturprojektion
BeitragVerfasst: Mi Jul 28, 2010 16:53 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
also muss ich quasi den Vektor des Projektors übergeben (Pos + Richtung). Den bekomm ich doch bestimmt ebenfalls aus der ModelViewMatrix aus sicht der Lichtquelle oder?


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


Wer ist online?

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