Ландшафт

Имя проекта Дата
src1 09.05.2003
первый пример с динамическим радиусом видимости, плоская поверхность из полигонов. Можно только вертеть головой
src2 19.02.2004
добавилась возможность загружать объекты по информации из текстового файла, описание объектов также в текстовых файлах. Описание формата в файле formats.txt. Частично отсечение невидимых полигонов - от половины до четверти поверхности.
src3 23.02.2004
новый проект. Выводим маленький фрагмент ландшафта плюс сферы-объекты.
src4 07.01.2005
первый пример с несколькими уровнями детализации ландшафта. Коррекция на границах уровней детализации отсутствует.
src5 10.01.2005
Различные варианты уровней детализации с разным шагом
src6 10.05.2005
Пример с регулируемым числом уровней LOD. Есть коррекция на границах уровней детализации.
src7 28.06.2005
вода рисуется одним большим полигоном
src6_2 29.07.2005
отдельная модификация src6. Добавил текстуру. Текстура используется черно-белая, цвет задается в вершинах. Используем ландшафт сгенерированный собственной программой.
src8 30.07.2005
Вместо загружаемого ландшафта - генерация фрактальным шумом. Добавил некое подобие кэширования вершин.
src9 31.07.2005
сделал простой frustum culling.
src10 2.08.2005
увеличил размер генерируемого пространства и "кэша"
--- 27.09.2005
обнаружил в Интернете статью, в которой описывалась очень похожая технология дробления на уровни - 'Geometry clipmaps: Terrain rendering using nested regular grids' http://research.microsoft.com/~hoppe/geomclipmap.pdf
src11 15.10.2005
сделал освещение. Добавил вычисление нормали (используется для освещения) и кэширование вычисленного значения. Нормаль пока считается просто - как нормаль к плоскости (образуется четырмя точками фрагмента) Нормаль считается для каждого уровня детализации (! используются глобальные переменные !).
src12 25.10.2005
добавил новую версию функции автокорректировки радиуса LOD, добавил раскраску. Подготавливаем модули к переходу на объекты - выделил параметры генерации ландшафта.
Предыдущий проект src12 28.10.2005
на предыдущей версии опробовал функцию 1-abs(fn) (складчатые горы). Лучшим варантом оказалась версия 0.5-abs(fn).
src13 29.10.2005-30.10.2005
  • Самое большое колличество изменений. Вместо разбиения на новые версии, сделал все в одной.
  • Сделал режим высококачественного рендеринга с выводом промежуточного результата на экран.
  • Не очень удачный алгоритм обновления экрана. Добавлены опции управления генерацией ландшафта.
  • !Внимание! Теперь фрактальная сумма может выходить за пределы (-1,1).
  • Опять столкнулся с различием в направлении осей координат в двух- и трехмерном представлении.
  • В конце работы сделал правильное вычисление нормали (было вычисление нормали для полигона).
src14 06.11.2005
  • добавил интерполяцию по 3x^2-2x^3, она работает быстрее косинус-интерполяции! Интересно, качественное вычисление нормали дает результат почти похожий на плоское!
  • Сделал быстрый вариант просчета нормали. Считать нормаль с учетом LOD или нет (размер кратен размеру size или 1)? Есть некоторые различия в результате.
  • Попробовал рисовать центральный фрагмент не "квадами", а "фаном" по 2*2 (все равно по логике программы мельче не надо), результат при LOD 1 без освещения: обычный спсоб - 48-50 (range), "фан" - 54-56. Производить проверку "фана" на отсечение по камере нет смысла - затраты на проверку "съедают" сэкономленное. А вот если вместо "CheckSquare" (проверка квадрата) использовать "CheckFrustum" (проверка точки), то получаем выигрыш до 78-80 (смотри для "фана").
  • Слегка оптимизнул "CheckFrustum" переместив промежуточные формулы в модуль обработки клавиатуры, результат 90.
  • Сделал новую процедуру обновления для HiQualityRender.
src15 07.11.2005
  • убрал сброс буфера цвета - все равно он полностью перерисовывается.
  • оставил только один наиболее быстрый способ вычисления нормали
  • увы, но из-за глюка от нового режима обновления экрана в HQR придется отказаться. Пока будем использовать тормозной одновременный вывод в оба буфера.
09.11.2005
  • Пофиксил глюк в HQR режиме. Сделал выбор каким методом обновлять экран в HQR - glCopyPixels или SwapBuffers. Последний работает быстрее в оконном режиме, но вероятно, что он вообще не будет работать в полноэкранном.
  • Можно посмотреть карту местности размером 256*256 точек.
  • Метод отрисовки через "фан" иногда выдает ошибку. Пока вернулся к старому методу.
src16 12.11.2005
  • сделал масштабирование между ландшафтом и кэшем. Теперь минимальный размер одной клетки ландшафта может быть больше 1 - кэш сам делит координаты на значение масштаба.
  • сделал загрузку карты из демы 3dWorld с отображением некоторых текстур.
  • подправил некоторые параметры
  • сократил размер кэша до 512*512 (для работы с загружаемой картой этого хватит).
  • Опять наткнулся, что координатная сетка "не такая". Когда координта z возрастает вперед, координата x возрастает влево (y естественно вверх). В-общем все шиворот-навыворот.
src17 20.11.2005
  • вернулся к бестекстурному варианту
  • изменил метод масштабирования - кэш теперь не делит координаты на масштаб, что экономит ресурс. Теперь надо домножать пространственные координаты (это тоже тормозит, но не так сильно по сравнению со старым методом).
  • опять ошибка деления на ноль происходящая когда углы камеры равны нулю.
  • Сделал оптимизацию ландшафта: (квад) - (фан) - (удаление вершин у фана) - (большой квад) в зависимости от идентичности тайлов и величины ошибки разницы высот.
  • Опробовал вариант с изменяемой величиной ошибки. Пока не слишком хорошо, нужно изменять алгоритм.
  • Пока нет корректных стыков на границе разных уровней.
src18 21.11.2005
  • для всех элементов за пределами массива ставим максимальную оптимизацю.
  • квады с разными тайлами теперь рисуются только до определенного расстояния, а дальше - все фанами.
  • Сделал запись скриншота в файл. Три формата на выбор: RAW - перевернутый ибо координаты экрана (0,0) в OpenGL находятся в левом нижнем углу, BMP и JPEG. Плюс сопроводительный файл с описанием некоторых параметров рендеринга.
src19 15.12.2005
  • Переделал по новой рендер и структуру хранения данных - теперь все сделано через Quad-Tree.
  • Пока используется динамическое выделение памяти! Без освобождения (нет критерия по которому надо освобождать ненужные узлы)
  • Есть отсечение по радиусу видимости с передачей флага необходимости проверки.
  • Добавил оптимизацию в виде отрисовки фаном
  • добавил оптимизацию ландшафта по ошибке в разнице высот
  • новая оптимизация содержит проблему стыковки - если на уровне L средняя точка не прошла тест, то переход на меньший уровень детализации не происходит и стык с соседним фрагментом уровня L-1 не получается - из-за средней точки угловая точка уровня L не становится точкой на ребре уровня L-1 и не удаляется по тесту к это было с ней же но у соседа. Два выхода: а) "поправлять точку" б) усложнить алгоритм отброса реберных точек с учетом соседей
src20 18.12.2005
Сделал сортировку дочерних узлов дерева. Правда не уверен в правильной работе.
src21 03.01.2006
  • Сделал кэш вершин - вершины хранятся в квадратичном дереве, по координатам возвращается указатель на высоту ландшафта в данной точке.
  • Пока указатели на вершины не сохраняются в узлах квадродерева ландшафта, поэтому каждый раз происходит обращение на поиск вершины по кординатам, что привело к некоторому падению скорости (range 58 против 66).
src22 04.01.2006
  • перевел работу с вершинами на использование указателей - range возрос до 65.
  • изменение range теперь происходит с шагом 1.
  • сделал модификацию вершин. Однако, этот метод устраняет не все ошибки - модификация каждой вершины производится только один раз, и модифицированные вершины i и i+1 уровня не лежат на одной прямой (вершина i является угловой вершиной для i+1 и по этому значению считается среднее, а после модификации i вершины пересчет i+1 не производится)! Впрочем, такие ошибки уже менее заметны. Как альтернативу могу предложить отбрасывать без модификации только ту точку которую может отбросить и соответствующий сосед.
  • опробовал вышеуказанный способ (без модификации, точку отбрасываем, только если сосед делает с ней то же самое). range - 63-65.
  • если вершина точно совпадает со средним от ее угловых значений, то она отбрасывается всегда. Минус - все равно появляются разрывы - недостаточная точность.
  • оказывается в ситуации когда надо было рисовать квадом (4 верш.) рисовалось фаном (5+1). Исправил. range 67.
  • после этого заработало удаление лишних узлов и вершин.
  • HQR-режим сильно много берет памяти - за один кадр оптимизация не производится. Поэтому для HQR стоит ввести более упрощенный режим рендеринга.
src23 04.01.2006
  • Добавил отсечение по области видимости камеры (двухмерный вариант). range - 100-105!
  • небольшое изменение - range доходит до 115.
src24 15.01.2006
  • исправил ошибку - перед HQR не обнулялся счетчик полигонов
  • нормаль теперь хранится в структуре вершины, вычисляется так же используя дерево вершин.
  • около нулевых координат замечен провал, до применения дерева вершин ненаблюдавшийся.
Hosted by uCoz