OpenGl - 如何重复纹理?

时间:2013-05-29 14:45:25

标签: c++ opengl

这是我到目前为止所做的:

 Rectangle::Rectangle(int x, int y)
  {
    sizeX_ = x * CASE;
    sizeY_ = y * CASE;
    texture_ = gdl::Image::load("./ressources/floor.jpg");
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  }

  void  Rectangle::draw()
{                                                                          
    texture_.bind();
    glBegin(GL_QUADS);

    glTexCoord2f(0.0f, 0.0f);
    glVertex3f(0.0f, 0.0f, 0.0f);

    glTexCoord2f(sizeX_ / CASE, 0.0f);
    glVertex3f(sizeX_, 0.0f, 0.0f);

    glTexCoord2f(0.0f, sizeY_ / CASE);
    glVertex3f(sizeX_, 0.0f, sizeY_);

    glTexCoord2f(sizeX_ / CASE, sizeY_ / CASE);
    glVertex3f(0.0f, 0.0f, sizeY_);

    glEnd();
  }

构造函数在案例中采用地图的大小。例如:(10, 10)。实际尺寸为(10 * CASE),其中CASE = 400

但这并没有正确重复纹理。纹理似乎减少了(好点)并且从左上角到右下角包装。

我做错了吗?

1 个答案:

答案 0 :(得分:5)

glTexParameter适用于当前绑定的纹理。它不会全局设置参数。这意味着在调用此函数之前需要绑定纹理:

glBindTexture(GL_TEXTURE_2D, ...);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);