OpenGL оптимизирует рендеринг скайбоксов - PullRequest
4 голосов
/ 04 ноября 2019

Я учусь рисовать скайбокс с помощью кубических карт из следующего ресурса .

Я дошел до того, что он говорит о том, как мы можем оптимизировать рендеринг скайбокса. ,Я получаю, что вместо рендеринга скайбокса сначала, что приведет к вычислению width*height ваших фрагментов области просмотра, а затем только к тому, что они будут перерисованы другими объектами, лучше всего нарисовать его последним и подделать его значение глубины, равное 1.0fприсваивая gl_Position вершинного шейдера скайбокса gl_Position = pos.xyww, по существу делая каждый gl_FragCoord.z равным 1.0f из-за деления перспективы.

Теперь после получения скайбокса каждый из его фрагментов имеет максимумзначение глубины 1.0f он меняет функцию глубины на GL_LEQUAL вместо GL_LESS.

Здесь я немного запутался. Если мы отрисовываем скайбокс последним и его значения глубины равны 1.0f, почему нам нужно изменить функцию глубины на GL_LEQUAL? Не будет ли достаточно установить его на GL_LESS, потому что если мы будем рендерить каждый другой объект в сцене, его значение глубины, вероятно, будет меньше, чем 1.0f, поэтому оно запишет свое значение в z-buffer, значение меньшечем 1.0f. Теперь, если мы установим функцию глубины для скайбокса на GL_LESS, он будет передавать только фрагменты со значением глубины, меньшим, чем на самом деле в z-buffer, что, вероятно, будет пропускать только фрагменты, которые не охватывают другие объекты, так почемунам нужны GL_LEQUAL?

1 Ответ

5 голосов
/ 04 ноября 2019

Когда вы изначально очищали буфер кадров в начале кадра, вы, вероятно, сделали это до значения 1.0f. Поэтому, если вы вообще хотите нарисовать скайбокс, вам нужно разрешить скайбоксу рисовать в областях с очищенным значением глубины.

...