2016-02-07 3 views
2

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

Спасибо.

ответ

0

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

+0

Спасибо за отзыв. Я уже отслеживаю плоскости frustum на стороне клиента, но опять же, следуя методу отбраковки, описанному выше, мне нужна окончательная матрица модели для подачи алгоритма, эта матрица уникальна для каждой модели, а ее конечное значение вычисляется в вершине shader, поэтому кажется, что мне приходится пересчитывать усечку для каждой модели, которую я должен проверить, перед вызовом шейдера, даже если камера вообще не двигалась. Я что-то упускаю? Потому что это не кажется мне логичным. Заранее спасибо. – NapardBlose

+0

Вы должны следить за преобразованиями для каждого объекта и вычислять матрицу просмотра модели на стороне клиента и применять отбраковывание усечения, таким образом вы избегаете получать матрицу с графического процессора каждый раз. Я не знаю, что вы сейчас кормите своими шейдерами, но вы можете вычислить матрицу модели на процессоре и передать ее шейдеру. – concept3d

+0

Вот что я делаю на самом деле, кажется, что я на правильном пути, спасибо! – NapardBlose

Смежные вопросы