Только верхняя правая часть изображения отображается при использовании октодерева

В настоящее время я работаю над документами Revelles, Urena и Lastra. «Эффективный параметрический алгоритм обхода Октри». В Ray — Octree алгоритмы пересечения кто-то реализовал это и вставил свой код. Моя реализация должна быть такой же, за исключением того, что я использовал несколько векторов для вычислений.
Однако при использовании этого Octree визуализируется только верхняя правая часть изображения, для остальной части изображения октрео не пройдено. Проверка, пройти или нет, происходит следующим способом:

bool Octnode::intersect( Ray r, SurfaceData *sd )
{
unsigned int a = 0;
v3d o = r.origin();
v3d d = r.direction();

if ( r.direction()[0] < 0. ) {
o[0] = _size[0] - r.origin()[0];
d[0] = -r.direction()[0];
a |= 4;
}
if ( r.direction()[1] < 0. ) {
o[1] = _size[1] - r.origin()[1];
d[1] = -r.direction()[1];
a |= 2;
}
if ( r.direction()[2] < 0. ) {
o[2] = _size[2] - r.origin()[2];
d[2] = -r.direction()[2];
a |= 1;
}

v3d t0 = ( _min - o ) / d;
v3d t1 = ( _max - o ) / d;

scalar t = std::numeric_limits<double>::max();

// traversal -- if any -- starts here
if ( t0.max() < t1.min() ) {
return processSubtree( t0, t1, r, &t, sd, a );
} else {
return false;
}
}

[Редактировать] Вышеуказанный метод реализует функцию

void ray_parameter( octree *oct, ray r )

из бумаги. Как отметил К. Урена, в статье есть ошибка, которая приводит к тому, что обратный путь неверен. К сожалению, обход пропускается до того, как эта ошибка может войти в игру.
В группе Google, которую можно найти по ссылке C. Urena, кажется, что размер узла октри вычисляется по-разному. Я сделал:

_size = _max - _min;

против

_size = ( _max - _min ) / 2.;

в группе гугл. Я проверю это и выложу еще одно обновление. [/Редактировать]

[Редактировать 2] Применение исправления, упомянутого Карлосом, и уменьшение размера вдвое привело меня к этому:

введите описание изображения здесь

Сферы должны быть полностью визуализированы, но, по крайней мере, не все лучи для верхней левой четверти отклоняются. [/ Редактировать 2]

[Редактировать 3] Используя разные наборы данных, я получаю, казалось бы, лучшие результаты, похоже, мне придется исследовать некоторые другие части кода.

введите описание изображения здесь введите описание изображения здесь

[/ Редактировать 3]

0

Решение

У меня нет времени на подробный просмотр вашего кода, но, возможно, вам следует проверить на наличие ошибки в оригинальной статье, которая также может присутствовать в вашем коде: вы можете увидеть ее описанную здесь: http://lsi.ugr.es/curena/inves/wscg00/ — есть указатель на группу Google с обсуждением.

Надеюсь, это поможет,
Карлос.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]