ich bin noch blutiger Anfänger in Sachen Shader. Hab gestern angefangen und auch schon ein bissl was hinbekomm.
Jetz wollte ich Shader in mein aktuelles Progrekt einbinden und dabei ist folgendes Problem aufgetreten:
In meinem Projekt verwende ich Shadowmapping für den Schatten.
Wenn ich jetzt allerdings per Multitexturing im Shader wieder meine Texturen und die Schattentextur ausgeben will, wird die Schattentextur nicht über die ganze Szene gerendert sondern auf jede einzelne Primitive, wie ne normale textur eben.
Muss ich die Änderung in der Texturmatrix an den Shader übergeben? und wenn ja wie?
(x natürlich mit dem Index der entsprechenden Texturunit ersetzen - ich empfehle, das übrigens nur auf die Texturunit anzuwenden, wo du es brauchst.)
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
ok danke erstmal.
ich hab es mal so ausprobiert. jetzt sieht es zwar anders aus aber iwie immer noch falsch.
könnte das mit der autom. texturkoordinatengenerierung (gl_TexGen) zusammenhängen?
wie könnte man dieses problem lösen, dass quasi auch im shader die texturkoordinaten korrekt generiert werden?
Also wenn die Shadowmap zB die Silhouette eines Baums darstellt würde ich für jeden Pixel im Fragmentshader über eine Projektion den entsprechenden Punkt auf der Map ausrechen.
Das geht wohl mit "texture2DProj". Kannst mal bei http://wiki.delphigl.com/index.php/Tutorial_Wassereffekt schauen, ob du das was verwenden kannst.
So richtig blick' ich das allerdings auch nicht wie das funktioniert, mit dem Matrizen und so.
Die andere Möglichkeit, die für mich intuitiver ist, wäre das per Hand auszurechnen:
Also die Vertexposition mit der Modelviewmatrix aus dem Vertexshader an den Fragmentshader weiterreichen. Die Richtung der Lichtquelle, wenn es die Sonne ist, als uniform-Variable übergeben, ansonsten die Position. Und mit der Matrix deiner Kamera multiplizieren (Richtungsvektoren natürlich nur drehen und nicht verschieben). Wenn man sich dann den Baum als Fläche im Raum vorstellt, kann man aus der Gerade von der Vertexposition in Richtung Lichtquelle und der Baum-Ebene den Schnittpunkt mit der Ebene errechnen. Dann kann man aus dem Ursprung der Baum-Ebene und den beiden Richtungsvektoren, die die Ebene aufspannen, die Koeffizienten für die Vektoren bestimmen damit der Schnittpunkt rauskommt. Und die Koeffizienten wären dann die Koordinaten für die Textur.
Ist bestimmt nicht die schnellste Variante, aber wie gesagt, das andere Versteh ich auch nicht so wirklich, und wenn hier sonst keiner mehr antwortet, hilft es dir vllt wenigstens ein bischen.
hmmm.. aba soweit ich weis ist die Textur ja schon durch den Fragmentvergleich "gelaufen" und ist schon an den richtigen Stellen hell bzw. dunkel und muss jetzt nurnoch mit der richtigen skalierung und position etc. über die Szene gelegt werden.
Das hat vorher (ohne Shader) glTexGen übernommen (und die Änderung der Texturenmatrix) ... wenn ich jetz die Textur an den Shader übergebe, wird alles was in glTexGen gemacht wird, nicht übermittelt.
Also hab ich versucht das im Shader nachzubauen aber es kommt immer nur Müll raus.
Also eigentlich müssten die Texturkoordinaten ja egal ob Shader oder nicht gleich sein, weil das denke ich nur ein automatisierter Aufruf von glTexCoord ist.
Das heißt, das was Lord Horazont vorgeschlagen hat, würde schon reichen.
Vielleicht kannst du mal noch dem Shader (Vertex und Fragment) posten.
Wenn man mit dem Shader einfach die Fixed Functionpipeline nachbauen würde, dürfte es keinen Unterschied machen, ob der Shader an oder aus ist. Also kann es gut sein, dass der Fehler im Shader liegt.
naja das ist ja in diesem fall egal weil die Texturenmatrix der ersten Textureneinheit nicht verändert wird .. mir gehts ja um die Schattentextur und deren Matrix und alles
Hm, das ist allerdings nicht so gut. Ich denke aber so wäre es richtig, die Vertexposition wird ja auch mit der Matrix an erster Stelle multpliziert.
Kannst ja mal die Texturkoordinaten überprüfen und mit den Sollwerten vergleichen. Richtig gut geht das natürlich nicht, aber wenn man mit "gl_FragColor = gl_TexCoord[1]" die Farbe verändert kann man vllt schon etwas erkennen.
Es kann aber auch sein das "texture2D" bei deinen Texturkoordinaten nicht funktioniert, weil sie vielleicht 3-dimensional sind. Also nicht nur X und Y-Wert bestimmend sind sondern auch Z. Keine Ahnung was bei der automatischen Generierung wirklich erzeugt wird. In dem Fall müsste man dann wohl "texture2DProj" verwenden, aber wie oben schon gesagt, kann ich die Funktionsweise auch nicht so richtig nachvollziehen, also ist das mehr geraten.
okay danke erstmal .. ich bin meiner Problemlösung schon ein stückchen näher gekommen .. und zwar muss der Z-Vergleich im Shader gemacht werden (und evtl. die Texturkoordinatengenerierung auch) .. nur habe ich wiedermal keine Ahung wie .. vielleicht hat sie jmd anderes?
okay .. ich denke ich habe jetzt genug anhaltspunkte um das selber hinzubekommen .. solbald ichs habe (oder wenn ich am verzweifeln bin^^) schreib ich nochmal
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.