2017-07-18 8 views
1

Ich möchte auf ein Quad eine Textur zeichnen. Ich möchte, dass meine Textur aus einem 1D unsigned char buffer von Pixeln wie folgt organisiert binden:Open GL - Wie Textur aus Pixel-Puffer laden

enter image description here

Jedes Pixel aus 2 Bytes besteht, diese 2 Bytes sind ein 16 Bit Grauwert.

Ich habe versucht, tatsächlich eine Menge Dinge, aber ich kann nicht alles auf meinem Quad sehen:

void RawImageDrawer::initializeGL() { 
    glShadeModel(GL_SMOOTH); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClearDepth(1.0f); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_TEXTURE_2D); 
    glDepthFunc((GL_LEQUAL)); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
} 

void RawImageDrawer::resizeGL(int width, int height) { 
    if (height == 0) 
    height = 1; 
    glViewport(0, 0, width, height); 
    glMatrixMode(GL_MODELVIEW);*/ 
    glLoadIdentity(); 
} 

void RawImageDrawer::loadTexture() { 
    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexImage2D(
    GL_TEXTURE_2D, 
    0, 
    GL_RED, 
    1024, 
    1024, 
    0, 
    GL_LUMINANCE, 
    GL_UNSIGNED_BYTE, 
    buffer //unsigned char* described up there 
); 
} 

void RawImageDrawer::paintGL() { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(0.0f, 0.0f, 0.0f); 

    glBindTexture(GL_TEXTURE_2D, texture); 

    glBegin(GL_QUADS); 
    glTexCoord2i(0,0); glVertex3f(-0.5f, -0.5f, 0); 
    glTexCoord2i(0,1); glVertex3f(0.5f, -0.5f, 0); 
    glTexCoord2i(1,1); glVertex3f(0.5f, 0.5f, 0); 
    glTexCoord2i(1,0); glVertex3f(-0.5f, 0.5f, 0); 
    glEnd(); 
} 

Ich habe auch versucht TEXTURE_2D zu TEXTURE_1D zu ändern, nichts geändert hat ..

Antwort

0

Seit Ihr Puffer ist eine 16-Bit-Graustufe. Geben Sie GL_UNSIGNED_SHORT statt GL_UNSIGNED_BYTE an. Stellen Sie sicher, dass Ihre Werte den gesamten [0, 65535] -Bereich verteilen, da für 16-Bit-Daten 65535 der volle Helligkeitswert ist.

Auch GL_RED war nie ein gültiger Wert für internalFormat Parameter von glTexImage2D. Sie sollten lieber GL_R16 für die internalFormat und GL_RED für die format Argument verwenden.

+0

Danke für die Antwort, machte diese Änderungen, aber ich habe immer noch das Problem .. Mit TEXTURE_2D mein Programm zum Absturz bei der glTexImage2D Funktionsaufruf. Die Verwendung von TEXTURE_1D stürzt mein Programm nicht ab, tut aber nichts auf dem Quad. Muss mein uchar * -Array vor und nach den eigentlichen Daten aufgefüllt werden? –

+0

@LaurentJerber: Standardmäßig muss der Offset zwischen den Zeilen ein Vielfaches von vier Bytes sein, aber es ist bereits der Fall in dem Code, den Sie gepostet haben. Wenn es weiterhin abstürzt, muss das Problem an anderer Stelle im Code liegen, den Sie nicht veröffentlicht haben. Schaue dir besonders an, wie du den Puffer aufteilst, vielleicht hast du da einen Bug. – ybungalobill

Verwandte Themen