我正在尝试将一个简单的纹理(64x64)渲染到一个64x64的四边形上。四边形本身已经渲染出来了,但是纹理没有渲染出来。(它只渲染了一个空白的白色64x64的四边形。)
我正在使用SOIL来加载图像。
这是我的渲染代码,我可能没有正确映射它,所以可能就是问题所在。
我替换了LodePNG为SOIL(Simple OpenGL Image Library),使用起来更加简单,但仍然无法工作。
根据下面的答案建议,我添加了glTexEnv,但仍然只得到一个白色框,我会尝试一些其他设置,但我认为那不是问题所在。(编辑:尝试了各种标志,没有任何变化,仍然只有一个白色四边形。)
我正在使用SOIL来加载图像。
static GLuint LoadPNG(char* filename)
{
GLuint texture = SOIL_load_OGL_texture
(
filename,
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
);
if (texture == 0)
Log("Texture Load Error: " + string(filename));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return texture;
}
这是我的渲染代码,我可能没有正确映射它,所以可能就是问题所在。
// Draw Textured Quad
static void glDrawTexturedQuad(glRectF rect, GLuint tex)
{
// Bind Texture
glBindTexture (GL_TEXTURE_2D, tex);
// Render Settings
glEnable(GL_TEXTURE_2D);
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glColor3ub(255,255,255);
glBegin(GL_QUADS);
// Top Left
glTexCoord2f(0, 1);
glVertex2f(rect.X, rect.Y);
// Top Right
glTexCoord2f(1, 1);
glVertex2f(rect.X + rect.Width, rect.Y);
// Bottom Right
glTexCoord2f(1, 0);
glVertex2f(rect.X + rect.Width, rect.Y + rect.Height);
// Bottom Left
glTexCoord2f(0, 0);
glVertex2f(rect.X, rect.Y + rect.Height);
glEnd();
}
这是其余相关代码。(这只是临时代码,为了测试把它们粘在一起,我会在让它正常工作后想出更好的解决方案。)
static GLuint Texture;
static void LoadTextures()
{
Texture = LoadPNG("filename");
}
static void glRenderTest()
{
glRectF rect = {20, 20, 64, 64};
glDrawTexturedQuad(rect, Texture);
}
我也按照这里找到的所有建议进行了操作,但我的纹理仍然没有显示出来。
我替换了LodePNG为SOIL(Simple OpenGL Image Library),使用起来更加简单,但仍然无法工作。
根据下面的答案建议,我添加了glTexEnv,但仍然只得到一个白色框,我会尝试一些其他设置,但我认为那不是问题所在。(编辑:尝试了各种标志,没有任何变化,仍然只有一个白色四边形。)
glDisable(GL_CULL_FACE);
来关闭它。 - Constantinius