Я пытаюсь построить надлежащую разрушаемую местность, только для исследовательских целей.
Ну, все прошло хорошо, но разрешение меня не удовлетворяет.
Я видел много примеров того, как люди реализуют алгоритм MC, но большинство из них,
насколько я понимаю, использует функции для триангуляции конечной сетки, которая не
подходит для меня.
Я постараюсь кратко объяснить, как я строю свою местность, и, возможно, кто-то
из вас даст мне совет, как улучшить или увеличить разрешение конечной местности.
1) Предварительный расчет треугольников MC.
Я запускаю простой цикл просмотра справочных таблиц MC для каждого случая (0-255) и вычисления треугольников.
в ярости: [0,0,0] - [1,1,1].
Здесь нет проблем.
2) Рельеф
У меня есть класс местности, в котором хранятся мои воксели.
В общем, это выглядит так:
int size = 32;//Size of each axis.
unsigned char *voxels = new unsigned char[(size * size * size)/8];
Итак, каждая ось имеет длину 32 единицы, но я храню информацию о вокселях на бит.
То есть, если бит включен (1), что-то есть, и что-то должно быть нарисовано.
У меня есть пара функций:
TurnOn(x,y,z);
TurnOff(x,y,z);
чтобы включить или выключить местоположение вокселя. (Помогает работать с битами).
После выделения ландшафта я запускаю перлин-шум и включаю или выключаю биты.
У моего класса местности есть еще одна функция - извлечь номер дела "Марширующие кубики" (0-255) из местоположения x, y, z:
unsigned char GetCaseNumber(x,y,z);
путем определения, включены или выключены соседи этого вокселя.
Здесь нет проблем.
3) Отрисовка детали
Я делаю циклы для каждой оси, извлекаю номер случая, затем получаю предварительно вычисленные треугольники для случая,
перевод в координаты x, y, z и рисование этих треугольников.
Здесь нет проблем.
Итак, результат выглядит так:
Но, как вы можете видеть, в любом месте разрешение не сравнимо, например, с этим:
MC http://www.angelfire.com/linux/myp/MCAdvanced/mcnormal.gif
Я видел в примерах MC, что люди используют то, что называется "изо значения", что я не понимаю.
Любые предложения, как улучшить мою работу, или каковы значения iso, и как реализовать ее в единой сетке, были бы по-настоящему хороши.