|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.03.2010, 13:20 | #81 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Раньше в моей игре ландшафт создавался из множества отрезков SegmentShape, но в этом случае не получится нормально затекстурировать, поэтому я решил создать PolyShape. Для этого в массив verts поочерёдно записываются координаты вершин из типиз. файла. Но получается какая-то белиберда. Текстура накладывается как надо, а как физический объект PolyShape некорректен. С SegmentShape тела хорошо реагируют. Точки против часовой стрелки. Тело, которому принадлежит форма находится в верхнем левом углу
Не стыдно не уметь, стыдно не учиться.
|
04.03.2010, 17:01 | #82 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Дело в том что полигоны и линии не то же самое в плане обработки физики. То есть полигон chipmink не состоит из множества SegmentShape'ов, это отдельный тип и математические ф-ции для него собственные. Использование полигонов уменьшает нагрузку, использование памяти, но математические функции несовершенны и позволяют обрабатывать только ВЫПУКЛЫЕ полигоны с вершинами против часовой. Ты можешь использовать SegmentShape (это ведь не мешает текстурированию, просто текстурируй полигон вводя вершины вручную через PolyDrawCashe). Если пойти по сложному пути (как у меня в GravityRace), то там сложные просчеты триангуляции (триангуляция - разбиение сложного невыпуклого многоугольника на треугольники. Полигоны разбиваются на треугольники так как любой треугольник является выпуклым)), разворота вершин и прочего. Для этого надо подсоединять дополнительные модули (прямой поддержки триангуляции чипманком нет, для себя я написал модуль конвертации типов под Box2D и обратно). Вот пример работы триангулятора:
Полигон: После триангуляции: |
04.03.2010, 17:29 | #83 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Создал опять через сегменты и параметры в polydrawcashe ввел вручную. Текстура не очень ровно вписалась.
А чтобы текстуру накладывать снаружи триангуляция поможет?
Не стыдно не уметь, стыдно не учиться.
Последний раз редактировалось Андрей 93; 04.03.2010 в 17:34. |
04.03.2010, 18:28 | #84 | ||
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
Цитата:
|
||
05.03.2010, 10:06 | #85 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Снаружи-это где сейчас черное. А внутри - это где зелёная текстура. По-другому назвать не могу
Не стыдно не уметь, стыдно не учиться.
|
05.03.2010, 10:35 | #86 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Так текстурируется область внутри полигона. Следовательно надо сделать такой понигон, чтобы он обходил область карты по кругу.
|
05.03.2010, 20:41 | #87 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Я так понимаю, модуль G2D_POLYGONES, закрашивая область, соединяет первую точку со всеми другими. Это видно из рисунка выше. Поэтому и возникает нежелательный результат.
Не стыдно не уметь, стыдно не учиться.
|
06.03.2010, 18:26 | #88 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Какой нежелательный результат?А как ты хотел? Ведь по другому и не может быть. Если тебе надо сделать чтобы вокруг шарика было все оттекстурировано сделай несколько полигонов: один будет внизу, второй слева, третий справа, четвертый сверху. Либо делай один сложный полигон который обходит определенную область. В любом движке текстурируется все что внутри точек, а не то что снаружи. Это логично...
|
06.03.2010, 20:45 | #89 |
Люблю жизнь
Форумчанин
Регистрация: 01.12.2009
Сообщений: 193
|
Я не это имел ввиду. Первая вершина на моём рисунке находится там, куда указывает стрелка. Из неё выходят красные линии, соединяющие её с другими вершинами.Жирными жёлтыми линиями я обозначил грани, которые лежат под текстурой, хотя не должны.
Не стыдно не уметь, стыдно не учиться.
Последний раз редактировалось Андрей 93; 06.03.2010 в 20:47. |
06.03.2010, 21:14 | #90 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Не знаю, может у меня не было таких глюков поскольку в старой версии GravityRace я не использовал настолько сложные полигоны.
Наверно OpenGL не может рисовать сложные полигоны без триангуляции, так что думай над ней. У меня сейчас нет времени писать для тебя демку, поэтому держи модуль под Box2D. Правда там используются другие типы для хранения полигонов и треугольников. Напиши процедуры перевода типов и все должно получиться. Основные функции, котроые могут понадобится это: Код:
Код:
Код:
vx-массив вершин X, vy-массив вершин Y, vNum - кол-во вершин, results-координаты всех получившихся треугольников сама функция возвращает кол-во получившихся треугольников. Это все непросто, но при желании разберешься. Я ведь во всем сам разобрался, причем мне никто не помогал . Если что обращайся. Последний раз редактировалось Вадим Буренков; 07.03.2010 в 09:38. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Физика в 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 |