OpenGL. Обводка треугольника (triangle outlining) неправильная

Рейтинг: 0Ответов: 0Опубликовано: 14.04.2023

Функция рисования рисует два треугольника. Первый представляет собой фиолетовый треугольник, используется в качестве обводки. Другой — это уменьшённый в размерах «тот самый» обведённый треугольник.

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

Я использую функцию glm::scale, как и автор руководства, но не получаю результата. Как исправить программу, чтобы с любого положения у треугольника была обводка «одной ширины»?

void draw()
{   // draw outlined triangle
    glm::mat4 Projection = glm::perspective(glm::radians(45.0f), (float)WINDOW_WIDTH / (float)WINDOW_HEIGHT, 0.1f, 100.0f);
    glm::mat4 View = glm::lookAt(
        glm::vec3(1, 0, 5),
        glm::vec3(0, 0, 0),
        glm::vec3(0, 1, 0)
    );
    glm::mat4 Model = glm::mat4(1.0f);
    glm::mat4 mvp = Projection * View * Model;
    GLuint matrixId = glGetUniformLocation(shaderProgram, "mvp");
    glUniformMatrix4fv(matrixId, 1, GL_FALSE, &mvp[0][0]);
    GLuint colorId = glGetUniformLocation(shaderProgram, "inColor");

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glUniform4fv(colorId, 1, &outlineColor[0]);
    glDrawArrays(GL_TRIANGLES, 0, 3);

    glUniform4fv(colorId, 1, &triangleColor[0]);
    Model = Model * glm::scale(Model, glm::vec3(0.9, 0.9, 0.9));
    mvp = Projection * View * Model;
    glUniformMatrix4fv(matrixId, 1, GL_FALSE, &mvp[0][0]);
    glDrawArrays(GL_TRIANGLES, 0, 3);
}

обведённый треугольник

обведённый треугольник

Ответы

Ответов пока нет.