我想獲得一個OpenGL紋理在2D中在屏幕上呈現。我知道這看起來很簡單,但我是OpenGL新手,這給我帶來了一些麻煩。爲什麼我的OpenGL紋理顯示爲白色?
無論我嘗試什麼,它都顯示出白色。
我已經看到其他問題,如OpenGL renders texture all white,並檢查了清單上的所有內容,但我似乎無法弄清楚源代碼,我非常感謝任何幫助。
我很確定我在某個地方犯了一些愚蠢的錯誤,並且試圖廢棄我的代碼並重寫了幾次。
以下是與主要方法運行的窗口相關的代碼。
//Window is a custom wrapper for GLFWwindow
Window thirdwindow(window_width, window_height, "Three");
thirdwindow.show();
thirdwindow.setPosition(300, 300);
ThirdLoop(thirdwindow);
這裏是ThirdLoop:
static void ThirdLoop(Window& win)
{
GLuint tex = loadBMP("cat.bmp");
auto size = win.getWindowSize();
win.beginDraw();
while (running)
{
if (win.isClosing())
running = false;
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set background color to black and opaque
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the color buffer (background)
DrawImage(size, tex);
win.render();
Update();
}
}
和的DrawImage(對於奇縮進道歉這裏,一個複製粘貼的東西)
void DrawImage(const Size<int>& size, GLuint texture) {
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, size.width, 0.0, size.height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
// Draw a textured quad
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(0, 1); glVertex3f(0, 100, 0);
glTexCoord2f(1, 1); glVertex3f(100, 100, 0);
glTexCoord2f(1, 0); glVertex3f(100, 0, 0);
glEnd();
glDisable(GL_TEXTURE_2D);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}
loadBMP
從http://www.opengl-tutorial.org/beginners-tutorials/tutorial-5-a-textured-cube/拍攝。
您是否嘗試過通過GPU調試運行呢?如果您使用的是AMD卡,則可能與[GPU Perf Studio](http://developer.amd.com/tools-and-sdks/graphics-development/gpu-perfstudio/)類似;我認爲NVIDIA有相同的東西。 – Nitori