加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – OpenGL – 2D纹理映射

发布时间:2020-12-16 03:32:40 所属栏目:百科 来源:网络整理
导读:我正在尝试将简单的纹理(64×64)渲染为64×64四边形.四边形本身是渲染,但不是纹理. (它呈现一个空白的64×64四边形.) 我正在使用SOIL来加载图像. static GLuint LoadPNG(char* filename){ GLuint texture = SOIL_load_OGL_texture ( filename,SOIL_LOAD_AUTO
我正在尝试将简单的纹理(64×64)渲染为64×64四边形.四边形本身是渲染,但不是纹理. (它呈现一个空白的64×64四边形.)

我正在使用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);
}

我也遵循了所有的建议here它仍然没有显示我的纹理.

我将LodePNG替换为SOIL(简单的OpenGL图像库),它更容易使用,但仍然无法正常工作.

我按照下面的答案中的建议添加了glTexEnv,但我仍然只是得到一个白色的盒子,我会尝试更多的设置,但我不认为那是它. (编辑:试过各种旗帜,没有,只是一个白色四边形.)

解决方法

你试过打电话吗?
glEnable(GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D,texture);

之前

glTexParameterf(GL_TEXTURE_2D,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_LINEAR);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读