The*_*ter 6 c c++ opengl texture-mapping
我正在尝试将简单的纹理(64x64)渲染为64x64四边形.四边形本身是渲染,但不是纹理.(它呈现一个空白的64x64四边形.)
我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的渲染代码,我可能没有正确映射它,所以这也可能是问题.
// 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();
}
Run Code Online (Sandbox Code Playgroud)
这是相关代码的其余部分.(这实际上只是临时代码,将它们粘合在一起进行测试,在我开始工作之后我会想出一个更好的解决方案.)
static GLuint Texture;
static void LoadTextures()
{
Texture = LoadPNG("filename");
}
static void glRenderTest()
{
glRectF rect = {20, 20, 64, 64};
glDrawTexturedQuad(rect, Texture);
}
Run Code Online (Sandbox Code Playgroud)
我也遵循了这里找到的所有建议它仍然没有显示我的纹理.
我将LodePNG替换为SOIL(简单的OpenGL图像库),它更容易使用,但仍然无法正常工作.
我按照下面的答案中的建议添加了glTexEnv,但我仍然只是得到一个白色的盒子,我会尝试更多的设置,但我不认为那是它.(编辑:试过各种旗帜,没有,只是一个白色四边形.)
你试过打电话吗?
glEnable(GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, texture);
Run Code Online (Sandbox Code Playgroud)
之前
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)
小智 0
我没有看到你设置纹理函数。尝试在几何绘图函数中的 glBindTexture 之后添加以下内容:
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE ); // texture function: GL_DECAL, GL_MODULATE, etc.
Run Code Online (Sandbox Code Playgroud)
尝试不同的纹理函数来满足您的需要:GL_DECAL、GL_BLEND、GL_MODULATE 等。
| 归档时间: |
|
| 查看次数: |
10856 次 |
| 最近记录: |