【问题标题】:OpenGL SOIL painting the entire screen with the texture colourOpenGL SOIL 用纹理颜色绘制整个屏幕
【发布时间】:2013-05-04 04:31:20
【问题描述】:

我正在尝试使用 SOIL 库在 OpenGL 中加载 PNG 纹理,并在 GL QUAD 中显示纹理,但是当我调用该函数时,图像已正确加载,但会更改整个屏幕的颜色!

如果是蓝色图像,屏幕变为蓝色颜料! 如果是红色,则变为红色! 谁知道这是什么原因

没有加载图像的正确颜色:http://i.stack.imgur.com/OHroq.jpg

加载图像时颜色错误:http://i.stack.imgur.com/LyRwJ.jpg

代码:

int LoadGLTextures()     {              

  texture[0] = SOIL_load_OGL_texture("test.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y);

  glBindTexture(GL_TEXTURE_2D, texture[0]);

  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);}

和方码:

  glBindTexture(GL_TEXTURE_2D, texture[0]);

  glBegin(GL_QUADS);

  glColor3f(1.0f, 1.0f, 1.0f);

  glTexCoord2f(0.0f, 0.0f); glVertex3f(mover, 11.0f,  1.0f);
  glTexCoord2f(1.0f, 0.0f); glVertex3f( mover+44,11.0f,  1.0f);
  glTexCoord2f(1.0f, 1.0f); glVertex3f(mover+44,  44.0f,  1.0f);
  glTexCoord2f(0.0f, 1.0f); glVertex3f(mover,  44.0f,  1.0f);

  glEnd();
}

【问题讨论】:

    标签: c opengl mapping textures soil


    【解决方案1】:

    您似乎再也不会禁用纹理了。 OpenGL 是一个状态机,因此您设置或启用的任何内容都会保持这种状态,直到您设置其他内容/禁用它。在您的情况下,看起来您对这个四边形进行纹理化并按您应该指定的方式指定 texcoords。但对于所有其他对象,纹理仍然处于打开状态。 texcoords 也是 GL 状态。但是当您打算绘制无纹理时,您似乎没有为其他四边形设置新的 texcoords,所有顶点都将使用 0.0,1.0 作为 texcoords,因此您基本上使用纹理的边缘 texel 来修改所有其他对象的颜色。

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      相关资源
      最近更新 更多