1
我想在四邊形上繪製紋理。我想我的紋理從組織如下像素的1D無符號字符緩衝區綁定:Open GL - 如何從像素緩衝區加載紋理
每個像素由2個字節,這2個字節是一個16位灰度值。
其實我嘗試了很多東西,但我看不到任何東西在我四:
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();
}
我也試圖TEXTURE_2D改變TEXTURE_1D,並沒有改變什麼..
感謝您的答案,做了這些更改,但我仍然有問題。使用TEXTURE_2D使我的程序崩潰在glTexImage2D函數調用。使用TEXTURE_1D不會使我的程序崩潰,而是在四方面不做任何事情。我的uchar *數組需要在實際數據前後填充嗎? –
@LaurentJerber:默認情況下,行之間的偏移量必須是四個字節的倍數,但在您發佈的代碼中已經是這種情況。如果它仍然崩潰,則問題必須在您未發佈的代碼中的其他地方。特別看看你如何分配緩衝區,也許你有一個bug。 – ybungalobill