Имя проекта |
Дата |
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 не обнулялся счетчик полигонов
- нормаль теперь хранится в структуре вершины, вычисляется так же используя дерево вершин.
- около нулевых координат замечен провал, до применения дерева вершин ненаблюдавшийся.
|