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
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 ..
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? –
@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