代码之家  ›  专栏  ›  技术社区  ›  eddiewastaken

将多个纹理绑定到不同的四边形

  •  1
  • eddiewastaken  · 技术社区  · 5 年前

    我已经设法让我的游戏阅读PNG文件,并成功地纹理我的对象。老实说,我不能百分之百确定它是如何工作的-现在我想扩展到加载几个纹理,并使用我指定的一个。

    下面是我的PNG加载函数:

    //Loads PNG to texture
    GLuint loadPNG(string name) {
        nv::Image img;
        GLuint myTextureID;
    
        if (img.loadImageFromFile(name.c_str())) {
            glGenTextures(1, &myTextureID);
            glBindTexture(GL_TEXTURE_2D, myTextureID);
            glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
            glTexImage2D(GL_TEXTURE_2D, 0, img.getInternalFormat(), img.getWidth(), img.getHeight(), 0, img.getFormat(), img.getType(), img.getLevel(0));
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16.0f);
        }
        else {
            MessageBox(NULL, L"Failed to load texture", L"Sorry!", MB_OK | MB_ICONINFORMATION);
        }
        return myTextureID;
    }
    

    在我的主要函数中,我定义纹理如下:

    //Load in player texture
    testTexture = loadPNG("test.png");
    

    哪里 testTexture 是全局变量,类型为 GLuint . 在主屏幕上画矩形 draw

    //Used to draw rectangles
    void drawRect(gameObject &p) {
        glEnable(GL_TEXTURE_2D);
    
        //Sets PNG transparent background
        glEnable(GL_BLEND);
    
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        //glBindTexture(GL_TEXTURE_2D, myTexture);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0); glVertex2f(p.x, p.y);
        glTexCoord2f(1.0, 0.0); glVertex2f(p.x + p.width, p.y);
        glTexCoord2f(1.0, 1.0); glVertex2f(p.x + p.width, p.y + p.height);
        glTexCoord2f(0.0, 1.0); glVertex2f(p.x, p.y + p.height);
        glEnd();
    
        glDisable(GL_TEXTURE_2D);
    }
    

    这工作很好,纹理我的所有对象与定义的纹理。但是,我希望能够定义更多的纹理,并使用它们。我试着搬家:

    glBindTexture(GL_TEXTURE_2D, myTextureID);

    loadPNG drawRect

    glBindTexture(GL_TEXTURE_2D, testTexture);

    然而,这并不适用于任何纹理。如果有人有什么想法,我会非常感谢你的帮助。谢谢!

    1 回复  |  直到 5 年前
        1
  •  4
  •   Sneaky Turtle    5 年前

    必须绑定纹理才能使用 glTexImage2D . 不删除对的呼叫 glBindTexture loadPNG