[英]Open GL - How to load texture from pixel buffer
我想在四邊形上繪制紋理。 我想從1D無符號字符緩沖區的像素綁定我的紋理,其組織如下:
每個像素由2個字節組成,這2個字節為16位灰度值。
實際上,我嘗試了很多事情,但在Quad上看不到任何東西:
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,未做任何更改。
由於您的緩沖區是16位灰度,因此您應指定GL_UNSIGNED_SHORT
而不是GL_UNSIGNED_BYTE
。 確保您的值分布在整個[0,65535]范圍內,因為對於16位數據,65535是完整的亮度值。
同樣, GL_RED
永遠不是glTexImage2D
internalFormat
參數的有效值。 您應該將GL_R16
用於internalFormat
,將GL_RED
用於format
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.