pramithas dhakal Ответов: 1

как хранить треугольники в восьмеричного дерева набора


I am doing High Speed Data Calculation project for a CFD software.For this I have constructed an octree and pupulated it with particles.For collision detection,for each particle ,I have already calculated its neighbouring particles.For this purpose I have first calculated in which octree cube the particle lies and found out all the particles that lie in the neighbouring 26 cubes.This handles particle-particle collision. Now I have a task to handle particle-mesh collision and My mesh is triangle based. For the purpose I need to store the triangle in an octree and for each particle in an octree cube, I have to find out which triangles are lying in the neighbouring 26 cubes.And finding in which octree cube the triangle lies seems a difficult task since a single triangle can lie in more than one cube. so we need to check multiple points along its edges and its face to find out in exacltly which cube it lies. And one can never be sure how many such points along the edge and in the face of the triangle be taken for the purpose of checking since the size of the octree cube and triangle itself can be variable.
Так что, пожалуйста, помогите мне в этом.каковы стандартные процедуры, обычно используемые для хранения треугольника в восьмидереве и определения его местоположения(i.e.in в каком Кубе октрея он лежит)?

OriginalGriff

От этого? Нет, скорее всего, нет.
Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

pramithas dhakal

I am doing High Speed Data Calculation project for a CFD software.For this I have constructed an octree and pupulated it with particles.For collision detection,for each particle ,I have already calculated its neighbouring particles.For this purpose I have first calculated in which octree cube the particle lies and found out all the particles that lie in the neighbouring 26 cubes.This handles particle-particle collision. Now I have a task to handle particle-mesh collision and My mesh is triangle based. For the purpose I need to store the triangle in an octree and for each particle in an octree cube, I have to find out which triangles are lying in the neighbouring 26 cubes.And finding in which octree cube the triangle lies seems a difficult task since a single triangle can lie in more than one cube. so we need to check multiple points along its edges and its face to find out in exacltly which cube it lies. And one can never be sure how many such points along the edge and in the face of the triangle be taken for the purpose of checking since the size of the octree cube and tringle itself can be variable.
Так что, пожалуйста, помогите мне в этом.каковы стандартные процедуры, обычно используемые для хранения треугольника в восьмидереве и определения его местоположения(i.e.in в каком Кубе октрея он лежит)?

Sergey Alexandrovich Kryukov

Если вы предоставите достаточно подробностей и объясните свои проблемы, вы можете получить помощь, поскольку такие проблемы относительно просты.
http://whathaveyoutried.com - пока что?
—СА

pramithas dhakal

I am doing High Speed Data Calculation project for a CFD software.For this I have constructed an octree and pupulated it with particles.For collision detection,for each particle ,I have already calculated its neighbouring particles.For this purpose I have first calculated in which octree cube the particle lies and found out all the particles that lie in the neighbouring 26 cubes.This handles particle-particle collision. Now I have a task to handle particle-mesh collision and My mesh is triangle based. For the purpose I need to store the triangle in an octree and for each particle in an octree cube, I have to find out which triangles are lying in the neighbouring 26 cubes.And finding in which octree cube the triangle lies seems a difficult task since a single triangle can lie in more than one cube. so we need to check multiple points along its edges and its face to find out in exacltly which cube it lies. And one can never be sure how many such points along the edge and in the face of the triangle be taken for the purpose of checking since the size of the octree cube and tringle itself can be variable.
Так что, пожалуйста, помогите мне в этом.каковы стандартные процедуры, обычно используемые для хранения треугольника в восьмидереве и определения его местоположения(i.e.in в каком Кубе октрея он лежит)?

Stefan_Lang

Вы упомянули обнаружение столкновений, подразумевая движущиеся объекты. Нет никакого смысла хранить движущиеся объекты в окт-дереве, так как вычисления, необходимые для этого, должны были бы повторяться непрерывно!

Поэтому ваш вопрос не имеет смысла: либо точки движутся и хранение их в окт-дереве было ошибкой с самого начала, либо сетка движется, и в этом случае хранение этого в окт-дереве нецелесообразно.

1 Ответов

Рейтинг:
1

tugrulGtx

Почему вы используете как однородную сетку (я понимаю это из вашего "соседа 26.."), так и октодерево одновременно для одной и той же задачи (обнаружение столкновений)?

У вас может быть широкое окт - дерево для широкофазных столкновений (частица- сетка). Затем в каждом широком узле окт-дерева, который заполнен, есть субокт - дерево, чтобы держать его треугольники (частица- треугольник).

Сначала проверьте, происходит ли столкновение с "сетчатым объектом", и если он сталкивается, то проверьте, какой треугольник является таковым по поддереву.

Поскольку число ячеек сетки << количество треугольников, первое окт-дерево будет достаточно маленьким, чтобы иметь возможность перестроиться в каждом кадре. Затем в каждом поддереве вы можете просто "преобразовать" координаты вместо того, чтобы заново их строить. Вращалась ли сетка? Затем поверните октри, не перестраивайте его. Я предположил, что сетки статичны. Для статических сеток также можно кэшировать индексные массивы для доступа к узлам на 1 шаге вместо log2(n) шагов. Если сетки динамичны(а также частицы динамичны, я предполагаю), то взгляните на "свободное октодерево". Они имеют более высокие нормальные объемы на узел, поэтому он нуждается в менее частых обновлениях.