【问题标题】:switching between textures loaded with SOIL在加载了 SOIL 的纹理之间切换
【发布时间】:2013-04-10 10:32:21
【问题描述】:

我正在尝试加载两个纹理,然后在我的显示功能中在两者之间切换。我正在使用 SOIL 库来加载纹理:

tex_2 = SOIL_load_OGL_texture
    (
            "s9.png",
            SOIL_LOAD_AUTO,
            SOIL_CREATE_NEW_ID,
            SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT
    );

tex_1 = SOIL_load_OGL_texture
    (
            "s8.png",
            SOIL_LOAD_AUTO,
            SOIL_CREATE_NEW_ID,
            SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT
    );

然后我用

glBindTexture(GL_TEXTURE_2D, tex_1) 
or
glBindTexture(GL_TEXTURE_2D, tex_2);

在两者之间切换。问题是我必须错误地加载它们,我不确定如何。我最后加载的任何纹理(上面代码中的 tex_1)都是我尝试使用 glBindTexture 切换时为 tex_1 和 tex_2 获得的纹理。有什么想法吗?

在加载纹理之前,我设置了混合并打开纹理和精灵

glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_POINT_SPRITE);
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

然后在我的显示函数中,我循环遍历我想要绘制的所有点并尝试在使用 glVertex3f 绘制点之前更改当前纹理:

for(int i=0; i<num_particles; i++)
{
    //select texture to use
    if(class[i] == 2.0f)
        glBindTexture(GL_TEXTURE_2D, tex_2);
    else
        glBindTexture(GL_TEXTURE_2D, tex_1);

    glVertex3f(posn[3*i], posn[3*i+1], posn[3*i+2]);
}

目标是我有两种类型的点,每个点要绘制的精灵取决于点所在的类

【问题讨论】:

  • 你应该发布更多代码,这样我们才能真正看到你的问题是什么。

标签: opengl textures soil


【解决方案1】:
for(int i=0; i<num_particles; i++)
{
    //select texture to use
    if(class[i] == 2.0f)
        glBindTexture(GL_TEXTURE_2D, tex_2);
    else
        glBindTexture(GL_TEXTURE_2D, tex_1);

    glVertex3f(posn[3*i], posn[3*i+1], posn[3*i+2]);
}

您不能在 glBegin()/glEnd() 对中调用 glBindTexture()

如果在glBegin的执行和glEnd的相应执行之间执行glBindTexture,则生成GL_INVALID_OPERATION

最后一次成功 glBindTexture() 可能在最近的SOIL_load_OGL_texture() 通话中。这就是为什么tex_1tex_2 似乎包含相同的纹理数据:tex_2 永远不会反弹。

【讨论】:

    【解决方案2】:

    与之前的答案一样:您不能在 glBegin/glEnd 之间更改纹理。

    那你能做什么?

    【讨论】:

    • 纹理图集对于固定功能点精灵有点困难:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多