2017-05-27 3 views
0

Ich lade 3 Texturen in ArrayWie wählt man den Textur-Layer aus dem Textur-Array zum Rendern in OpenGL?

int width = 1024; 
int height = 1024; 
GLuint ID; 
glGenTextures(1, &ID); 
glBindTexture(GL_TEXTURE_2D_ARRAY, ID); 
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, width, height, 3) 
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[0]); 
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 1, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[1]); 
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 2, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[2]); 
glBindTexture(GL_TEXTURE_2D_ARRAY, 0); 

Wenn ich unmittelbaren Modus verwenden, wie kann ich feststellen, welcher Schicht das ich verwenden mag von Textur zu zeichnen, indem glTexCoord2f (...) nach glBindTexture (GL_TEXTURE_2D_ARRAY, ID) ? Muss ich bestimmte Methoden verwenden?

Antwort

2

Immediate-Modus ist nicht das Problem, die feste Funktion Pipeline ist - Textur-Arrays können nur mit Shadern abgetastet werden. Wenn Sie Shader verwenden, können Sie den Layer-Index auf eine bestimmte Art und Weise an den Shader übergeben (als Attribut - generisch oder builtin, uniform, mit anderen Pufferobjekten, aus etwas anderem berechnen, was auch immer ...).

Wenn Sie die feste Funktion Pipeline verwenden, gibt es einfach keine Möglichkeit. Sie können nur zu 3D-Texturen wechseln, um die Array-Texturen zu emulieren, aber Sie werden viel strengere Größenbeschränkungen und viel mehr Overhead beim Filtern mit Filtern erhalten.

Es gibt jedoch wirklich keine guten Gründe, den Sofortmodus und/oder die Fixed-Function-Pipeline im Jahr 2017 zu verwenden. Diese Dinge sind vor einem Jahrzehnt veraltet.

+0

Ich werde es später zu VBO ändern, ist es möglich, es ohne Shaders zu machen? Ich habe sie nie benutzt. – ground0

+1

@ ground0: Welcher Teil von "Textur-Arrays kann nur mit Shadern abgetastet werden" ließ Sie denken, dass Sie die Verwendung von Shadern vermeiden könnten? –

Verwandte Themen