Registriert: So Jun 05, 2005 15:08 Beiträge: 39 Wohnort: Bei Bayreuth
Hi nochmal!
Ich arbeite grad an einem Videotool, aenhlich wie aber (im moment noch) schlechter als Maja & SutdioMax (kling vielleicht arrogant, mir gehts aber nur ums prinzip wie sie arbeiten.)
Das Logische hab ich (von der Partikel- und soundengine mal abgesehen), im Wesentlichen fertig, die Benutzeroberflaeche auch, und bin grade am ersten, fuer mich unloesbarem Problem waerend dieses Projekts angekommen:
Wieviele pixel entsprechen einer OpenGl Einheit in 1, 2, 3 ,... Einheiten entfernung? Also, z.B. wenn ich auf einen pixel(100, 100) klicke, dann entspricht das in Delphi einem Strahl, parallel zur Z-Achse.
WIe kann ich diesen Strahl herausbekommen?
Wenn mir jemand da helfen koennte, waer das super, weil das viele Probleme fuer mich loest:
- 1. Drag & Drop
- 2. Selektion von Objekten OHNE Namestack
- 3. Verwendbarkeit von Objekt-Verformwerkzeugen ...
Ich hoffe ich hab den Punkt nicht verloren , aber es geht mir darum, dass ich dieses Projekt erfolgreich beenden moechte, und nun vor diesem einen Problem stehe, also HELFT MIR! (War scho schoen phatetisch, oder? )
Ich weiss jetzt nicht ganz, in welche Rubrik sowas geht, weil es jetz nicht wirklich OpenGl-Zeug is... naja, wenns hier falsch ist, dann verschiebts halt bitte !
Danke fuer eure Hilfe,
MFG gmgler
Ps: Is mir grad eingefallen, koennte glProject auch dafuer gut sein? Hab von glProject und glUnProject ueberhaupt keine Ahnung!
_________________ Geniale Menschen sind selten ordentlich, ordentliche selten genial (Albert Einstein)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Es wäre mal interessant zu erfahren was du mit den einzelnen Fragen bezweckst?
z.B.
Zitat:
Wieviele pixel entsprechen einer OpenGl Einheit in 1, 2, 3 ,... Einheiten entfernung?
Dabei sehen wir gerade nicht was du damit überhaupt anstellen möchtest. Evtl bist du ja mir deinem Lösungsweg ein bisschen auf dem Holzweg und es gibt es wesentlich einfacheres.
Zitat:
Selektion von Objekten OHNE Namestack
Warum ohne? Welchen Grund hast du um auf ein solch endgeiles Feature zu verzichten?
Zitat:
Drag & Drop
Könnte ja jetzt fieserweise fragen "von was?". Aber ich lasse es mal. Hat ja nichts direkt mit OpenGL zu tun aber dabei musst du herrausfinden welches Objekt du ausgewählt hast und sobald die Maus bewegt wird verschiebst du das Objekt. Mittels gluProject kannst du dann berechnen welche Position sich unter deiner Maus befindet. Vorher musst du aber wohl zu erst die Tiefe des Objektursprunges ausrechnen. Oder aber du verschiebst das Objekt mehr oder weniger Frei schnautze. In Abhängigkeit mit dem Zoom solltes das wohl auch erst einmal ausreichen.
Zitat:
Ich weiss jetzt nicht ganz, in welche Rubrik sowas geht, weil es jetz nicht wirklich OpenGl-Zeug is... naja, wenns hier falsch ist, dann verschiebts halt bitte!
Da finde ich den Titel eher nichts sagend. Es handelt sich eher um einen 3D Model Editor als um Hintergrundwissen.
Registriert: So Jun 05, 2005 15:08 Beiträge: 39 Wohnort: Bei Bayreuth
Hi,
ersten mal:
Zitat:
Es handelt sich eher um einen 3D Model Editor als um Hintergrundwissen
weil ich eben genau erklaeren wollte, was ich mit diesen Fragen bezwecke...
Frage nur 1 und Frage Nummer 2 sind eigentlich die gleichen Fragen, nur unterschiedlich vormuliert: ich moechte wissen, wie ich den Strahl, der von meiner Mausposition (X,Y) an in neg. z-richtung geht rausbekommen kann.
Dafuer muss ich wissen, wie Opengl arbeitet, bzW welchen VERZERRUNGSFAKTOR es verwendet (Hintere seite eines Quadrates um wieviel keurzer als die Vorderseite?)
Das ist meiner Meinung nach "allgemeines" Hintergrundwissen.
zweitens: ich moechte den Namestack nicht verwenden, weil: Ich die Funktionen, die ich fuer manuelle Selektion gebrauchen koennte, bereits aus anderen Gruenden im Quelltext hab.
Um in meinem Ansichtsfenster ein Objekt mit der Maus bewegen zu koennen (DRAG&DROP), rechne ich bereits 2d in 3d koordinaten um, mir fehlt aber der GENAUE umrechnungsfaktor von pixel zu OpenGl Einheiten, hab ich den, kann ich auf einen Schlag das D&D perfekt machen, und die Selektion ist dann EINE einzige Quelltextzeile.
Mit namestack zu arbeiten, ist in diesem Fall etwas zu langsam, weil ich dann in meiner Selekitonsfunktion nochmal rendern muss, was die Geschwindigkeit etwa halbiert.
Zitat:
aber dabei musst du herrausfinden welches Objekt du ausgewählt hast und sobald die Maus bewegt wird verschiebst du das Objekt
Das Verschieben ist nicht das Problem, sondern das herausfinden! Ich brauche doch den strahl um zu sehen, welche Objekte er schneidet, um dann das naeheste auszuwaehlen ,was somit das selektierte Objekt ist.
Ich hoffe ich hab mich diesmal verstaendlicher ausgedrueckt MFG gmgler
PS: Trotzdem danke fuer die Antworten (Auch wenns im Wesentlichen Kritik war )
_________________ Geniale Menschen sind selten ordentlich, ordentliche selten genial (Albert Einstein)
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Das Lösungswort lautet gluUnproject.
Ermittle damit einfach die Mauskoordinaten auf der Near- und auf der Farclippingplane. Durch die beiden Punkte kannst du dann deine Gerade aufstellen.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Zitat:
PS: Trotzdem danke fuer die Antworten (Auch wenns im Wesentlichen Kritik war )
Gibt ja durchaus konstruktive Kritik dich dich darauf aufmerksam machen soll, dass lediglich du dein Problem und Projekt kennst und wir mehr infos brauchen um die eine Qualitativ hochwertige Antwort geben zu können. Sonst wird es so wie im Delphi-Forum wo jeder Hans Wurst der meint Ahnung zu haben auf Fragen antwortet wo alleine schon der anfängliche Lösungsweg des Fragenden in die falsche Richtung geht.
Zitat:
weil ich eben genau erklaeren wollte, was ich mit diesen Fragen bezwecke...
Versteh mich nicht falsch aber Hintergrundwissen ist ein sehr allgemeiner Begriff. Und wenn du mal ganz ehrlich bist, wenn du ein Thema mit dem Titel Hintergrundwissen siehst dann weißt du mit sicherheit nicht worum es geht.
Jetzt aber wieder zum eigentlichen Thema!
Zitat:
Frage nur 1 und Frage Nummer 2 sind eigentlich die gleichen Fragen, nur unterschiedlich vormuliert: ich moechte wissen, wie ich den Strahl, der von meiner Mausposition (X,Y) an in neg. z-richtung geht rausbekommen kann.
Dafuer muss ich wissen, wie Opengl arbeitet, bzW welchen VERZERRUNGSFAKTOR es verwendet (Hintere seite eines Quadrates um wieviel keurzer als die Vorderseite?)
Wie man so etwas genau ausrechnet weiß ich nicht. Ich weiß nur dass dabei die Projection, Modelview und der Viewport eine wichtige Rolle spielen. Ich denke das Einfachste dabei wäre wenn du gluUnProject dazu benutzt um deinen Strahl zu errechnen. Bzw kannst du so Anfang und Endpunkt errechnen. Dazu benutzt du für X und Y deine Fensterkorrdinate und als Z den Wert aus zNear bzw. zFar. Damit solltest du das bekommen was du willst.
Zitat:
zweitens: ich moechte den Namestack nicht verwenden, weil: Ich die Funktionen, die ich fuer manuelle Selektion gebrauchen koennte, bereits aus anderen Gruenden im Quelltext hab.
Die Selektion abeitet Stackbasiert. Es besteht zum Beispiel die Möglichkeit den Namen eines Autos auf den Stack zu packen und dann jeweils noch für die Einzelnen Teile. Reifen, Cassis etc. Zusätzlich dazu könntest du dann außerdem noch Teile des Reifens auf den Stack packen. Also es besteht durchaus die Möglichkeit mehr mit der Selektion zu machen als in 98% der Fälle ausreicht. Du kannst dann aber die Auswertung nicht mehr so benutzen wie es derzeit der Fall ist. Diese müsstest du dann so umstellen, dass sie auch für Mehrere Namen funktioniert.
Zitat:
Um in meinem Ansichtsfenster ein Objekt mit der Maus bewegen zu koennen (DRAG&DROP), rechne ich bereits 2d in 3d koordinaten um, mir fehlt aber der GENAUE umrechnungsfaktor von pixel zu OpenGl Einheiten, hab ich den, kann ich auf einen Schlag das D&D perfekt machen, und die Selektion ist dann EINE einzige Quelltextzeile.
Ich denke mal du solltest es so ähnlich machen wie mit dem Strahl nur, dass du dabei den Schwerpunkt deines Objektes neu berechnest. Zu erst musst du errechnen welche Koordinate dein ObjektSchwerpunkt hat. Das geht mittels glProject. Den ZWert musst du wärend des Verschiebens dann wieder an [wiki]gluUnProject[wiki] übergeben und damit erhälst du dann einen neuen Schwerpunkt. Bzw musst du X und Y relativ zur Mausverschiebung verschieben. Damit sollte es eigentlich klappen. Dann kannst du entsprechend den Schwerpunkt des Objektes verschieben.
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Zitat:
Dazu benutzt du für X und Y deine Fensterkorrdinate und als Z den Wert aus zNear bzw. zFar. Damit solltest du das bekommen was du willst.
Nicht ganz. Soweit ich weiß arbeitet gluUnProject mit relativen Werten. D.h. Der Z-Wert für die Nearclippingplane ist immer 0, der für die Farclippingplane immer 1. Bei den anderen Koordinaten musst du darauf achten, dass der OpenGL-Ursprung links unten liegt.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Ansonsten - ist das ganze nicht die Geradengleichung im Raum durch 2 Punkte?
Der Strahl beginnt in 0,0,0 als erste Koordinate. Die 2te Koordinate liegt auf der NearClipping Ebene (der Bildschirm stellt ja die near clipping Ebene quasi dar). Die Ebene liegt glaube ich parallel zur XY-Ebene. Durch den Öffnungswinkel (fov) bekommt man die Breite und durch das Ratio die Höhe (oder umgekehrt) des dargestellten Bereiches in OGL-Koordinaten. Dann nur noch Bildschirm-Pixel in OGL-Koordinaten umrechnen (Dreisatz lässt grüßen) und dabei die Verschiebung des Mittelpunktes nicht vergessen.
Aber gluUnproject macht eigentlich genau das - aber für's Verständnis - so sollte es eigentlich auch gehen.
Registriert: So Jun 05, 2005 15:08 Beiträge: 39 Wohnort: Bei Bayreuth
Hi,
Also, vielen Dank, glUnProject ist also wirklich die beste Loesung, danke, funktioniert jetzt denk ich auch!
Danke auch an Lossy Ex, das du dir die Zeit und Muehe nimmst ueberhaupt zu antworten.
Manchmal ist es aber etwas schwierig, sein Problem genau zu beschreiben, also ich bitte um vergebung und gelobige Besserung
Und ich muss nochmal sagen, wie beeindruckend ich es finde, dass IMMER egal was man hier im Forum fragt, am Ende sogar mehr weiss, als man am Anfang ueberhaupt erwartet haette. Jetz weis ich zB endlich wie glUnProject funktioniert!
Also, damit: Problem geloest!
Nochmals danke!
MFG gmgler
_________________ Geniale Menschen sind selten ordentlich, ordentliche selten genial (Albert Einstein)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
gmgler hat geschrieben:
Danke auch an Lossy Ex, das du dir die Zeit und Muehe nimmst ueberhaupt zu antworten. Manchmal ist es aber etwas schwierig, sein Problem genau zu beschreiben, also ich bitte um vergebung und gelobige Besserung
Wenn ich der Meinung bin etwas konstruktives beitragen zu können dann tue ich das auch. Und dafür bin ich ja genau so da wie alle Anderen. Um wie in diesem Beispiel dir zu helfen. Wegen der Problembeschreibung. Das ist immer so eine Sache. Jeder setzt seine Prioritäten anders. Speziell macht es da auch nen gewaltigen Unterschied ob man schon Jahre lang professionel programmiert oder eben nicht. Falls unsere (meine) Hinweise dann manchmal ein wenig forsch sind dann versteh das bitte nicht falsch. Aber wenn einem niemand sagt, dass etwas nicht ganz so ist wie es sein sollte, dann wird man es selber auch nur recht schlecht merken.
gmgler hat geschrieben:
Und ich muss nochmal sagen, wie beeindruckend ich es finde, dass IMMER egal was man hier im Forum fragt, am Ende sogar mehr weiss, als man am Anfang ueberhaupt erwartet haette.
Ich denke mal, dass ist es was Foren von wirklich guten Foren unterscheidet. Und das ist es auch was DGL so besonders macht.
Dafuer muss ich wissen, wie Opengl arbeitet, bzW welchen VERZERRUNGSFAKTOR es verwendet (Hintere seite eines Quadrates um wieviel keurzer als die Vorderseite?)
Das ist meiner Meinung nach "allgemeines" Hintergrundwissen.
ähm so einfach ist das nun doch wieder nicht, um genau zu sein wird das ganze mit einer projektionsmatrix berechnet, das sollte dir bei den ersten tutorials aufgefallen sein. es werden die schnittpunkte mit der bildschirmebene ausgehend vom objekt durch den betrachter hindurch, in abhängigkeit des fov berechnet.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.