Нарисуйте Линии над гранями - PullRequest
0 голосов
/ 06 марта 2020

Я загружаю меня sh с помощью современного OpenGL (вершинный и фрагментный шейдеры), и у меня есть цветовая униформа.

Я рисую меня sh с глубиной, затем:

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

и на рисунке l oop Сначала я рисую грани серым цветом, а затем линии черного цвета:

GLint myLoc = glGetUniformLocation(shader_util.get_program_id(), "color");

// draw loop
glm::vec4 vColor { 0.7f, 0.7f, 0.7f, 1.0f };
glProgramUniform4fv(shader_util.get_program_id(), myLoc, 1, glm::value_ptr(vColor));

pMesh->draw_faces();

vColor = { 0.0f, 0.0f, 0.0f, 1.0f };
glProgramUniform4fv(shader_util.get_program_id(), myLoc, 1, glm::value_ptr(vColor));

pMesh->draw_wireframe();

И это методы рисования меня sh:

void Mesh::draw_wireframe()
{
  glDrawArrays(GL_LINE_LOOP, 0, (GLsizei) mVertexIndices.size());
}

void Mesh::draw_faces()
{
  glDrawArrays(GL_TRIANGLES, 0, (GLsizei)mVertexIndices.size());
}

Проблема в том, что линии выглядят следующим образом с прерываниями на чертеже:

enter image description here

Любой совет, как это исправить?

1 Ответ

1 голос
/ 06 марта 2020

Я нашел решение с помощью glPolygonOffset:

glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(1.0f, 1.0f);

glm::vec4 vColor { 0.7f, 0.7f, 0.7f, 1.0f };
GLint myLoc = glGetUniformLocation(shader_util.get_program_id(), "color");
glProgramUniform4fv(shader_util.get_program_id(), myLoc, 1, glm::value_ptr(vColor));

pMesh->draw_faces();

glDisable(GL_POLYGON_OFFSET_FILL);

vColor = { 0.0f, 0.0f, 0.0f, 1.0f };
glProgramUniform4fv(shader_util.get_program_id(), myLoc, 1, glm::value_ptr(vColor));

pMesh->draw_wireframe();

Но я буду искать подобное решение в фрагментном шейдере.

enter image description here

...