Артефакты glDrawArray - PullRequest
       21

Артефакты glDrawArray

3 голосов
/ 27 июля 2011

Я пытаюсь визуализировать сетку текстуры, используя glDrawArray и GL_TRIANGLE_STRIP, но при рисовании существуют артефакты, но они неравномерно распределены по экрану.

Скриншот проблемы.

Это код, который я использую:

void draw() {
    glDisableClientState(GL_COLOR_ARRAY);
    glBindTexture(GL_TEXTURE_2D, tex.name);

    glPushMatrix();
    glScalef(cell_size, cell_size, 1);

    GLfloat vertices[w*8];

    { // populate only once and translate
        int i = 0;
        for (int x=0; x<w; x++) {
            vertices[i++] = x; vertices[i++] = 0;
            vertices[i++] = x; vertices[i++] = 1;
            vertices[i++] = x+1; vertices[i++] = 0;
            vertices[i++] = x+1; vertices[i++] = 1;
        }
    }

    GLfloat texCoords[w*8];     
    const float off = 1.00f/16.0f;

    for (int y=0; y<h; y++) {
        int i = 0;
        for (int x=0; x<w; x++) {
            const int v = tiles[x+y*w];
            const float boff = v*off;
            texCoords[i++] = boff; texCoords[i++] = 0;
            texCoords[i++] = boff; texCoords[i++] = 1;
            texCoords[i++] = boff+off; texCoords[i++] = 0;
            texCoords[i++] = boff+off; texCoords[i++] = 1;
        }

        glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
        glVertexPointer(2, GL_FLOAT, 0, vertices);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, w*4);

        glTranslatef(0, 1, 0);
    }
    glPopMatrix();

}

Есть идеи, в чем может быть проблема?

Ответы [ 2 ]

5 голосов
/ 31 июля 2011

Я немного заржавел на OGL, но вы должны изменить параметры рендеринга текстуры, например:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
0 голосов
/ 04 августа 2011

GL_NEAREST фильтрация может работать, но вы также можете рассмотреть возможность изменения свойств обтекания краев (или даже границы) вашей текстуры:

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...