簡體   English   中英

Open GL-如何從像素緩沖區加載紋理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM