Рэймарчинг нескольких кубов/вокселейC++

Программы на C++. Форум разработчиков
Anonymous
Рэймарчинг нескольких кубов/вокселей

Сообщение Anonymous »

Я работал над простым воксельным raymarcher в OpenGL. У меня довольно грубая система передачи центральных положений моих вокселей во фрагментный шейдер с помощью буферных текстур. Моя главная проблема — правильно их отобразить. Рендеринг одного вокселя выполняется быстро и хорошо, но я хочу визуализировать несколько. Мне не удалось найти много информации в Интернете, поэтому я придумал эту систему:
fragment.glsl

Код: Выделить всё

...

float map(in vec3 rayPos)
{
float result = 0;
for (int i = 0; i < 81; i+=3)
{
vec3 pos = vec3(
texelFetch(voxelData, i).x,
texelFetch(voxelData, i+1).x,
texelFetch(voxelData, i+2).x
);

if (i == 0)
{
result = Box(rayPos, vec3(VOXEL_SIZE), pos);
}
else
{
result = min(Box(rayPos, vec3(VOXEL_SIZE), pos), result);
}
}
return result;
}

...

Конечно, предстоит МНОГО оптимизаций, но на данный момент я пытаюсь разработать базовые системы. Этот код отвечает за отображение сетки вокселей 3x3x3. Работает ужасно, но я не могу понять почему. Определенно есть лучший способ сделать это, но я не знаю, как это сделать.


Подробнее здесь: https://stackoverflow.com/questions/786 ... bes-voxels

Вернуться в «C++»