OpenGL. Обводка треугольника (triangle outlining) неправильная
Функция рисования рисует два треугольника. Первый представляет собой фиолетовый треугольник, используется в качестве обводки. Другой — это уменьшённый в размерах «тот самый» обведённый треугольник.
Моя проблема заключается в том, что, во первых, ширина нижней часть обводки неравна другим сторонам, во вторых, если сместить камеру, то о нормальной обводке можно вообще не говорить.
Я использую функцию 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);
}
Источник: Stack Overflow на русском