我正在尝试渲染从.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 *变量中的图像数据。一种方法可行,所以我确定缓冲区不包含无效数据。