Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание системы координат и наложение текстур в OpenGL

9.9K
03 декабря 2007 года
maxFM
77 / / 18.04.2007
Всем здрасьте!!!!
Зачем мне это особо никому не интерсно , так что я начну с главного.
Мне необходимр создать что то типа Google Earth. Вот сфера, на нее накладывается текстура и с приближением текстура меняется на более точную. Сами текстуры я из гугла накачал вот только проблема в том как их наложить на сферу. Мне необходимо чтоб когда я мызкаю по сфере мышкой то мне высвечивалось координаты курсора как широта и долгота. Сначала думал что это можно сделать преобразовав меровые координаты, которые получаешь через ReadPixel . но как только меняешь место обзора так сразу все сыпется. Это первая проблема.
А вторая заключается в том что если при увеличении зума мне необходимо подгружать другие карты более мелкого масщтаба. а как мне привязывать рисунок на котором изображен квадрат поверхности коодинаты которой известны(например квадрат в размере 1 градус Х 1 градус земных координат а именем рисунка будет координаты правого верхнего угла рисунка) к моей сфере??? Это надо использовать текстурные координаты??? помогите пожалуйста!!! столько литературы напокупал и накачал и так особого ничего не нашел. Очень нужна помощь, диплом горит!!:( :( !!
Заранее всем благодарен за оказаную поддержку.
1.9K
03 декабря 2007 года
0xf001
96 / / 24.05.2005
кури MegaTexture
9.9K
05 декабря 2007 года
maxFM
77 / / 18.04.2007
а как поступать с координатами?
1.9K
05 декабря 2007 года
0xf001
96 / / 24.05.2005
текстурными координатами или координатами на карте(широта-долгота)?

ТК тебе нужны в единственном экземпляре, текстура ведь у тебя будет одна общая..
а для широты-долготы разумнее было бы искать точку пересечения сферы и луча "глаз - центр_сферы" и получившийся вектор уже сравнивать с системой координат сферы. Там ты сможеш получить угол между осью "Земли" и точкой на поверхности, откуда можно найти широту. А там и до долготы недалеко.

Кстати, если тебе позарез нужно обклеивать шарик отдельными картинками, то для поиска уровней детализации можно было бы применить что нибуть на подобии восьмеричного дерева (octree).... хотя это моё ИМХО.
9.9K
05 декабря 2007 года
maxFM
77 / / 18.04.2007
ЭЭЭ тут пожалуйста поподробнеее. Просто я в сфере программирования графики новичок и для это все и диковинку. можешь пояснее объяснить о чем идет речь
15K
06 декабря 2007 года
vja
85 / / 09.01.2007
лучше всего тебе поможет учебник по АГиЛА
9.9K
06 декабря 2007 года
maxFM
77 / / 18.04.2007
ЭЭЭ а можно по русски расшифровать?!!!:o
15K
07 декабря 2007 года
vja
85 / / 09.01.2007
аналитическая геометрия и линейная алгебра
9.9K
07 декабря 2007 года
maxFM
77 / / 18.04.2007
Ну в плане математики у меня тут хватает учебников и по навигации и по теории полетов КА. разобраться в этой вот мега текстуре, как она строиться!!
9.9K
10 декабря 2007 года
maxFM
77 / / 18.04.2007
Народ, помогите создать эту мега текстуру.
Хоть дайте какую нибудь ссылку по этой теме. Где не посмотрю кругом одна вода а по делу ничего нету. Может кто то знает где пример исходников есть , хотя бы понять с какого места прыгать!!!:(
1.9K
10 декабря 2007 года
0xf001
96 / / 24.05.2005
Я, конечно, не гугл... В общем есть такое:
http://www.gamedev.ru/code/articles/Megatexture
9.9K
10 декабря 2007 года
maxFM
77 / / 18.04.2007
За ссылку конечно спасибо , но я ее уже читал. там просто там общие понятия, с мне нужны конкретные функциии, в каком месте начсинать это все делать и тд!!!
534
11 декабря 2007 года
HarryAxe
448 / / 19.01.2006
Опиши, что у тебя уже есть. Какова геометрия текстур (сферические, кубические, цилиндрические, с произвольной разверткой), какой графический интерфейс (API) используешь, сколько есть кода и чё он делает. Выбор метода проецирования координат зависит от текстур. Вообще, в D3D, например, генерация мипмэпов (текстурных карт с разным разрешением) может производиться автоматически через IDirect3DTexture->GenerateMipSubLevels(). Но для высокодетализированной тектуры данный метод не подходит из-за высокого расхода памяти. Взамен можно использовать технику управлиния генерацией уровней детализации вручную. Я бы поделил исходную сетку на группы, сответствующие определённым уровням детализации (по некторому признаку, либо явно в редакторе типа 3DS Max), и нагенерил бы для них мипмэпов. Это необходимо сделать отдельно и заранее: загружаем необходимую тектуру целиком в управляемый (managed) пул (это позволит загружать большие текстуры, не заостряя лишний раз внимание на размере видеопамяти) и создаем прямоугольник на весь экран. Копируем в его вершины тексурные координаты текущей части сферы. Рендерим прямоугольник в текстуру и сохраняем её, получив тем самым уровень детализации для данного фрагмента сферы. Можно написать скрипт для 3D редактора, делающий то же самое - качество получится выше (современные 3D редакторы используют весьма продвинутые методики фильтрования текстур, например, 3DS Max масштабирует текстурную карту куда более качественно, нежели Photoshop), однако потребуется время на изучение методик программирования под соответствующий редактор...
В основной же программе рендерим объект по группам, установив для каждой из них соответствующий набор текстур с уровнями детализации. А дальше - дело техники...
9.9K
12 декабря 2007 года
maxFM
77 / / 18.04.2007
Спасибо за поддержку!!!!
Пишу я пока на C++ Bilder. Куски текстуры получаю из гугла. Есть одна прога, MapBilder, ты суешь в нее координаты необходимого прямоугольника а он тебе его качает с сервера гугла.
Замудреным в программе пока ничем не пользуюсь, тк основываюсь только на учебной литературе а не опыте. Проекция ортографическая!!!
с определением координат на земле при движении мыши разобрался. осталось с текстурой. Я вот читал у себя в книге что есть такая вещь как множественная текстура. Скажи это и есть та самая мегатекстура. Тут тоже уровни и разные текстуры на каждую детализацию. Или я что то путаю????
534
12 декабря 2007 года
HarryAxe
448 / / 19.01.2006
Понятие MegaTexture я в своей практике вообще не встречал (аж странно...), а вот текстуры, предусматривающие разный набор уровней детализации, называются mipmaps.
А как это MapBuider делает ортографическую проекцию? Ты область задаёшь на сфере? Или на экране? Получение ортографической проекции нормальным образом возможно лишь в последенм случае, но тогда, для получения готовой тексурной карты, необходимо знать ещё и радиус (кривизну) сферы, плюс положение камеры относительно сферы да плюс ещё и поле её зрения (field of view, FOV, имеряется в градусах)... MapBuilder предусматривает возможность всё это получить?
9.9K
12 декабря 2007 года
maxFM
77 / / 18.04.2007
Нет , не так!
MapBilder ничего этого не делает. ты ему просто задаешь кооодинаты куска Земли и он тебе его качает с гугла и сохраняет как джепег или бмп. Это надо для дальнейшего создания текстуры. Думаю тоже самое можно сделать если брать куски карты из MapInfo. Сама тестура накладывается на сферу. при вращении вращается не сама сфера а меняются координаты глаза. Приближение к сфере также осуществляется засчет "подлета " к ней. C mipmaps я уже познакомился но еще не использовал на практике. Вот думаю у меня от такой текстуры машина не задымится? там ведь еще кроме тестуры еще и спутники летают и их коодинаты в реальном маштабе времени вычилсяются. да еще и объкты на саму сферу наносятся. Не будет ли машина тормозить при перерисовке????????:confused: :confused: :confused:
534
13 декабря 2007 года
HarryAxe
448 / / 19.01.2006
С клавы, что ли, вводишь? Значит, он текстуру разворачивает с усечённой сферы до прямоугольника. В принципе, этого должно быть достаточно (фишка в том, что в этом случае текстуры можно будет просто резать на прямоугольники и не тратить лишний раз время на их развёртку)... Тем не менее, ты себе один хрен мозги попаришь, чтобы скаченные тектуры стыковались без швов.
Использование мипмэпов предусматривает улучшение качество рендера в ущерб расходу памяти. Поскольку в нашем случае это недопустимо, постольку я и предложил некий компромисс в виде управления уровнем
детализации текстур вручную.
Предположим, что твоя прога предусматривает пять уровней детализации. Предположим далее, что элементарный сегмент текстуры наивысшей степени детализации расчитан на наложение на один квадратный полигон, тектура следующего уровня - на четыре соседних полигона, третьего - на четыре четвёрки и т. д. Тогда получим, что текстура последнего - пятого - уровня будет уладываться на 256 полигонов (кажется, это сфера, имеющая по 16 сегментов в каждом направлении). Оранизуем полигоны в дерево, экземпляр нижнего узла которого будет содержать полигон (тупо индекс или два индека треугольников, если твой графический интерфейс не поддерживает полигональные объекты) и указатель на тектуру наивысшего уровня детализации, ему соответствующую. Узел следующего уровня - четыре группы предыдущего уровня + текстура для всей группы с пониженным уровнем детализации (скажем, в полтора - два раза уменьшеную) и т. д. Полигоны в районе каждого из двух полюсов выделим в отдельные группы, поскольку полюс есть одна точка и оптимизацию их прорисовки придётся выполнять вручную (можно сделать сферу другого типа, основанную на равносторонних треугольниках, но её текстурировать ещё сложнее). Далее, определим для каждого из узлов всех уровней вектор направления, являющийся средним арифметическим координат всех подчинённых треугольников минус вектор точки опоры (в нашем случае её проще принять за центр сферы и совместить её с началом координат). Наличие такого вектора существенно ускорит подбор соответствующего уровня детализации текстуры.
Такого рода дерево достаточно посчитать один раз и и можно сохранить полученную структуру, например, в файл.
Далее, задаём некоторую функцию соответствия расстояния от камеры до точки опоры сферы уровням детализации (замути для начала линейную), и по координатам направления, посчитанным на предварительном этапе, определяем ближайший узел второго уровня (на этот раз начиная сверху) к камере. Определяем по функции соответствия суммарный уровень детализации (LOD) для всей гуппы и движемся дальше вглубь, выясняя, можно ли подобрать более высокий уровень. Если это получилось, движемся дальше, если нет, то рисуем группу целиком, используя соответствующую текстуру. Движение по дереву выполняем рекурентно.
Теперь к полюсам. Поскольку для них мы используем тектуры наивысшего разрешения, постольку явно невидимые треугольники придётся отсечь вручную. Но, поскольку полюс сходится в одной точке, постольку выполнить это будет несложно (просто не отрисовываем треугольники, две "свободные" вершины которых находятся за плоскостью, проходящей через центр сферы и перпендикулярной направлению камеры).
После отрисовки необходимо будет выполнить постпроцессинг, наложив эффект наподобие radial blur (можешь даже погуглить в поисках шейдера), либо, если машина позволяет, задействовать аппаратный антиалиасинг.
Такая вот замута...
9.9K
14 декабря 2007 года
maxFM
77 / / 18.04.2007
ОК !!!! Загрузил ты меня основательно. давай я тебе перескажу как я понял на простой деревенский язык. так вот я еще не разбирался основательно во всех свойствах mipmap но предполагаю так.
я нарежу куски все карту с самой точной детализацией. Затем нарежу с детализацией в 4 раз слабее и в 4 раз больше по размеру и тд на 5 уровней.
Затем закидаю это все в mipmap в котором есть такая функция как привязка к координатам. также там есть ссылка на следующий уровень детализации, то есть если каждый грубый кусок карты состоит из 4-х точный то нам необходимо указать 4 указателя на 4 рисунка!!!!!
так или не так я все понял??????:o :o :o
534
14 декабря 2007 года
HarryAxe
448 / / 19.01.2006
Да. Но поддерживаемые аппаратно мипмэпы мы уже не используем, поскольку расход памяти будет чересчур велик.
Ха, геймдев предлагает то же самое, что и я, но рендер LODов там осуществляет пиксельный шейдер. В принципе, это отличный вариант, поскольку не потребуется постпроцессинг картинки.
9.9K
14 декабря 2007 года
maxFM
77 / / 18.04.2007
Мда, мне кажеться мы общаемся на разных языках!!!!

а у тя случайно никаких ссылок нет, где исходники хотя бы примитивов есть ?????
9.9K
02 января 2008 года
maxFM
77 / / 18.04.2007
Давай сообразим и разложим все по порядку. Ты мне предлагашь создать сферу не стандартной функцией а с помощью маленьких прямоугольников. Чем меньше тем больше "Земля" похожа на сферу. Тогда из вершин прямоугольников у нас появятся текстурные координаты. Теперь в зависимости от расстояния между глазом и поверхностью мы накладываем либо на каждый прямоугольник свою высокодетализированную текстуру, либо текстуру меньшей детализации, но большей в размере и на несколько прямоугольников сразу! я так все понял?????
9.9K
03 января 2008 года
maxFM
77 / / 18.04.2007
а вот такой вопрос если я создаю эту сферу вот так
GLUquadricObj *quadObj;
quadObj=gluNewQuadric();
gluQuadricDrawStyle(quadObj, GLU_LINE);

glColor3f(1,1,1);
gluSphere(quadObj, 10,xn,yn);

то есть переменными xn yn я меняю количество линий и следовательно и прямоугольников. А при этом можно найти текстурные координаты пересечений этих линий?
если да то можно просто изменяя количество линий в зависимости от приближения глаза, тем самым уменьшая количество прямоугольников. соответственно и накладывать на них тектуры!!!
как на это смотришь????
534
10 января 2008 года
HarryAxe
448 / / 19.01.2006
Цитата: maxFM
а вот такой вопрос если я создаю эту сферу вот так
GLUquadricObj *quadObj;
quadObj=gluNewQuadric();
gluQuadricDrawStyle(quadObj, GLU_LINE);

glColor3f(1,1,1);
gluSphere(quadObj, 10,xn,yn);

то есть переменными xn yn я меняю количество линий и следовательно и прямоугольников. А при этом можно найти текстурные координаты пересечений этих линий?
если да то можно просто изменяя количество линий в зависимости от приближения глаза, тем самым уменьшая количество прямоугольников. соответственно и накладывать на них тектуры!!!
как на это смотришь????


Текстурные-то координаты можно вычислить относительно легко, но в твоём случае вся сфера отрисовывается за один проход, и мы лишаемся возможности управлять детализацией. К тому же, переход от одного уровня детализации к другому будет чрезвычайно резким. В нашем случае, создание сферы вручную явно предпочтительнее.

9.9K
10 января 2008 года
maxFM
77 / / 18.04.2007
ТО есть ты предлаегаешь создать сферу из множества прямоугольников?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог