Erstmal möchte ich mich für die unglaubliche Menge an Wissen, welche ihr in Eurem Wiki bereitstellt, bedanken!
Da ich nur sporadisch mit OpenGL arbeite ist dies wirklich eine große Hilfe für mich.
Nun zu meinem Problem:
Ich hab mir einen Shader gebastelt welcher meine Sprites (nur 2D und orthogonal) mittels Normalmap mit einer schönen Beleuchtung versieht.
Das funktioniert auch einwandfrei aber leider nur auf einem PC.
Hier wo es das tut was es soll habe ich eine ATI-X1800, auf einem zweiten PC mit einer Geforce 6200 sieht alles etwas seltsam aus.
Die Nvidia-Karte oder deren Treiber scheinen überhaupt etwas seltsam zu arbeiten.
Zum Beispiel kompilierte es nicht als ich in zwei Funktionen jeweils eine lokale Variable mit selben Namen hatte.
Da ich mich hier im Forum schon eine Zeit herumtreibe und mir scheint, dass einige sehr erfahrene Leute hier sind, hoffe ich, dass mir jemand irgendwie weiterhelfen kann.
Hm, die Farben werden mit "att", sowie die jeweiligen Lichtteile mit "diff" und "spec", multipliziert. Dabei wird aber auch der Alphawert verändert, sodass weiter entfernte oder vom Licht abgewandte Teile transparent werden. Beim Specularanteil ist das vielleicht egal, aber bei Diffuse nicht so gut, denke ich.
Interessant dass das hier am PC überhaupt nicht ausgewirkt hat.
Auf jeden Fall sind die Affen jetzt auch am anderen PC nicht mehr durchsichtig.
Die Farben stimmen allerdings immer noch nicht und die Farb-Textur wird anscheinend auch nicht einberechnet.
Also bis auf die Transparenz keine Verbesserung
Was ist der Sinn dieser Rotations-Matrix? Was spricht gegen gl_NormalMatrix? (da wäre dann komplett ModelView drin, also auch Kamerabewegung und sowas)
Warum rechnest du da manchmal Vektor * Matrix und nicht Matrix * Vektor, was richtig wäre? Da ich dazu keine Definition finde, wäre es möglich das der ATI-Treiber das einfach umdreht, also Matrix * Vektor rechnet, und Nvidia das macht was du sagst...was natürlich in Müll resultiert.
Die Rotationsmatrix hat eigentlich nur historische Gründe und ich habs einfach noch nicht entfernt
Habs aber nachgeholt und das hat wie erwartet keine Auswirkungen.
Wegen den Matrizen-Multiplikationen:
Die Rotationsmatrix ist doch die einzige Matrix die ich habe. Alles andere sind Vektoren und Skalare.
Ich hab dort sicherheitshalber die Faktoren vertauscht (Matrix*Vektor), hat jedoch auch nichts bewirkt.
Ich hab gehofft, dass ich einen offensichtlichen Fehler mache der einfach behoben ist (was ja auch teilweise der Fall war ).
Aber ansonsten werde ich in den nächsten Tagen schrittweise versuchen den Fehler zu eruieren.
Muss mich nur am anderen PC ein bisschen besser einrichten damit das Testen schneller geht.
ich wär mir nicht so sicher, dass es am shader liegt. Für mich sieht das eher so aus, als würde was bei der Samplerübergabe im Programm nicht passen und beide Sampler die Normalmap-Pipeline ansprechen - Zeig diesen Code auch mal.
_________________ I'm not the signature, I'm just cleaning the floor...
Du vergleichst da Punkte aus verschiedenen Vektorräumen. gl_FragCoord ist in Fensterkoordinaten!
Füge ein varying position im Vertexshader ein und arbeite dann damit.
Code:
varying vec4 position;
position = gl_ModelViewMatrix * gl_Position;
Allerdings dürfte das keinen Unterschied bei der Grafikkarte machen.
Müsste in meinem Fall auch - bis auf die Z-Koordinate des Sprites - aufs selbe rauskommen.
damadmax hat geschrieben:
Ich mag mich jetzt irren. Aber was soll in "normal.a" drin stehen? Ich kenne Normalmaps nur in 24bittige Ausführung.
Da es meine Normal-Map ist, weiß ich, dass da ein Alpha-Kanal ist Dafür hat die ColorMap keinen bzw. keinen interessanten.
Kyro hat geschrieben:
ich wär mir nicht so sicher, dass es am shader liegt. Für mich sieht das eher so aus, als würde was bei der Samplerübergabe im Programm nicht passen und beide Sampler die Normalmap-Pipeline ansprechen - Zeig diesen Code auch mal.
Ja, sieht leider wirklich nicht mehr nach einem Shader-Problem aus.
Die Transparenz am Anfang lag wirklich an der Berücksichtigung des Alpha-Kanals beim Licht.
Die bunten Farben rühren aber scheinbar wo anders her.
Ich hab einen einfachen Shader ausprobiert der eine Textur ohne Änderung anzeigen sollte und das hat auch nicht funktioniert.
Da ich festgestellt habe, dass die Shader-Unterstützung bei weitem nicht so verbreitet ist wie ich gedacht habe, werd ich mein Programm sowieso umschreiben müssen damit es auch ohne funktioniert.
Bei der Gelegenheit werd ich die OpenGL-Befehle usw. untersuchen.
Muss ich eigentlich immer alle Uniforms neu übergeben wenn ich einen Shader verwende (mache ich jetzt) oder reicht es Änderungen zu übergeben?
Ich meine, bleiben die Uniforms erhalten wenn ich zwischenzeitig einen anderen oder keinen Shader verwende?
Und was passiert wenn ein Uniform fehlt? Ist das Verhalten dabei definiert?
Mitglieder in diesem Forum: 0 Mitglieder und 12 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.