【问题标题】:OpenGL: glTexImage2D conflicts with glGenLists & glCallList?OpenGL:glTexImage2D 与 glGenLists 和 glCallList 冲突?
【发布时间】:2009-04-26 21:59:22
【问题描述】:

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

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

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

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

有谁知道为什么使用 call list 和 glTexImage2D 可能会相互冲突?

EDIT 我也忘了提到:我确实调用 glBindTexture(GL_TEXTURE_2D, this->texture);在调用粒子系统之前的drawLoop内部。

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

【问题讨论】:

    标签: c++ c opengl


    【解决方案1】:

    glTexImage2D 将纹理上传到 video-ram(简而言之)。

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

    这毫无意义,因此被忽略了。

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

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

    【讨论】:

    • hi nils..是的,我只调用 glTextImage2D 一次(在程序开始时)
    • 如果这样做,为什么要将它放入列表中?
    • 嗨..对不起,我没有解释清楚。我把我所有的 3D 字体放到一个列表中。对于粒子系统,我使用 glGenTextures(1, &this->texture); glBindTexture(GL_TEXTURE_2D, this->texture); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    【解决方案2】:

    这可能根本不是 glTexImage2D 和 glCallList 的冲突。你的纹理贴图好吗?您是否正确设置了纹理坐标?尝试检查顶点到纹理坐标是否不匹配。

    【讨论】:

    • 纹理映射对于我的粒子系统来说看起来不错。两者在独立实例化时工作正常。只有当我将它们都显示在同一个屏幕上时,它才起作用。
    【解决方案3】:

    我已经解决了这个问题。 在使用 GL_TEXTURE_2D 之前,您需要设置启用功能=> glEnable(GL_TEXTURE_2D); 而且在使用glCallList之前,还需要设置disable function => glDisable(GL_TEXTURE_2D);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多