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

Aktuelle Zeit: Do Jul 10, 2025 03:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2008 17:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Eine frage noch... geht spherische und cubische projektion genauso einfach? :P


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2008 18:50 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

sorry für die vielen posts.. '^^
Ich wollte eben das ganze mal mit ner perspektivischen projektion versuchen, und hab halt einfach meine Projection-Matrix berechnung so umgesteltl wie es im wiki steht.

aber.. irgendwie klappt es nicht :( Die projektion landet wo völlig falsches..

Ich rechne grad einfach:

TP * proj * modelview * vertex

modelview ist das, was bei OpenGL GL_MODELVIEW ist, nur aus irgendeinem grund muß ich die invertierte matrix davon nehmen (bei der ortho-projection)... muß das so sein oder ist da evtl irgendwo noch nen fehler drin?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2008 19:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Klingt eher nach Fehler^^
Evtl. hast du die Matrix transponiert?

_________________
__________
"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 24, 2008 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hey ich muss mein altes Exel-Worksheet, wo ich alle meine Matrizenoperationen überprüfe, ausgraben und nachrechnen...das dauert ein bisschen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2008 20:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
was ist TP?

Aber grundsätzlich, probier mal die Reihenfolge so zu ändern, dass du Modelview * Projection nimmst und nicht andersherum. Und auch mal ohne inversion.

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 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:
BeitragVerfasst: Do Apr 24, 2008 22:25 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Excel Worksheet?
Sowas hier? http://www.youtube.com/watch?v=VVF-gk61qA0&NR=1
oder eher das? http://www.youtube.com/watch?v=XeXISSrIaJA

:lol:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 24, 2008 23:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
@Flash: Nein, nicht SO ein Excel worksheet. Das mit dem Würfel Ist aber eine Spitzenidee. Ich habe das Execelsheet unten mitgebracht (ich hoffe, man kann es lesen).

Ich habe einfach in OpenGl einen Punkt gezeichnet und ihn getranslated und gerotated und projiziert, alles händisch. Die Matrizen habe ich dazugeschrieben. Man könnte es also nachrechnen.

Also, was ist rausgekommen: eigentlich nichts Spektakuläres.

Unten rechts habe ich einen Original-Punkt eingesetzt, der mit der finalen Matrix multipliziert wird. Der Input für glOrtho ist rechts oben zu sehen. Links sind die Matrizen dargestellt, die eine nach der anderen dazu multipliziert werden. Rechts neben den Matrizen steht immer das Zwischenergebnis für den Punkt. Das Endergebnis dieser Rechnung muss jedenfalls sein, dass sowohl die X-als auch Y-Koordinate des Ergebnispunktes zwischen Null und Eins, also im Texturraum liegen.

Zunächst dachte ich, dass ich einen Fehler gemacht habe, denn der Ergebnispunkt unten rechts hat eine X-Koordinate die größer als 1 ist. Aber das bedeutet nur, dass der OriginalPunkt von 256/256/256 durch die Translation/Rotation aus dem Bild gekippt wird, oder anders ausgedrückt, er wird nicht gezeichnet weil er außerhalb des Viewports zu liegen kommt.

Wenn man in diesem Beispiel die Modelview-Matrix wegläßt, ergibt das für einen Punkt mit den Koordinaten (-256/-256/-256) TexturKoordinaten von (0/0) und bei (+256/+256/+256) TexturKoordinaten von (1/1), ganz wie es sich gehört.
Traude


Erst nachträglich hab ich bemerkt: die Überschrift der ersten rosa Matrix ist "Calc1=Input1*Input2" stimmt nicht, es sollte heißen: "Calc1=Input1*Unitmatrix", jede dieser rosa Matrizen ergibt sich aus der Multiplikation der beiden Matrizen, die über ihr stehen.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Lord Horazont hat geschrieben:
was ist TP?


TP ist meine toller Matrixenname von der ersten Seite und steht für Texture-Projection^^. Die Matrix mit den 0.5en drinne. Um vom -1..1 auf den 0..1-Bereich zu kommen.

@Aya: Zeig doch mal deine Matrixen, die du benutzt. Oder ist das Problem inzwischen gelöst?

_________________
__________
"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: Fr Apr 25, 2008 16:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

das problem ist leider immernoch da :(

Ich hab jetzt mal die matrix aus dem excel-screenshot nachgebaut, hab exakt die gleichen werte raus.. nur aus irgendeinem grund muß ich den punkt den ich am ende mit der matrix multipliziere in y * -1 rechnen, da sonst die projektion an der y-achse gespiegelt ist.. (jetzt dann ohne die invertierte modelview matrix)

Wenn ich dann meine projektions matrix auf perspective statt orthogonal umstelle stimm garnixmehr.. also die Modelview matrix ist genau gleich noch logischerweise, und die perspective Matrix ist exakt genau gleich zu der, die aus gluPerspective rauskommt.

Aber die projektion landet viel viel viel zu klein etwas links unten versetzt zu dem projektor.. :(

Irgendwer irgendne idee noch? :(

Ich hab sowohl modelview matrix als auch projection matrix mal mit der die ich in OpenGL via glGetFloatv() bekomme verglichen, 100% identisch..

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Tu mal die Proj- Matrix transponieren und teste dann nochmal.

_________________
__________
"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: Fr Apr 25, 2008 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hat leider nichts gebracht :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 17:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Code:
  1. __forceinline static void calcProjPersp(float &fFOV, float &fAspect, float &fNear,
  2.                                         float &fFar, CAEMatrix &proj)
  3. {
  4.     float f = 1 / tanf(0.5f * fFOV);
  5.  
  6.     proj.m_11 = f / fAspect;
  7.     proj.m_12 = 0;
  8.     proj.m_13 = 0;
  9.     proj.m_14 = 0;
  10.  
  11.     proj.m_21 = 0;
  12.     proj.m_22 = f;
  13.     proj.m_23 = 0;
  14.     proj.m_24 = 0;
  15.  
  16.     proj.m_31 = 0;
  17.     proj.m_32 = 0;
  18.     proj.m_33 = (fFar + fNear) / (fNear - fFar);
  19.     proj.m_34 = (2 * fFar * fNear) / (fNear - fFar);
  20.  
  21.     proj.m_41 = 0;
  22.     proj.m_42 = 0;
  23.     proj.m_43 = -1;
  24.     proj.m_44 = 0;
  25. }


Ich hab so ne Matrix für die persp. Proj. Ich weis jetzt nur nicht, ob die transponiert ist. Kannst ja mal testen.

_________________
__________
"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: Fr Apr 25, 2008 17:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ja meine ist ganz genauso, wie im wiki halt :)
nur ich hab die berechnung von f umgestellt, weil da stimmt das was im wiki steht nicht :/

zumindest macht gluPerspective was anderes:

f = tan((pi / 2) - (fov * (pi / 180)) * 0.5)

aber auch mit dem f wie du es berechnest geht es nicht :/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 25, 2008 17:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Aya hat geschrieben:
Hi,

ja meine ist ganz genauso, wie im wiki halt :)
nur ich hab die berechnung von f umgestellt, weil da stimmt das was im wiki steht nicht :/

zumindest macht gluPerspective was anderes:

f = tan((pi / 2) - (fov * (pi / 180)) * 0.5)

aber auch mit dem f wie du es berechnest geht es nicht :/


Also die Matrix von mir da ist im Einsatz, die funktioniert^^
Im Wiki steht: f = cotangent(fovy/2). cotangent = 1 / tan, enspricht also der Formel, wie ich sie habe.
Ist deine Kamera denn auch wirklich richtig gesetzt?

_________________
__________
"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: Fr Apr 25, 2008 17:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo Aya,
hast Du Excel? vielleicht kannst Du mit dem Worksheet selber mehr anfangen? Man hat dabei immer die volle Kontrolle über alle Daten.

NACHTRAG: die Matrizen im Wiki für glOrtho und glFrustum sind OK. Ich baue Matrizen nach diesem Muster auf.


Zuletzt geändert von Traude am Fr Apr 25, 2008 17:57, insgesamt 1-mal geändert.

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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] 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 | 15 Queries | GZIP : On ]