Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Hi,
ist ne bekloppte idee, aber kann man in Delphi die x,y,z koordinaten eines gesetzten Vertex auslesen?
ich stell mir da sowas wie glVertex.xyz oder so vor. Ist mir wichtig, weil ich nähmlich ne Matrix schreiben will, bei der ich die xyz koordinaten des aktuellen Vertex brauche.
Im etwa müsste das ja existieren, weil im vertexshader gibts das ja...
würd mich freuen, wenn das jemand weiß! (ich werd schon fast wahnsinnig, weil ich nicht weiß, wie ich das lösen soll)
ich programmier zwar noch nicht so lange OpenGL, aber ich kann mir vostellen, dass das nicht wirklich klappt. Du erstellst ja keine Vertices, sondern du zeichnest sie. Und die Daten werden gleich verarbeitet und in den Farbpuffer gespeichert. Normalerweise ist auch der Tiefenpuffer aktiviert - das heißt, dass sogar der Großteil aus dem Farbpuffer schnell wieder verschwindet bzw. gar nicht erst aufgenommen wird.
Du kannst auf jeden Fall die Vertices in ein Array speichern. Aber vielleicht gibt es die Möglichkeit doch, OpenGL zu benutzen - ich kenn sie nicht.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
eben, es wird sofort verarbeitet, das heißt, dass die Vertex koordinaten mit der modelviewperspectionmatrix multipliziert werden, um sie auf den Bildschirm zu bringen. Das geschieht im shader per ModelViewProjectionMatrix * gl_Vertex. Das ist zumindest der offizielle Term um die fixed function pipeline in dem Bereich nach zustellen. Nun frag ich mich ob es Möglich ist genau die Daten dieses gl_Vertex im Prog abzurufen. Am liebsten wäre mir ein Zeiger, der auf die Daten zeigt.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das Problem ist, dass glVertex im Prinzip in der Tat eine Art zeichenaufruf ist. Mit dem Aufruf von glVertex werden alle anderen States (Color, VertexAttributes, TexCoords, Normalen usw.) ausgelesen und mit den Koordinaten zusammen irgendwo abgelegt. Beim glEnd dann wird alles gezeichnet.
Daher wird es wohl unmöglich sein, an die Koordinaten ranzukommen - zumal du die Matrizen zwischen glBegin/glEnd eh nicht ändern kannst. Wozu genau brauchst du das eigentlich?
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 network • my 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
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Dafür gibt es in OpenGL den Feedbackpuffer, der u.a. im Redbook dokumentiert sein sollte. Allerdings sollte man beachten dass dieser in Software läuft und daher recht langsam ist, am besten rechnet man also selber um und kann dann direkt optimierte Matrixoperationen nutzen (MMX, SSE, etc.).
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
was ich anstellen will ist etwas komplizierter zu erklären, aber ich versuchs mal:
Die Idee ist es eine Matrix zu entwerfen, die die parallelprojektion ersetzen soll, um eine Panoramaansicht zu rendern.
Dazu möchte ich die kartesischen Weltkoordinaten in polarkoordinaten umwandeln. Das heißt einen Winkel, der auf dem Bildschirm als x interpretiert wird und einer, der als y interpretiert wird. die Entfernung des Punktes zum koordinatenursprung stellt dann die tiefe dar. die Werte werden natürlich alle auf Wertebereiche von 0-1 normiert um ogl gerecht zu werden.
Das Problem an der Sache ist, dass die 4x4matrix, die genau dies tut ganz viele x,y,z beinhaltet, was ja nu ganz doof ist, weil die zum zeitpunkt der festlegung der matrix ja garnicht bekannt sind. deshalb wollte ich einen zeiger, der an die stelle zeigt, wo die Vertex daten liegen zu dem zeitpunkt wie die matrix sie braucht.
Andernfalls muss ich mir überlegen, wie ich meine formeln um die x,y,z erleichtere, woran ich schon ein wenig länger hänge.
Ich hoffe nu habt ihr verstanden, wo das Problem liegt
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich glaube, ich verstehe.
Dafür würde ich mir eine Kapselungsfunktion von glVertex schreiben.
Dabei wendest du in dieser Funktion deine Matrix auf die Koordinaten an und gibst das dann an OpenGL weiter. Eventuell musst du dir halt auch noch eine extra kopie der Modelviewmatrix halten, falls die vorher mit den Koordiaten multipliziert werden muss. In dem Falle setzt du dann die "echte" Modelviewmatrix auf die Identitätsmatrix, weil du die Multiplikation ja selber machst. Das Problem dabei ist halt, dass du in Shadern auch die Matrix errechnen musst, um wieder auf Weltkoordinaten zurückkommen zu können.
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 network • my 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
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.