我想获得一个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