Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2012, 18:41   #11
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Цитата:
3. Не понимаю, какой смысл брать из монохромного изображения красный канал, если все каналы идентичны друг другу и исходному изображению.
Это понятно, просто девушка написала, что нужно брать красную компоненту, я и брал красную функцией getRValue*x. Не помню точно какой x, приблизительно x<0.0001, просто чтобы подогнать под размеры OpenGL.
Цитата:
5. Правильно ли я понимаю, что фразу "Потом берётся текстура и по цвету каждого пикселя строится квадрат по заданным координатам." следует понимать как "текстура натягивается на..."? Если "да", то на что она натягивается?
Не, текстура не натягивается. Там двойной вложеный цикл i[0..picture.width] и j[0..picture.heigth] с glBegin(GL_QUADS) {color3f(цвет из массива цветов) 4 vertex3f (из массива координат вершин)} glEnd;
Сначала там были картиночки 412х770. Подумал, что лабораторная, максимум курсовая, и не стал сильно заморачиваться. Я даже и не думал, что девушке придётся обрабатывать даже 1500х2000 и уж тем более 17000х5000 (это ж 2 картинки по 2 с лишним Гб)!
Последний абзац высказан совершенно верно. Но что-то могло измениться по прошествии 3 недель.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 22.04.2012 в 18:44.
Rin вне форума Ответить с цитированием
Старый 22.04.2012, 20:18   #12
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Я чего-то не понимаю.
2 с лишним Гб при 17000х5000 - это 50 байт на пиксель. Откуда?

И еще, правильно ли я понял, что картинка и карта высот совпадают точка в точку?
s-andriano вне форума Ответить с цитированием
Старый 22.04.2012, 20:48   #13
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Что-то дико соврал! Множитель лишний добавил. Недосып влияет. 247 метров получается, если использовать 3 байта на пиксель без альфа-канала. Но все равно увесисто.
Да, картинка и карта высот совпадают точка в точку.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 22.04.2012, 23:48   #14
un_known
 
Регистрация: 16.03.2012
Сообщений: 8
По умолчанию

Изображение занимает около 60мб. Да, Вы все правильно поняли

Последний раз редактировалось un_known; 22.04.2012 в 23:59.
un_known вне форума Ответить с цитированием
Старый 23.04.2012, 18:54   #15
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ну, во-первых, т.к. характерные размеры, как я понял, уже неоднократно менялись в сторону увеличения, хотелось бы знать желательные верхние оценки для размеров.

Дальше, как я бы решал эту задачу, ориентируясь на уже указанные размеры 17000х5000.

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

Причины для этого две:

1. Вертех (Vertex - точка в виртуальном 3-мерном пространстве) требует для описания не менее 12 байт (без учета текстурных координат) против 3 байт для пискеля. Поэтому желательно, чтобы вертексов было минимум в несколько раз меньше, чем пикселей (из соображений баланса расходуемой памяти).

2. На тех видеокартах, где вершинные и фрагментные шейдерные процессоры аппаратно различны, вершинных обычно намного меньше, чем фрагментных. А на набортных видеоконтроллерах вершинный шейдерный блок зачастую отсутствует полностью и вместо него используется блок SSE центрального процессора. Отсюда следует, что вычислительная нагрузка при обработке координат должна быть существенно меньше, чем при вычислении цвета пикселей.

Я бы для начала проредил карту высот раз в 8 по каждой координате, а оставшиеся представил массивом вертексов с полным набором как пространственных координат (3 штуки) так и текстурных (2 штуки), а также нормалей (3 штуки). Итого по 32 байта на вертекс.
Самих же вертексов будет 2125х625=1328125.
1.3 млн вертексов - это не 85 млн.
Занимаемая память около 42 Мбайт.

Применение каких-либо деревьев при таких размерах необязательно и я бы обошелся без них.
Текстуру я бы разрезал на фрагменты 1024х1024, которых будет 85. Такой размер текстуры гарантированно поддерживает любая видеокарта, а перебор по 85 объектам не займет много времени.
Вертексы я бы сгруппировал в квадратные блоки, совпадающие по размерам с текстурой. Размеры каждого (кроме неполных крайних) будут по 129х129. Крайние вертексы блоков совпадают по координатам и нормалям, но отличаются по текстурным координатам - чтобы не было видно стыков.

Ну а дальше натягивать на каждый меш (квадрат вертексов 129х129) свой фрагмент текстуры.
Вблизи поверхности следовало бы заранее исключать невидимые меши, при этом программа должна рисовать достаточно шустро. А на отдалении - когда видна вся поверхность целиком, - надо смотреть. Если будет тормозить, вводит LOD'ы. Вполне вероятно, достаточно будет 1-2 дополнительных.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание бд в с++ Alena_897 C/C++ Базы данных 7 19.11.2011 21:18
Создание внутреннего и внешнего серверов. Создание серверов автоматизации. Ann_Sh Помощь студентам 3 09.10.2011 15:53
Создание ОС misher Операционные системы общие вопросы 2 17.07.2010 00:32
Создание виртуального ландшафта и интерактивного полета над ним. Иван Мещеряков Помощь студентам 2 20.12.2009 12:08