Войти
ПрограммированиеФорумГрафика

[РЕШЕНО] Быстрая отрисовка растровой модели, OpenGL (3 стр)

Страницы: 1 2 3
#30
(Правка: 0:27) 0:16, 19 мар 2023

innuendo
я бы texelFetch использовал в его случае.

#31
7:32, 19 мар 2023

fecaloid666
Nsight

#32
9:39, 19 мар 2023

А нельзя ли строить вертексную модель фрезерованной поверхности инкрементально? Ведь вся эта фрезерованная поверхность она не сразу же возникает, а в результате обработки плоской поверхности фрезой.

Изначально - просто квад из четырех вертексов. По мере применения фрезы - добавляются новые вертексы. Основная нагрузка будет только на перестроение индексного буфера (вертексный можно просто заранее взять побольше и добавлять новые вершины через glBufferSubData).

#33
9:56, 19 мар 2023

Еще вариант -  необязательно ведь для вертекса хранить x,y,z. Ведь в современном OpenGL нет предопределенных атрибутов. Можно задать для каждого вертекса только координату Z (и если точность устраивает - это может быть даже uint8), положив все эти данные подряд в буфере и указав нужный страйд (то есть, для uint8 можно задать страйд в 1 байт).

А чтобы не требовался индексный буфер - вертексы в буфере расположить по спирали (прямоугольной) от центра, после чего можно будет все вертексы отрисовать одним дравколлом GL_TRIANGLE_STRIP. В вертексном шейдере недостающие координаты x, y высчитывать из gl_VertexId (сейчас формулу не соображу, но она должна быть не очень сложной).

В таком случае потребление памяти будет точно таким же, как для текстуры.

#34
10:27, 19 мар 2023

А, не, наврал, со спиралью GL_TRIANGLE_STRIP не получается, GL_TRIANGLE_FAN тоже не то. Но чтоб обойтись без индексного буфера явно какое-то решение есть.

#35
11:07, 19 мар 2023

Dmitry_Milk
Вычисления инкрементальные, да, но не всегда с простой модели(в большинстве случаев материал обрабатывается за несколько разных проходов). Точность uint8 для высоты, к сожалению, недостаточна. Индексные буферы - слишком много памяти и, полагаю, меньшая скорость. В нынешней реализации на отрисовку отправляется только одна вершина с инстансингом, float-текстура с картой высот и текстура с цветом точки растра(uint8), то есть ~500MB на максималке, если текстуры обновлять в GPU целиком. Все X,Y координаты и flat-нормали считаются параметрически в геом. шейдере.
Лоды чуть позже запилю, это уже мелочь.


All
Разобрался с нечтением текстуры. Я в юниформ сэмплера писал ID текстуры вместо номера текстурного блока. Вопрос решен. Всем спасибо!

Страницы: 1 2 3
ПрограммированиеФорумГрафика

Тема закрыта.