Ich haben einen sehr kleinen Shader geschrieben der nur per noise ein paar schöne Farben generiert.
VertexShader:
Code:
varying vec3 MPos;
void main(void)
{
MPos = gl_Vertex.xyz;
gl_Position = ftransfom();
}
FragmentShader:
Code:
varying vec3 MPos;
void main(void)
{
gl_FragColor = vec4(noise3(MPos), 1.0);
}
Dies ist sehr Performence lastig und ich wollte fragen wieso das so ist und warum die noise-Funktion nicht im VertexShader funktioniert?
Außerdem hätte ich noch eine Frage zum Multitexturing mit GLSL.
Ich habe das Beispiel aus dem Tutorial glSlang 2 so wie es ist übernommen aber es funzt nett wie es soll es wird egal was ich tuhe immer nur die Texture aus der TMU0 korekt angzeigt, die aus TMU1 ist komplett so "blaugrau". Gibt es da irgendwas was ich beachten muss.
ok ja das noise problem kann man ja weglassen und davon ausgehen das noise einfach zu auwendig ist.
aber das Multitexturing lässt mir irgendwie keine ruhe.
ich mache das ganz normal:
-Texturen laden (2)
-glactivtexture und dann glbindtextur für beide
-uniform Variable an Fragment-Shader übergeben
-im vertexshader gl_TexCoord[0] = gl_MultiTexCoord0
-Fragment-Shader gl_FragColor = texture2d(tex0, vec2(gl_TexCoord[0])) * texture2d(tex1, vec2(gl_TexCoord[0]));
und siehe da ich sehe "Tex0"
Wenn ich den Shader weglasse und das Multitexturing "normal" mache gehts aber mit Shader nicht.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du musst die einzelnen Sampler innerhalb deiner Anwendung den entsprechenden TMUs zuordnen, denn per Default (kann je nach Implementation variieren) verweisen soweit ich mich noch erinnere alle Sampler auf die gleiche TMU (TMU0), deshalb siehst du wohl auch nur die Textur von TMU0.
Und zur Noisefunktion : Es kann gut möglich sein dass die bei deiner OpenGL-Implentation nicht in Hardware implementiert ist, sondern per Software emuliert wird und daher sehr langsam ist. So war das zumindest bei meiner R9700, die damals noch keinen HW-Noise konnte und Noise dann sehr langsam war. Warum der im VS nicht funzt kann ich nicht sagen, liegt evtl. auch an der OpenGL-Implementation, laut Specs ist das glaubich möglich.
DIe noisy funktion sollte man meiden, da sie z.B. meist nur 0 zurückgibt. Meistend wird stat dessen eine Textur verwendet, wo man auch schon angepasste noisyalgoritmen wie perlinnoisy verwenden kann.
sind Ahhhaaa-Effekte nicht wunderbar. Besonders wenn sie erst nach fast 2 Monaten.
Ich will damit sagen ich hab den Fehler bei den Texturen gefunden. Und es ist eigendlich kein wunder das ich das übersehen habe.
Ich habe bei der Übergabe der TexturSampler geschrieben:
Code:
glUniform1fARB()
und es muss ja
Code:
glUniform1iARB()
heißen.
Jetz funzt es. Hätte vielleicht doch nen bissl Code posten sollen.
Wollte das nur noch mal bemerken falls sowas doch noch mal jemandem passiert *bezweifel*
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.