Registriert: Di Jul 26, 2005 21:13 Beiträge: 13 Wohnort: Dresden
Hallo Leute,
Ich weiß nicht genau, wie ich es selbst berechnen kann, deswegen hier meine Frage:
Gibt es eine zu glProject vergleichbare Funktion, die mir die Bildschirmkoordinaten zu einem Vertex liefert, allerdings nicht als Pixelkoordinaten, sondern als OpenGL-Koordinaten (welche sich damit auf die aktuelle Kameraposition und -richtung beziehen),
bzw. gibt es eine einfache Möglichkeit, eine bereits beliebig rotierte und verschobene Szene (damit meine ich jetzt nur eine einfache Szene mit virtueller Kamera und einem Objekt, z.B. eine Kugel) so umzupositionieren, daß Kamera und Objekt noch im gleichen Verhältnis zueinander sind, aber das Koordinatensystem der Szene mit dem der Kamera übereinstimmt (die gesamte Szene müßte also in den Koordinatenursprung hineinbewegt und gedreht werden - dann wären die x,y-Koordinaten des Objektes genauso, wie ich sie benötige) ?
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
müssten dann die koordinaten die du haben willst im wesentlichen denen auf dem Bildschirm entsprechen?
ansonsten kannst du dir natürlich die matricen holen und deine vertices in software soweit durchjagen, wie du es haben willst
Registriert: Di Jul 26, 2005 21:13 Beiträge: 13 Wohnort: Dresden
die koordinaten des objektes sollen sich auf die kamera, also den viewpoint beziehen.
also ich weiß schon theoretisch wie ich das berechnen muß, aber ich dachte, es gäbe vielleicht eine funktion dafür.
aber so wie es aussieht wohl nicht. dann muß ich wohl doch die gute alte vektorrechnung bemühen und die
minimale entfernung (lot) zwischen objekt und abbildungsebene und die position des abbildes auf der ebene ausrechnen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich habe deine Frage von Oben nicht ganz verstanden. Kann auch sein, dass ich ein bissel auf dem Schlauch stehen. Aber normal befindet sich die OpenGL Kamera immer im Koordinatenursprung. Wenn du zum Beispiel mit gluLookAt deine Kamera bewegst bewegst du in Wirklichkeit die gesammte Szene. Aber so, dass es den Eindruck hat die Kamera würde sich bewegen. Ich denke mal du arbeitest mit LookAt. Wenn du das weglässt, könntest du deine Szene rendern, beliebig drehen und verändern, und dann entsprechend deine Kugel an die richtige Position zeichnen. Damit wäre sie dann immer im gleichen Abstand zur Kamera wärend sich deine Szene komplett verändern könnte.
Versuche nicht dich zuverändern sondern verändere das Universum um dich herum.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das Gegenstück zu gluProject ist http://wiki.delphigl.com/index.php/GluUnProject. Jedenfalls klang deine Einführung so, als würdest du dich für diese Funktion interssieren....Kanns aber auch fehlinterpretiert haben.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Jul 26, 2005 21:13 Beiträge: 13 Wohnort: Dresden
Ok, ich will nochmal ganz von vorn und in Ruhe anfangen.
Folgendes will ich machen: Ich habe eine Kugel in meiner Szene. Diese Kugel will ich deformieren, indem ich eine Scherungsmatrix auf sie anwende. Wie genau das geschieht, ist erstmal uninteressant, wichtig ist nur, daß ich die Faktoren der Scherungsmatrix nur berechnen kann, wenn ich den x,y und z-Abstand der Kugel zum Mittelpunkt der Abbildungsebene (=Kamera) kenne. Diese Berechnung hab ich jetzt als Vektorrechnung implementiert, funzt aber noch nicht wirklich, aber das ist nur das kleinere Übel.
Das eigentliche Problem ist folgendes: Ich kann die Scherungsmatrix nur dann sinnvoll auf das Objekt anwenden, wenn sich die Szene noch nicht bewegt oder gedreht hat, da durch die Verschiebung und Drehung (Drehung ist hier das eigentliche Problem) das Koordinatensystem mitbewegt/gedreht wird, sodaß ich die Matrix auf das verschobene & gedrehte Objekt nicht mehr anwenden kann, ohne das dabei vollkommen falsche Verformungen entstehen.
Soweit ich aber weiß, muß in OpenGL zuerst die Szene transformiert werden und dann die darin enthaltenen Objekte. ich brauche aber genau das Gegenteil, ich will erst das Objekt transformieren und dann die Szene mit dem Objekt transformieren und dann ggf. nochmal das Objekt alleine. ist das überhaupt machbar?
Muß ich evt. meine Scherungsmatrix nochmal mit den Rotationsmatrizen multiplizieren, damit ich sie nach der Szenenrotation auf das Objekt anwenden kann? Oder mit der inversen Matrix? Ich glaub, diese ganze Matrizengeschichte treibt mich noch in den Wahnsinn...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Position: Normal sollte es gehen, wenn du (bevor du die Kugel zeichnest) dir die Matrix geben lässt und damit dann deine Position ausrechnest. Wie das aber genau ausgerechnet wird weiß ich nicht. Habe bisher nichts mit Matrizen gemacht.
Objekte Zeichnen: Ein Objekt welches gezeichnet ist kannst du nicht mehr verändern. Wenn deine Kugel nur ein Bestandteil deiner Welt (Ähnlich einem Stuhl in einem Raum) ist, dann hast du meines Wissens nach keine andere Möglichkeit als deine Welt vorher zu transformieren und die Kugel dann hineinzuzeichnen. Evtl kannst du deine Matrix ja so berechnen als ob die Kugel sich an einer sinnvollen Stelle befindet und dann zu der neuen Matrix hinzurechen. Aber ich denke. Das wäre zu einfach gewesen. Sonst bin ich mit meinem Latein ein bissel am Ende.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja ich glaube der Ansatz mit dem einrechnen der Inversen Matrix könnte richtig sein. Ich bin allerdings auch kein Mathe Guru. In solchen Fällen verweise ich normalerweise immer auf das CompGeo-Script (Links->General) aber ich denke die Theorie dahinter kennst du schon, und es hapert nur an der umsetzung.
Eventuell schneit nochmal Lars oder Lyr hier rein. Die beiden schienen sich mit Matrizen auch etwas auszukennen...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Jul 26, 2005 21:13 Beiträge: 13 Wohnort: Dresden
Danke erstmal für die Antworten.
Das CompGeo-Skript hat mir insoweit schon weitergeholfen, als daß ich gemerkt habe, daß in meinem OpenGL-Buch eine falsche Y-Rotationsmatrix abgedruckt war. Jetzt kann ich meine Transformationsmatrix nochmal von vorn berechnen...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zu beachten ist, dass OpenGL und die Mathematik sich in einem Punkt unterscheiden.
Die Formeln gehn von Weltkoordinaten aus, OpenGL arbeitet mit lokalen Koordinaten.
Also das berechnete Ergebnis von Translation*Rotation entspricht in OpenGL Rotation*Translation. Ansonsten stimmt alles. Nur um zweifeln zuvorzukommen...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: Bing [Bot] und 3 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.