在OpenGL中显示图像

时间:2013-11-12 04:18:18

标签: opengl

我正在尝试渲染从.asc文件中读取后生成的图像。我执行所有必要的转换,然后在屏幕上显示。输出是ppm图像。最初我使用与Windows API相关的BitBlt函数来渲染图像,它在屏幕上完美显示。然后我尝试使用OpenGL渲染相同的图像而不是。

如果我使用DrawPixels,它会显示黑屏,如果我使用纹理贴图,则显示部分白框。   我以前曾使用targa图像,但这是我第一次创建ppm图像,但我不认为这是一个问题,因为我只是尝试渲染char *类型的缓冲区。

对于BitBlt,我使用:

binfo->bmiHeader.biBitCount = 24;
binfo->bmiHeader.biHeight = -abs(binfo->bmiHeader.biHeight); //for top-down image
SetDIBits(memDC,m_bitmap,0, pApp->GetFrameBufferHeight(), pApp->GetFrameBuffer(), binfo, DIB_RGB_COLORS); //replace the 3rd last argument with the framebuffer

SetStretchBltMode(hDC, COLORONCOLOR);
RECT client;
GetClientRect(hwnd, &client);
BitBlt(hDC,0,0,pApp->GetFrameBufferWidth(),pApp->GetFrameBufferHeight(),memDC,0,0,SRCCOPY);

使用OpenGL:

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_pTextureID);

glPushMatrix();
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -10); //z translation is the last value
    glBegin(GL_QUADS);
        glTexCoord2f(0,0); glVertex2f(0,0);
        glTexCoord2f(1,0); glVertex2f(m_nWindowWidth,0);
        glTexCoord2f(1,1); glVertex2f(m_nWindowWidth,m_nWindowHeight);
        glTexCoord2f(0,1); glVertex2f(0,m_nWindowHeight);
    glEnd();
glPopMatrix();

glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);

m_pTextureId映射pApp-> GetFrameBuffer对象。我基本上尝试使用不同的方法渲染存储在char *变量中的图像数据。一种方法可行,所以我确定缓冲区不包含无效数据。

0 个答案:

没有答案