DGL https://delphigl.com/forum/ |
|
Unklarheit beim setzten der Textur-Uniform https://delphigl.com/forum/viewtopic.php?f=20&t=9530 |
Seite 1 von 1 |
Autor: | newlife2k3 [ Mo Okt 11, 2010 21:34 ] |
Betreff des Beitrags: | Unklarheit beim setzten der Textur-Uniform |
Krug zum Gruße, 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: Code: #version 150 uniform mat4 mvmatrix; // modelviewmatrix uniform mat4 projmatrix; // projectionmatrix in vec3 vinvertex; // incoming vertex in vec3 vincolor; // incoming color in vec2 vintex; // incoming texture-coord out vec3 voutcolor; // pass color to frag-shader out vec2 vouttex; // pass texture-coord to frag-shader void main() { vouttex = vintex; voutcolor = vincolor; gl_Position = projmatrix * (mvmatrix * vec4(vinvertex,1.0)); } Fragment-Shader: Code: #version 150 uniform sampler2D texture0; in vec3 voutcolor; // vertex-color passed by vertexshader in vec2 vouttex; // texture-coords out vec4 col; // final color void main() { vec4 coltmp = vec4(voutcolor,1.0); col = coltmp * texture(texture0,vouttex.st); } Würde mich über einen kurzen Tip oder eine kleine Erklärung freuen. |
Autor: | Sascha Willems [ Di Okt 12, 2010 08:09 ] |
Betreff des Beitrags: | Re: Unklarheit beim setzten der Textur-Uniform |
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. |
Autor: | Coolcat [ Di Okt 12, 2010 08:49 ] |
Betreff des Beitrags: | Re: Unklarheit beim setzten der Textur-Uniform |
In der Zusammenfassung: Code: glUniform1i(location,tmu);
glActiveTexture(GL_TEXTURE0 + tmu); glBindTexture(GL_TEXTURE_2D, textureID); |
Autor: | newlife2k3 [ Do Okt 14, 2010 01:27 ] |
Betreff des Beitrags: | Re: Unklarheit beim setzten der Textur-Uniform |
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. |
Autor: | Coolcat [ Do Okt 14, 2010 08:08 ] |
Betreff des Beitrags: | Re: Unklarheit beim setzten der Textur-Uniform |
Zitat: 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. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |