opengl - мерцание фрагментов даже при отключенном тесте глубины - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь сделать четырехугольник с цветной рамкой.Я использую текстурные координаты, чтобы определить, следует ли считать фрагмент частью границы или нет.Если это часть границы, то визуализируйте его зеленым цветом или другим черным цветом.

Вот мои вершины / нормали / текс координаты.

    float vertices[] = {
        // posistions          // normals           // texture coords
      -0.5f, -0.5f, -0.5f,  0.0f,  0.0f, -1.0f,  0.0f,  0.0f,
       0.5f, -0.5f, -0.5f,  0.0f,  0.0f, -1.0f,  1.0f,  0.0f,
       0.5f,  0.5f, -0.5f,  0.0f,  0.0f, -1.0f,  1.0f,  1.0f,
       0.5f,  0.5f, -0.5f,  0.0f,  0.0f, -1.0f,  1.0f,  1.0f,
      -0.5f,  0.5f, -0.5f,  0.0f,  0.0f, -1.0f,  0.0f,  1.0f,
      -0.5f, -0.5f, -0.5f,  0.0f,  0.0f, -1.0f,  0.0f,  0.0f,
    }

Вот мой фрагментный шейдер

#version 330 core

in vec3 frag_pos;
in vec3 frag_nor;
in vec2 frag_tex;

out vec4 frag_color;

void main()
{
    vec2 origin = vec2(0.01, 0.01);

    float width =  1.0 - origin.x * 2.0;
    float height = 1.0 - origin.y * 2.0;

    if( (frag_tex.x >= origin.x && frag_tex.x < origin.x + width) &&
        (frag_tex.y >= origin.y && frag_tex.y < origin.y + height) )
    {
        frag_color = vec4(0.0);
    }
    else
    {
        frag_color = vec4(0.0, 1.0, 0.0, 0.0);
    }
}

И вот как я рендеринг

glDisable(GL_DEPTH_TEST);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 6);

GIF LINK

Справа я рисую тот же четырехугольник с помощью другого сквозного фрагментного шейдера в режиме каркаса.

Как вы можете видеть, левый четырехугольник мигает при перемещении камеры.Любые идеи, как это исправить.

1 Ответ

0 голосов
/ 14 июля 2019

Проблема существует даже с применением 2D текстуры.Чтобы исправить это, я использовал Mipmaps с этими фильтрами.

    glGenerateMipmap(GL_TEXTURE_2D);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
...