ich bin noch relativ neu in der Materie und habe gestern mal angefangen, mit ein wenig mit GLSL zu beschäftigen. Dabei habe ich ein Verständnisproblem bezüglich der Nutzung von Texturen.
Die Textur wurde geladen. Im Fragmentshader deklariere ich ein uniform sampler Variable um mit der Textur zu arbeiten. Die Shader funktionieren soweit auch einwandfrei.
Allerdings muss ich die uniform folgendermassen setzen:
Code:
glUniform1i(location,0);
anstatt wie ich eigentlich dachte durch
Code:
glUniform1i(location,textureID);
wobei textureID das von glGenTexture(1,&textureID) gesetzte handel für die entsprechende Textur ist (Wert ist 1).
Mir ist also nicht klar warum ich 0 anstatt dem handel an den shader übergeben muss.
Eigentlich nicht nötig denke ich, aber hier meine gebastelten Shader: Vertex-Shader:
#version 150 uniform sampler2D texture0; in vec3 voutcolor; // vertex-color passed by vertexshader in vec2 vouttex; // texture-coords out vec4 col; // final color
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Der Sampler (im Shader) greift nicht über die ID auf eine Textur zu, sondern direkt auf die Textureinheit (TMU), und genau diese setzt du über die Uniform-Variable. Wenn du also eine Textur auf TMU0 gebunden hast, dann musst du auch 0 bei glUniform übergeben. Ist die Textur hingegen auf TMU3 gebunden entsprechend die 3. Der Shader kann also nicht direkt auf die Textur zugreifen, sondern nur auf die Textureinheit, deren Anzahl ja durch die Hardware begrenzt ist. Ein Zugriff über eine Textur-ID würde ja dieses Textureinheitenlimit umgehen und ist daher rein technisch nicht möglich.
Das leuchtet ein - ich danke euch herzlich für die Antworten. Schade, dass dies nirgends in meinem Büchlein erwähnt wurde, zumindest noch nicht (Beginning OpenGl - Game Programming 2nd Edition).
Bezüglich der Literatur noch eine Frage: Gibt es neben dem OrangeBook ein empfehlenswerts Buch mit Hauptaugenmerk auf GLSL welches auch relativ aktuell ist? Ich finde es überaus verwirrend Bücher zu lesen die auf OpenGL 1.1 Bezug nehmen und dies dann später wieder alles us dem Kopf zu schmeissen um sich mit aktuellen Techniken zu befassen.
Gibt es neben dem OrangeBook ein empfehlenswerts Buch mit Hauptaugenmerk auf GLSL welches auch relativ aktuell ist?
Als Einstieg in GLSL kann ich dir das GLSL Tutorial hier im Wiki empfehlen. Für alles weitere schaust du dir die GLSL Spezifikation in der gewünschten Version an. Für Tricks was man im Shader alles so anstellen kann empfiehlt sich die Shadersammlung.
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.