gpt4 book ai didi

c++ - OpenGL:glTexImage2D 与 glGenLists 和 glCallList 冲突?

转载 作者:行者123 更新时间:2023-11-28 04:00:43 31 4
gpt4 key购买 nike

我有一个简单的 OpenGL 应用程序,我在屏幕上显示了 2 个对象:

1) 粒子系统,其中每个粒子都使用 glTexImage2D() 调用进行纹理映射。在 drawEvent 函数中,我将其绘制为具有 4 个 glVertex3f 的 GL_TRIANGLE_STRIP。
2) 从目标文件加载的 3D 文本,其中使用 glNewList/glGenLists 加载每个点并将每个点存储为 glVertex。我通过调用 glCallList 来绘制它。

问题是,一旦我调用 glTexImage2D() 将我的粒子映射到 .bmp 文件,3D 文本就不会显示在屏幕上。粒子看起来很好。 (这不是预期的)

如果我不调用 glTexImage2D,我会同时看到 3D 文本和粒子系统。在这种情况下,粒子系统看起来很糟糕,因为我没有使用任何纹理贴图。 (这是预期的)

有谁知道为什么使用调用列表和 glTexImage2D 可能会相互冲突?

编辑 我也忘了提:我确实调用了 glBindTexture(GL_TEXTURE_2D, this->texture);在调用粒子系统之前在 drawLoop 中。

EDIT2 我只在系统启动时调用 glTexImage2D() 一次(当我对位图进行纹理映射时)

最佳答案

glTexImage2D 将纹理上传到视频 ram(简单地说)。

如果 OpenGL 允许您在列表中放置一个 glTexImage2D 调用,它也必须将像素数据存储在列表中。现在如果你执行这个列表会发生什么?您可以将相同的图像数据上传到相同的纹理中。

这没有意义,因此被排除在外。

如果您想在绘制调用之间更改纹理,请使用 glBindTexure。该调用设置了当前纹理。它要快得多。

关于通过 glTexImage2D 上传图像:每个纹理只执行一次。在程序开始时(如果程序很小)或每次从磁盘加载新内容时。

关于c++ - OpenGL:glTexImage2D 与 glGenLists 和 glCallList 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791687/

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