В настоящее время я пытаюсь реализовать трассировщик лучей с треугольной сеткой в WebGL 2. Пока я загружаю данные в буферную текстуру, а затем распаковываю их следующим образом:
for (int i = 0; i < vertsCount; i += 3) {
a = texelFetch(uMeshData, ivec2(i, 0), 0);
b = texelFetchOffset(uMeshData, ivec2(i, 0), 0, ivec2(1, 0));
c = texelFetchOffset(uMeshData, ivec2(i, 0), 0, ivec2(2, 0));
bool isHit = hitTriangleSecond(R_.orig, R_.dir, a.xyz, b.xyz, c.xyz, uvt, triangleNormal, intersect, z);;
if (isHit) {
if (z<mindist && z > 0.001) {
//weHitsomething
}
}
}
Вы знаете, гдепроблема лежит.Когда я пытаюсь загрузить сетку множеством треугольников, она становится слишком медленной, особенно когда я добавляю уровень отражения, например, 4 раза, потому что мне приходится проверять каждый треугольник, каждый кадр ... так что это не оптимально.
Я слышал о технике ограничивающего прямоугольника и некоторых данных для хранения дерева.Но я не знаю, как это сделать.
Было бы неплохо, если бы кто-то предоставил некоторую информацию об этом.И помимо этого.
Я имею в виду и вторую текстуру с некоторой информацией о каждой загружаемой сетке, но texelfetch не похож на массивы, когда у вас есть индекс, поэтому вы знаете, какие объекты находятся в этом направлении, этот лучхиты.
Так что мой вопрос в том, как проверить «ближайшие» треугольники в направлении луча.