Open GL ES:如何在平面上重复纹理?

时间:2018-02-21 11:16:35

标签: java opengl-es opengl-es-2.0 arcore

我想使用openGL ES 2.0(Android => Java)创建一个0.2米x 1.05米的平面,并用重复的方形纹理(尺寸0.1米x 0.1米)覆盖它。因此,我将在长度上有10.5个纹理,在宽度上有2个纹理。

任何人都可以帮忙处理一些代码吗?

感谢。

1 个答案:

答案 0 :(得分:2)

像G.M.说它很容易,只需将纹理设置为重复采样,这样当UV值低于或大于(0 - 1)时它就会包裹。我不使用Java,但它大致看起来像这样:

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, imgWidth, imgHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, loadedImg);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

// LOOKING DOWN Y AXIS
//  TRIANGLE1       TRIANGLE 2
//  *0              *3   *5
//
//  *1   *2              *4

//                          POS                 UVs
    float vertices[] = { 0.f, 0.f, 0.f,         0.f, 0.f,
                         0.f, 0.f, 0.2f,        0.f, 2.f,
                         1.05f, 0, 0.2f,        10.5f, 2.f,

                         0.f, 0.f, 0.f,         0.f, 0.f,
                         1.05f, 0.f, 0.2f,      10.5f, 2.f,
                         1.05f, 0.f, 0.f,       10.5f, 0.f };

基本上,飞机的远侧不是(1,1),而是远侧的UV值为(10.5,2),包裹超过十次。