Изменение карты высот, чтобы она отображала 16 hieghtmaps на сетке 4x4 - PullRequest
0 голосов
/ 27 января 2020

Измените программу для отображения 16 одинаковых карт высот, расположенных в сетке 4 x 4. Края карт высот должны располагаться рядом в координатах X и Z. Тем не менее, они не будут касаться в направлении Y, потому что высоты будут другими.

C ++

Приведенный ниже код - это то, что у меня уже есть, я просто не слишком уверен, как заставить его показывать 16 одинаковых карт высот, расположенных в сетке 4х4. Я знаю, что это связано с квадратами на карте высот, но я очень смущен.

 const int HEIGHTMAP_SIZE = 12;
 float heights[HEIGHTMAP_SIZE + 1][HEIGHTMAP_SIZE + 1];  

initDisplay();
    for (unsigned int x = 0; x <= HEIGHTMAP_SIZE; x++)
    {
        for (unsigned int z = 0; z <= HEIGHTMAP_SIZE; z++)
        {
            heights[x][z] = (x % 2) * 0.5f -
            z * z * 0.05f;
        }
    }
    //TextureManager::activate("rainbow.bmp");
    initHeightmapDisplayList();

 void initHeightmapHeights()
 {
    for (unsigned int x0 = 0; x0 < HEIGHTMAP_SIZE; x0++)
    {
        unsigned int x1 = x0 + 1;
        float tex_x0 = (float)(x0) / HEIGHTMAP_SIZE;
        float tex_x1 = (float)(x1) / HEIGHTMAP_SIZE;
        glBegin(GL_TRIANGLE_STRIP);
        for (unsigned int z = 0; z <= HEIGHTMAP_SIZE; z++)
        {
            float tex_z = (float)(z) / HEIGHTMAP_SIZE;
            glTexCoord2d(tex_x1, tex_z);
            glVertex3d(x1, heights[x1][z], z);
            glTexCoord2d(tex_x0, tex_z);
            glVertex3d(x0, heights[x0][z], z);
        }
        glEnd();
    }
 }  

 void initHeightmapDisplayList()
 {
    heightmap_list.begin();
    glEnable(GL_TEXTURE_2D);

    TextureManager::activate("ground.bmp");
    glColor3d(1.0, 1.0, 1.0);
    initHeightmapHeights();
    glDisable(GL_TEXTURE_2D);
    heightmap_list.end();
 }

1 Ответ

0 голосов
/ 03 февраля 2020

Я подозреваю, что у вашего TextureManager уже есть способ сделать это без прямых вызовов OpenGL. Что вы должны сделать, это заставить текстуру повторяться.

glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

К тому времени, увеличив масштаб текстурных координат в 4, вы получите 4x4 сетку исходной текстуры.

...