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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2010, 13:20   #81
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Раньше в моей игре ландшафт создавался из множества отрезков SegmentShape, но в этом случае не получится нормально затекстурировать, поэтому я решил создать PolyShape. Для этого в массив verts поочерёдно записываются координаты вершин из типиз. файла. Но получается какая-то белиберда. Текстура накладывается как надо, а как физический объект PolyShape некорректен. С SegmentShape тела хорошо реагируют. Точки против часовой стрелки. Тело, которому принадлежит форма находится в верхнем левом углу
Вложения
Тип файла: rar скриншоты.rar (38.8 Кб, 12 просмотров)
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 04.03.2010, 17:01   #82
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Дело в том что полигоны и линии не то же самое в плане обработки физики. То есть полигон chipmink не состоит из множества SegmentShape'ов, это отдельный тип и математические ф-ции для него собственные. Использование полигонов уменьшает нагрузку, использование памяти, но математические функции несовершенны и позволяют обрабатывать только ВЫПУКЛЫЕ полигоны с вершинами против часовой. Ты можешь использовать SegmentShape (это ведь не мешает текстурированию, просто текстурируй полигон вводя вершины вручную через PolyDrawCashe). Если пойти по сложному пути (как у меня в GravityRace), то там сложные просчеты триангуляции (триангуляция - разбиение сложного невыпуклого многоугольника на треугольники. Полигоны разбиваются на треугольники так как любой треугольник является выпуклым)), разворота вершин и прочего. Для этого надо подсоединять дополнительные модули (прямой поддержки триангуляции чипманком нет, для себя я написал модуль конвертации типов под Box2D и обратно). Вот пример работы триангулятора:
Полигон:

После триангуляции:
Вадим Буренков вне форума Ответить с цитированием
Старый 04.03.2010, 17:29   #83
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Создал опять через сегменты и параметры в polydrawcashe ввел вручную. Текстура не очень ровно вписалась.
А чтобы текстуру накладывать снаружи триангуляция поможет?
Изображения
Тип файла: jpg 3.jpg (49.9 Кб, 82 просмотров)
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 04.03.2010 в 17:34.
Андрей 93 вне форума Ответить с цитированием
Старый 04.03.2010, 18:28   #84
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Текстура не очень ровно вписалась.
Значит это ты где-то накосячил, неправильные координаты подставил. Если ты про белую окантовку то рисуй ее после текстурирования.
Цитата:
А чтобы текстуру накладывать снаружи триангуляция поможет?
Не понял что значит накладывать снаружи?
Вадим Буренков вне форума Ответить с цитированием
Старый 05.03.2010, 10:06   #85
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Снаружи-это где сейчас черное. А внутри - это где зелёная текстура. По-другому назвать не могу
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 05.03.2010, 10:35   #86
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Так текстурируется область внутри полигона. Следовательно надо сделать такой понигон, чтобы он обходил область карты по кругу.
Вадим Буренков вне форума Ответить с цитированием
Старый 05.03.2010, 20:41   #87
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Я так понимаю, модуль G2D_POLYGONES, закрашивая область, соединяет первую точку со всеми другими. Это видно из рисунка выше. Поэтому и возникает нежелательный результат.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 06.03.2010, 18:26   #88
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Какой нежелательный результат?А как ты хотел? Ведь по другому и не может быть. Если тебе надо сделать чтобы вокруг шарика было все оттекстурировано сделай несколько полигонов: один будет внизу, второй слева, третий справа, четвертый сверху. Либо делай один сложный полигон который обходит определенную область. В любом движке текстурируется все что внутри точек, а не то что снаружи. Это логично...
Вадим Буренков вне форума Ответить с цитированием
Старый 06.03.2010, 20:45   #89
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Я не это имел ввиду. Первая вершина на моём рисунке находится там, куда указывает стрелка. Из неё выходят красные линии, соединяющие её с другими вершинами.Жирными жёлтыми линиями я обозначил грани, которые лежат под текстурой, хотя не должны.
Изображения
Тип файла: jpg Безымянный.jpg (41.7 Кб, 69 просмотров)
Не стыдно не уметь, стыдно не учиться.

Последний раз редактировалось Андрей 93; 06.03.2010 в 20:47.
Андрей 93 вне форума Ответить с цитированием
Старый 06.03.2010, 21:14   #90
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Не знаю, может у меня не было таких глюков поскольку в старой версии GravityRace я не использовал настолько сложные полигоны.
Наверно OpenGL не может рисовать сложные полигоны без триангуляции, так что думай над ней. У меня сейчас нет времени писать для тебя демку, поэтому держи модуль под Box2D.
Правда там используются другие типы для хранения полигонов и треугольников. Напиши процедуры перевода типов и все должно получиться.

Основные функции, котроые могут понадобится это:
Код:
function Poly_IsCCW(const Poly: b2Polygon): boolean;
проверяет расположены ли вершины полигона по часовой
Код:
procedure Poly_Reverse(var Poly: b2Polygon);
распологает вершины в другую сторону
Код:
function Triangulate(xv, yv: array of single; vNum: integer; var results: b2Triangles): integer;
производит триангуляцию
vx-массив вершин X,
vy-массив вершин Y,
vNum - кол-во вершин,
results-координаты всех получившихся треугольников
сама функция возвращает кол-во получившихся треугольников.

Это все непросто, но при желании разберешься. Я ведь во всем сам разобрался, причем мне никто не помогал . Если что обращайся.
Вложения
Тип файла: rar uPolygon.rar (3.8 Кб, 24 просмотров)

Последний раз редактировалось Вадим Буренков; 07.03.2010 в 09:38.
Вадим Буренков вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Физика в 2D играх Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 32 02.11.2010 22:00
Искуственый интелект в играх VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 26 01.08.2009 23:09
Сюжет в 2D играх ZotaC Свободное общение 8 05.07.2009 15:42
Физика программы. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 09.05.2008 18:14
Анимация в играх frai Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.11.2007 14:28