DGL https://delphigl.com/forum/ |
|
Matrix an Shader https://delphigl.com/forum/viewtopic.php?f=20&t=7076 |
Seite 1 von 1 |
Autor: | Der Zerhackte [ Mi Nov 21, 2007 19:30 ] |
Betreff des Beitrags: | Matrix an Shader |
Hi, meld mich zurück. Natürlich habe ich ein problem mitgebracht! Ich habe nähmlich vor eine Matrix an den Shader zu übergeben und wollte das per GlUniformMatrize3x3fv(); bla tun. Irgendwie so, dass ich die richtige Funktion erwischt hab bin ich mir sicher. Allerdings hab ich keine Ahnung, wie ich die 9floats da rein bekomme, so dass sie im Shader ankommen. Der Aufbau meiner Matrix ist ein Array[0..2,0..2] of Real. so gehts nicht. Aber wie? pGlFloats will die Funktion haben und der Deklaration nach sind das Zeiger auf Singles... Hab schon einiges Ausprobiert, aber nicht das richtige. |
Autor: | Lord Horazont [ Mi Nov 21, 2007 19:43 ] |
Betreff des Beitrags: | |
Also, du musst der Funktion einen Pointer auf das erste Element deines Single-Arrays übergeben (es muss Single sein). Als Funktion würde ich allerdings glUniformMatrix3fv nehmen, ich weiss aber nicht, ob das besser oder richtiger ist. Gruß Lord Horazont |
Autor: | The-Winner [ Mi Nov 21, 2007 20:37 ] |
Betreff des Beitrags: | |
real=double=8bytes float=single=4bytes |
Autor: | Der Zerhackte [ Mi Nov 21, 2007 20:46 ] |
Betreff des Beitrags: | |
glUniformMatrix3fv(); meinte ich ja:) herlich komisch... Ich habe die inverse TBN-Matrix berechnet und versuche diese dem Shader zuübergeben (bumpmapping) um die Normalen damit zu multiplizieren, um sie in den Worldspace zu konvertieren. Jetzt sehe ich nichts außer schwarz. Mit der normalen TBN-Matrix den Lichtvektor zu multiplizieren um ihn in den Normalspace zu bringen war einfacher, aber ich hab gelesen, dass es weniger Sinn macht, außerdem machte mein Licht dann merkwürdige(anders als geplante) Bewegungen. Wie machst du das, wenn du bumpmapping haben willst? Wie erstellst du die Matrix, oder konvertierst was nach was? Ich habe nähmlich die komische Erfahrung gemacht, dass kein einziges Shadertut bei mir funktioniert, außer simples Texturenzeichnen und einfärben. nebenbei.. was heißt "stack underflow" als GluError? |
Autor: | Lossy eX [ Mi Nov 21, 2007 22:24 ] |
Betreff des Beitrags: | |
Der Zerhackte hat geschrieben: nebenbei.. was heißt "stack underflow" als GluError?
Overflow ist ein Überlauf. Also zu viele Elemente auf dem Stack. Underflow ist ein Unterlauf. Das Gegenteil. Also wenn du versuchst ein Element vom Stack zu nehmen obwohl keines drauf ist. |
Autor: | Der Zerhackte [ Mi Nov 21, 2007 22:37 ] |
Betreff des Beitrags: | |
Das klingt sehr logisch... Aber was kann der Grund sein für einen "underflow" und was kann er anrichten? Denn diese Meldung habe ich eigentlich immer dann, wenn ich nen shader benutze, ohne nicht. Mit meinem shader hab ich ebenfalls Probleme, bezüglich der Koordinaten und der World/Tangent/blaspace konvertierung... kann man das in Verbindung setzen? Die einzigen uniforms, die ich im moment benutze sind 2 sampler2d für die texturen und die kommen beide richtig an. |
Autor: | Lossy eX [ Mi Nov 21, 2007 23:01 ] |
Betreff des Beitrags: | |
So etwas kann sich durchaus auf die Weltkoordinaten von einigen Objekten auswirken. Je nachdem wie es verschachtelt ist. Klassischer Fall für einen Underflow ist so etwas. Code:
Und wie gesagt je nachdem wie sie verschachtelt sind kann sich das durchaus auswirken. Es kann aber auch sein, dass es sich gar nicht auswirkt. Wenn du zum Beispiel nur eine Natrix auf den Stack packst und diese dann doppelt vom Stack nimmst. Wenn der Stack leer ist bekommst du keine mehr und die Aktuelle sollte nicht überschrieben werden. Dann sollte es anzeigetechnisch keine Probleme geben. Höchstens weil du ein zu früh vom Stack nimmst und sich so das wiederherstellen verschiebt. Wenn es stärker verschachtelt ist dann würde sich das Verschieben aber womöglich größer äußern. PS: Overflow ist logischerweise genau andersrum und er äußerst sich erst (minimal) später, da der Stack erst mal volllaufen muss. |
Autor: | Flash [ Mi Nov 21, 2007 23:18 ] |
Betreff des Beitrags: | |
Das mit dem Stack passiert nur wenn der Shader aktiv ist? Na das ist doch ein idealer anhaltspunkt für die Fehlersuche. Guck nach ob du im Renderpfad der beim Shader aufgerufen wird irgendwo Matrizen vom Stack nimmst die du sonst nicht entfernst. Ums einfach zusammenzufassen: Hier im Forum kann man eigentlich nur dann sinnvoll helfen, wenn keine GLFehler auftauchen. Denn wenn die existieren kann auch richtig aussehender Code plötzlich seltsame Ergebnisse liefern. NIEMALS GL-FEHLER IGNORIEREN! Bevor du dich also um was anderes kümmerst muss der Fehler weg. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |