У меня есть QuadTree, который может быть разделен путем размещения объектов в узлах. У меня также есть планета, сделанная в OpenGL в форме четырехугольной сферы. Проблема в том, что я не знаю, как их собрать. Как QuadTree хранит информацию о Планете? Хранить ли вершины в листовых узлах Quad Tree? И если да, то как мне разбить данные вершин на 4 набора, не разрушая текстурирование и нормали. Если это так, могу ли я использовать индексы вместо этого?
Итак, мой вопрос вкратце:
Как мне сохранить данные о моих вершинах в четырехугольном дереве, чтобы я мог разделить ландшафт на планете так, чтобы планета стала более высокой детализации на более близком расстоянии. Я предполагаю, что это делается с помощью камеры в качестве объекта, который разделяет узлы.
Я прочитал много статей, и большинство из них не в состоянии охватить это. Quadtree — одна из самых важных вещей для моего приложения, так как она позволяет мне отображать много планет одновременно, и в то же время я могу получить хорошее определение на земле. Красивая картинка моей планеты и ее HD-солнца:
Видео планеты также можно найти Вот.
Мне удалось реализовать простое четырехугольное дерево на плоской плоскости, но я продолжаю получать массивные дыры, так как думаю, что я получаю неправильные позиции. Это последний пост здесь — http://www.gamedev.net/topic/637956-opengl-procedural-planet-generation-quadtrees-and-geomipmapping/ и вы можете получить там src. Есть идеи как это исправить?
То, что вы ищете, это как алгоритм ROAM (Оптимальная адаптация в реальном времени сетки), чтобы иметь возможность увеличивать или уменьшать точность вашей модели в зависимости от расстояния до камеры. Алгоритм будет использовать ваше quadtree.
Проверьте эту серию на гамасутре о том, как сделать Процедурная вселенная в реальном времени.
Редактировать: причина, по которой вы бы использовали квадродерево с этими методами, состоит в том, чтобы минимизировать количество вершин в областях, где детали не нужны (например, плоская местность). Определение квадродерева на википедия довольно хорошо, вы должны использовать это в качестве отправной точки. Цель состоит в том, чтобы создать дочерние узлы для вашего дерева квадрантов, где у вас есть изменения в вашей «высоте» (вы можете генерировать стороны вашего куба, используя карту высот), пока не достигнете предопределенной глубины. Возможно, в качестве первого прохода вы должны попытаться избежать дерева квадрантов и использовать простую сетку. Когда вы работаете, вы «оптимизируете» свой процесс, добавляя quadtree.
Чтобы понять, как квадродерево и данные о местности работают вместе для достижения рендеринга на основе LOD
Читать Эта бумага. Легко понять с помощью иллюстративных примеров.
Однажды я реализовал LOD на сфере. Идея состоит в том, чтобы начать с простой дипирамиды: верхняя пирамида представляет северную сферу, а нижняя представляет южную сферу. Основания пирамид совпадают с экватором, кончики находятся на полюсах.
Затем вы делите каждый треугольник на 4 меньших столько, сколько вы хотите соединяя середины краев треугольника.
столько, сколько вы хотите основано на ваших потребностях, расстояние до камеры и размещения объектов могут быть вашими триггерами для подразделения