Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Ходить по сцене (http://www.flasher.ru/forum/showthread.php?t=146446)

demy 08.11.2010 17:38

Ходить по сцене
 
Доброго времени суток.
Начала работу над псевдо-3д во флеше. Выбор относительно API остановила на Альтернативе. По изучала ее, сделала первые уроки, пару других вещей.
С AS 3.0 знакома хорошо.
В общем, идея такова:
создаем в ArchiCAD-е здание, импортируем его в 3ds max, там еще дорабатываем и далее грузим модель с флеша.
В результате, человек будет ходить по комнатам, возможно, открывать двери.
Отсюда вопрос - как нормально организовать ограничение перемещения - нельзя идти сквозь стены и т.д.? И вообще, есть ли советы по организации этой самой ходьбы? (или нет ничего лучше, чем поставить зрителя внутрь - по-моему lookAtXYZ - и просто сделать симпл контроллер)
Ах, да, Альтернатива 7я - свежевышедшая.

Sintesis 09.11.2010 00:26

А почему это псевдо 3D? Альтернатива это не псевдо 3D.
Зачем столько заморочек ArchiCAD, потом 3D Max? Можно сразу всё в 3D Max'e сделать и экспортировать в формат который понимает альтернатива.
Сейчас в альтернативе нет коллизий(столкновение), по этому нет физики, так что ходить не получится по домику. Хотя выкрутиться можно, есть способ который не даст проходить сквозь стены. Нужно сделать 2D разметку(карту) комнат и поместить туда 2Dобьект который будет детектить 2D коллизи и не сможет выйти за стены на 2D карте, потом координаты 3Dобьекта который должен ходить по дому привязываеш к 2Dобьекту который ходит по карте и всё управляем 2Dобьектом... 3Dоьект будет двигаться так-же как и 2Dобьект. Думаю, всё понятно?

Котяра 09.11.2010 00:46

Пока альтернатива - "псевдо 3d", в смысле софтовый рендер.
Коллизии (ограничение перемещения ) не сложно и самому написать.
Посмотрите, например, как сделана в демке стратегия карта проходимостей.
Пускайте невидимый объект, за ним следящую камеру (хотя можно и просто камеру перемещать). объект уже проверяйте на столкновения. Могут конечно возникнуть разные косяки при сложных конфигурациях..
Например, камера за стенкой от ведомого объекта может оказаться при повороте угла зрения.

demy 09.11.2010 10:37

Sintesis
Цитата:

Зачем столько заморочек ArchiCAD, потом 3D Max? Можно сразу всё в 3D Max'e сделать...
Это просто для удобства - помещение мне проще в АрхиКАДе набросать.

Котяра
Спасибо за идею - надо попробовать.

Division 09.11.2010 12:32

Если в здании будет всего 1 этаж, можно свести все к проверке пересечения отрезка и окружности.
Стены-отрезки можно из 3dmax экспортить.

demy 09.11.2010 12:45

Так, а из макса портируем в колладу, а ее что, как простой xml грузить, потом - в парсер?

Позже
Код AS3:

private function xmlLoaded(event:Event) {
        if ((event.target as URLLoader) != null ) {
                var resp:XML=new XML(event.target.data);
                var parser:ParserCollada = new ParserCollada();
                parser.parse(resp);
                for each (var obj:Object3D in parser.objects) {
                        container.addChild(obj);
                }
        }
}

Вроде работает... буду разбираться, простите за флуд

P.S: Двери из АрхиКАДа нещадно глючат, накладываясь на стены и косяки (в прямом смысле слова "косяки") - их стоит переделать в Максе.
Кстати, всем огромное спасибо - все быстро и прекрасно работает :yahoo:

PikseL 13.11.2010 13:53

Цитата:

Сообщение от Котяра (Сообщение 948449)
Пока альтернатива - "псевдо 3d", в смысле софтовый рендер.

Отлично! Из этого следует, что и Quake I тоже "псевдо 3д" - там тоже софтверный рендер.

demy, почитайте про матрицы и векторы и их применение в 3-мерных вычислениях и вы легко сможете сами вычислять коллизии и много еще чего :victory:.

demy 25.11.2010 14:25

Почитала матрицы и вектора - как они могут помочь конкретно в вычислении коллизий?

forhaxed 25.11.2010 18:39

Можно как вариант использовать физический движок, например Box2D. Человек - окружность, стены - абсолютные твердые тела. Более того, с физикой дверей заморочек не будет вообще.

DEAFFF 25.11.2010 19:37

Цитата:

А почему это псевдо 3D? Альтернатива это не псевдо 3D.
Зачем столько заморочек ArchiCAD, потом 3D Max? Можно сразу всё в 3D Max'e сделать и экспортировать в формат который понимает альтернатива.
Сейчас в альтернативе нет коллизий(столкновение), по этому нет физики, так что ходить не получится по домику. Хотя выкрутиться можно, есть способ который не даст проходить сквозь стены. Нужно сделать 2D разметку(карту) комнат и поместить туда 2Dобьект который будет детектить 2D коллизи и не сможет выйти за стены на 2D карте, потом координаты 3Dобьекта который должен ходить по дому привязываеш к 2Dобьекту который ходит по карте и всё управляем 2Dобьектом... 3Dоьект будет двигаться так-же как и 2Dобьект. Думаю, всё понятно?
Поддерживаю - 100% Сам делал примерно так в игрухе - не пожалел. Каждому 3д объекту создаю 2д. 2д объект прячет в себе 3д объект, координаты связаны, причем можно сопоставить как угодно, например у меня было так - 3дХ == 2дХ и 3дZ == 2дY.

Но я делал параллельно 3д миру, некий 2д мир в котором определялись все коллизии. Всяко шустрее чем бокс2д этот.

В вашем случае можно сделать типа битмап карту - вид сверху - стены черным цветом, там где ходить можно белым. Ну и проверять будущее положение(т.е. то куда вы хотите пойти) getPixel(x + dx, y + dy) проверять цвет. Если черный цвет то ходить нельзя, а если белый то можно.

PikseL 26.11.2010 11:40

Тут конечно не всё настолько просто. Для некоторых объектов придется еще просчитывать "разумность" действия (это когда рука поворачиваясь проходит сквозь стену, например). Но и это вполне себе решаемо.

demy 26.11.2010 12:44

Цитата:

Но я делал параллельно 3д миру, некий 2д мир в котором определялись все коллизии.
Гениально! Только сейчас поняла, как это. И ведь работает на отлично..

Э.. Теперь есть очень глупы вопрос - при определении столкновения, как остановить камеру/персонажа и заставить двигаться вдоль стены, а не просто печально стоять, уткнувшись в эту самую стену?

forhaxed 26.11.2010 15:00

demy, я же сказал, используйте физ-движок Box2D, все проблемы исчезнут разом. Производительность в маленьком "левеле" не испортит.

DEAFFF 26.11.2010 17:23

Цитата:

Э.. Теперь есть очень глупы вопрос - при определении столкновения, как остановить камеру/персонажа и заставить двигаться вдоль стены, а не просто печально стоять, уткнувшись в эту самую стену?
в моем случае скольжение само собой получилось.
у меня весь процесс идет так: в "каждом кадре":

1. игровой движок перерасчитывает(сдвигает/удаляет/добавляет) 3д объекты, задает им свойства и тд.

2 физический движок проверяет каждый с каждым объектом() на столкновение, если хотя бы часть одного объекта находится в другом объекте то они раздвигаются в разные стороны на вектор проникновения / 2(т.е. на равные расстояния)
и получается если объект идет например под 45 градусов к стене то он в нее проникает и отталкивается и тем самым скользит по стене

3 трехмерный двиг рисует сцену


еще плюс "двух миров" в том что можно на лету убирать / добавлять объекты и не нужно все 3д объекты проверять на столкновения(некоторые 3д объекты чисто для дизайна)


Часовой пояс GMT +4, время: 01:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.