Эффективное отсечение усеченной пирамиды при использовании шейдеров

Я хотел бы знать, какой самый эффективный способ выполнить отсечение усеченного конуса с использованием программируемого конвейера. Я имею в виду, если я правильно понимаю, следуя методу, описанному здесь: Geometric Aproach (кстати, единственный описанный там метод, который работал у меня некоторое время назад), такие функции, как glGetFloatv (GL_MODELVIEW_MATRIX, ...), больше не действительны, как конечное положение вершины вычисляется на этапе шейдера. Должен ли я вычислять плоскости усеченной кости на стороне клиента для каждого преобразования ограничивающего прямоугольника, которое я должен проверить перед рендерингом?

Спасибо.


person NapardBlose    schedule 07.02.2016    source источник


Ответы (1)


Идея отбраковки усеченной пирамиды состоит в том, чтобы предотвратить отправку полигонов в GPU в первую очередь, тех полигонов, которые вы уже знаете и которые будут отбракованы после вершинного шейдера. Идея состоит в том, чтобы предотвратить преобразование этих полигонов вершинным шейдером. Используя шейдеры или нет, лучший способ - отслеживать плоскости усеченной пирамиды на стороне клиента и перемещаться по графу сцены (может быть иерархическим деревом или просто списком) и отбирать объекты, которые лежат за пределами усеченной пирамиды, и не использовать glGetFloatv или, что эквивалентно, это неэффективно, поскольку будет копировать данные с графического процессора. Вместо этого вы можете использовать буферы обратной связи.

person concept3d    schedule 08.02.2016
comment
Спасибо за совет. Я уже отслеживаю плоскости усеченного конуса на стороне клиента, но опять же, следуя методу отсечения, описанному выше, мне нужна окончательная матрица просмотра модели для подачи в алгоритм, эта матрица уникальна для каждой модели, а ее окончательное значение вычисляется в вершине шейдер, поэтому кажется, что мне нужно пересчитать усеченную пирамиду для каждой модели, которую я должен проверить, перед вызовом шейдера, даже если камера вообще не двигалась. Я что-то упускаю? Потому что мне это не кажется логичным. Заранее спасибо. - person NapardBlose; 08.02.2016
comment
Вы должны отслеживать преобразования для каждого объекта, вычислять матрицу просмотра модели на стороне клиента и применять усеченную отсечку, таким образом вы избегаете каждый раз получать матрицу из графического процессора. Я не знаю, чем вы скармливаете свои шейдеры сейчас, но вы можете вычислить матрицу вида модели на ЦП и передать ее шейдеру. - person concept3d; 09.02.2016
comment
На самом деле я этим и занимаюсь, кажется, я на правильном пути, спасибо !! - person NapardBlose; 09.02.2016