gpt4 book ai didi

c++ - OpenGL 只显示在方法中加载的纹理?

转载 作者:行者123 更新时间:2023-11-28 03:41:32 26 4
gpt4 key购买 nike

我的 Render 类中有一个名为 showMainMenu() 的方法。在 Render 中,我将我的纹理定义为位图

Bitmap* bBall;
Bitmap* bWall;
Bitmap* bStart;
Bitmap* bEnd;
Bitmap* bHighscores;
Bitmap* bHelp;
Bitmap* bStar;

在我的渲染器中,我这样做:

this->bBall = new Bitmap("ball.bmp");
this->bEnd = new Bitmap("beenden.bmp");
this->bStart = new Bitmap("starten.bmp");
this->bStar = new Bitmap("star.bmp");
this->bHelp = new Bitmap("hilfe.bmp");
this->bHighscores = new Bitmap("highscores.bmp");
this->bWall = new Bitmap("wall.bmp");

在 showMainMenu() 中,我按以下方式绑定(bind)纹理:

glEnable(GL_TEXTURE_2D); //Texturen aktivieren

//draw Start button
glBindTexture( GL_TEXTURE_2D, this->bStar->texture);

但我的显示器保持白色 :(当我在我的方法中加载纹理时

Bitmap m = Bitmap("star.bmp");
glBindTexture( GL_TEXTURE_2D, m.texture);

我可以看到纹理。为什么第一个不起作用?

最佳答案

我最好的猜测是,您在创建 OpenGL 上下文之前创建了 Bitmap 实例。然后将加载位图文件,但不会生成纹理对象。解决此问题的最简单方法:在实例化 Bitmap 后(即在构造函数中)只需加载文件数据并将纹理 ID 变量设置为 0。添加一个方法 bindTexture,它会为您调用 glBindTexture(您应该无论如何都要这样做,这就是 OOP 应该工作的方式)。但是还要添加一个测试,如果纹理 ID 为零,然后在绑定(bind)之前生成 ID 和纹理。

例子:

void Bitmap::bindTexture()
{
if(!textureID) {
glGenTextured(1, &textureID);
glBindTexture(GL_TEXTURE_..., textureID);
upload_texture_data();
} else {
glBindTexture(GL_TEXTURE_..., textureID);
}
}

顺便说一句:通过 this-> 访问类成员被认为是糟糕的风格,绝对没有理由这样做。哎呀,甚至将 this 指针转换为基类也不会给您它的虚拟方法,因为隐式向上转换是虚拟的全部要点。

关于c++ - OpenGL 只显示在方法中加载的纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com