Registriert: Sa Sep 29, 2007 18:43 Beiträge: 38 Wohnort: STR / BLN / LAU
Guten Abend alle zusammen,
Meine Fragmentshader liest immer die Werte der ersten von drei Texturen aus.
Ich weiß nun nicht so genau woran es liegt.
Muss man einen Vertexshader (habe keinen geschrieben) schreiben und diesen machen:
Code:
gl_TexCoord[0] = gl_MultitexCoord0.st;
Wofür ist denn überhaupt gl_MultitexCoord0, gl_MultitexCoord1, gl_MultitexCoord3, ...usw? Ich habe beispiele gefunden, da nimmt man gl_MultitexCoord0 für die Koordinaten von allen Texturen und dann für jede textur eine extra gl_MultitexCoordX.
Wenn hier kein Fehler existiert, dann liegts wohl am OpenGL-Code...
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
//load textures to shader, must be done before glUseProgram();
glUniform1i(dwDistImgTexture_m, GL_TEXTURE0);
glUniform1i(dwQValueTexture_m, GL_TEXTURE1);
glUniform1i(dwOffsetCorrTexture_m, GL_TEXTURE2);
muss was anderes sein.
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Sieh den Unterschied.
Du schreibst
Code:
glUniform1i(..., GL_TEXTURE0);
glUniform1i(..., GL_TEXTURE1);
glUniform1i(..., GL_TEXTURE2);
Besser ist:
Code:
glUniform1i(..., 0);
glUniform1i(..., 1);
glUniform1i(..., 2);
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: Sa Sep 29, 2007 18:43 Beiträge: 38 Wohnort: STR / BLN / LAU
Mmmmh....da hab ich wohl was falsch verstanden. Hinter GL_TEXTURE0 verbirgt sich ja irgendwas anderes jenseits der 0.
Also, ich kann es erst morgen ausprobieren.
Aber dennoch zum Verständnis:
Wenn ich mit glUniform1i(texture0, 0) meine Texturen im Shader identifiziere, wofür muss ich denn
gl_ActivateTexture(GL_TEXTURE0) und anschließende glBindTexture(...,texture0) aufrufen.
Ich dachte das man damit texture0 als Textureinheit 0 festlegt und der Compiler den Rest regelt, das heißt für den richtigen Zugriff im Shader sorgt.
Oder ist der Aufruf gl_ActivateTexture(GL_TEXTURE0) bei einem Fragmentshader überflüssig?
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
Die Texturen werden genauso gebunden, wie als wenn man keine Shader verwenden würde. Im Shader werden nicht direkt Texturen sondern Sampler deklariert. Der Wert, den man bei glUniform1i übergibt, legt fest von welcher Textureeinheit (GL_TEXTURE0 ... GL_TEXTURE15) dieser Sampler liest. Die sampler im Shader und die Textureeinheiten (GL_TEXTURE0 ... GL_TEXTURE15) haben also erstmal gar nichts miteinander zu tun. Die Zuordnung geschieht über glUniform1i.
Registriert: Sa Sep 29, 2007 18:43 Beiträge: 38 Wohnort: STR / BLN / LAU
Guten Morgen,
also ich habs probiert, aber das hilft auch nicht. Ich lese bei allen 3 Texturen die Werte der ersten Textur aus.
Kann mir jmd bestätigen, das ich definitiv keinen Vertex-Shader brauche, in dem ich explizit die Multitexturkoordinaten für den FragShader zuweisen muß?
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
Registriert: Sa Sep 29, 2007 18:43 Beiträge: 38 Wohnort: STR / BLN / LAU
Meine Weißheit ist am Ende, ich habe irgendetwas nicht verstanden.
Ich habe jetzt einen Vertexshader geschrieben um die Koordinaten zu übergeben, habe Code-Auszüge aus dem Orange Book (S.263) benutzt. Danach für den Fragmentshader das Gleiche (S. 264-265). Es sind Auszüge für Multitexturing. Anstatt nur Werte der 1. Textur zu lesen, lese ich jetzt r=0, g=0, b=0, a=1, also sind die Texturen gar nicht angekommen.
GLSL-Code aus dem Buch müsste ja eigentlich richtig sein, ergo liegt der Fehler beim Applikations-Code.
Ich zeige den mal. Vielleicht fällt ja jemandem was auf.
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
Registriert: Sa Sep 29, 2007 18:43 Beiträge: 38 Wohnort: STR / BLN / LAU
Ok es liegt an der Reihenfolge folgender Aufrufe.
Das ist ja schon ein wenig seltsam...
Code:
glUseProgram(dwFragProgram_m);
glUseProgram(dwVertexProgram_m);
Code:
glUseProgram(dwVertexProgram_m);
glUseProgram(dwFragProgram_m);
zumindestens lese ich nun wieder die Werte der ersten Textur aus allen sampler2D-Variablen aus....
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
_________________ Tu es oder tu es nicht!
Tu es hier und jetzt oder tu es nicht hier und jetzt!
Aber tu niemals etwas und denke du würdest es lieber nicht tun....
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ach ja sowas kenn ich.
Hätte ich früher gelesen, dass du in allen drei Units den gleichen Wert hat, hätte ich dir sofort sagen können, dass du mal ganz genau deine Uniform-Locations prüfen sollst, das ist eine typische Ursache dafür.
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 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.