Я делаю симуляцию погоды в Opengl 4.0 и пытаюсь создать небо, создав полноэкранный четырехугольник на заднем плане. Я пытаюсь сделать это, заставляя вершинный шейдер генерировать четыре вершины, а затем рисуя треугольную полосу. Все компилируется просто отлично, и я вижу все другие объекты, которые я сделал раньше, но неба нигде не видно. Что я делаю не так?
main.cpp
GLint stage = glGetUniformLocation(myShader.Program, "stage");
//...
glBindVertexArray(FS); //has four coordinates (-1,-1,1) to (1,1,1) in buffer object
glUniform1i(stage, 1);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindVertexArray(0);
вершинный шейдер
uniform int stage;
void main()
{
if (stage==1)
{
gl_Position = vec4(position, 1.0f);
}
else
{
//...
}
}
фрагментный шейдер
uniform int stage;
void main()
{
if (stage==1)
{ //placeholder gray colour so I can see the sky
color = vec4(0.5f, 0.5f, 0.5f, 1.0f);
}
else
{
//...
}
}
Я также должен упомянуть, что я новичок в OpenGL и что он действительно должен быть в OpenGL 4.0 или более поздней версии.
EDIT: я понял, в чем проблема, но до сих пор не знаю, как ее исправить. Квадрат существует, но отображается только в том случае, если я умножаю его на матрицу вида и проекции (но тогда он не остается приклеенным к экрану, а просто вращается вместе с остальной частью сцены, чего я не хочу). По сути, мне как-то нужно переключиться обратно в 2D или в экранное пространство или как там это называется, нарисовать квадрат и снова переключиться в 3D, чтобы все остальные объекты работали нормально. Как?
z
в массиве вершин на0
. Этот1
находится точно на дальней плоскости отсечения и может быть проблемой. Кроме того, если у вас включено отсечение лиц, убедитесь, что точки плоскости расположены против часовой стрелки. (также может потребоваться отключить для этого запись в буфер глубины и отрисовать его сначала!). - person Tim Čas   schedule 23.12.2016(+/- 1, +/- 1, 0)
. И вы можете дать очки, нажав на маленький треугольник, который появляется слева от комментария, если вы наведете на него курсор (хотя не уверен, что для этого есть минимальный предел репутации) --- но не беспокойтесь об этом. - person Tim Čas   schedule 25.12.2016