Quest3D - Русскоязычное сообщество

Quest3D => Логика => Тема начата: shkas от 08 Ноября 2009, 01:03:00



Название: Плоскость сечения
Отправлено: shkas от 08 Ноября 2009, 01:03:00
Привет всем, задали мне задачку -постепенный рост строящегося здания, как на приатаченной анимашке. Я так понимаю , что нужно сделать поднимающуюся плоскость , которая бы обрезала часть здания. Как это можно реализовать? В 3D пакете это можно сделать посредством булевых операций, а в Квесте есть подобное? 


Название: Re: Плоскость сечения
Отправлено: Viik от 08 Ноября 2009, 01:31:10
Цитата с офф форума:
Цитировать
You have a clip plane example in the Quest3D folder at "./Examples/Small Examples/clip plane.cgr"


Название: Re: Плоскость сечения
Отправлено: shkas от 09 Ноября 2009, 13:22:55
О, спасибо! Под носом лежало не заметил.
Плохо только, что это Clip plane не показывает у обьекта сам срез. Это реально как-то победить?


Название: Re: Плоскость сечения
Отправлено: Viik от 09 Ноября 2009, 14:33:26
Кто-то делал такое по хитрому, помоему брали копию модельки, флипали полики, и отрисовывали только эмисивом, например красным или синим цветом. Таким образом копия какбы заполняет места срезов.
Ну или шейдером покрасить. В нем же и клипинг можно мсделать.


Название: Re: Плоскость сечения
Отправлено: shkas от 09 Ноября 2009, 15:08:43
Супер! Получилось! Просто как все гениальное!Спасибо огромное!!


Название: Re: Плоскость сечения
Отправлено: Campo от 24 Декабря 2009, 12:11:50
кто знает как ограничить область сечения плоскостью (Clipping Plane)? к примеру как-нибудь ограничить её кубом или цилиндром...??

у меня в рендере есть квадрат, и я хочу ограничить сечение его площадью, чтобы остальные части модели не обрезались...может кто подскажет, что делать?


Название: Re: Плоскость сечения
Отправлено: DimiS от 24 Декабря 2009, 15:17:15
как ограничить область сечения я не знаю, но в случае с теми зданиями я бы разделил их на отдельные модельки и для каждой из них применял сечение отдельно.


Название: Re: Плоскость сечения
Отправлено: Campo от 24 Декабря 2009, 21:33:04
даже если модельки в разный рендер закинуть, а команду секущей между рендерами поставить, то она и на второй действует, а очистка от Clipping plane`ов убирает сечение и на первом рендере...

у модели вроде только к вертекс дате можно прикрутить эту Clipping plane, а толку ))
вообщем без понятия куда что прицеплять, чтобы плоскость резала только один объект, а остальные не трогала.

картинки и исходник ( версия 4.2.2 ) - в бетте 4.3.1 и демке 4.0.0  почему-то не работают Save Group\As\All Publish.  ((


Название: Re: Плоскость сечения
Отправлено: DimiS от 24 Декабря 2009, 23:42:45
второй рендер подключи на место пустого слота, а клиар рендер плейнс после него, и будет тебе счастие)


Название: Re: Плоскость сечения
Отправлено: Campo от 25 Декабря 2009, 09:28:27
эврика! спасибо за помощь, DimiS )
а множественное использование рендера не сделает проект более требовательным к ресурсам пк? грубо говоря тормозить будет больше или нет, если я подключу к примеру 20 рендеров..?

сейчас буду пробовать прицепить секущую к какому-нибудь объекту...

--- с наступающим всех!!! ))) ---


Название: Re: Плоскость сечения
Отправлено: DimiS от 25 Декабря 2009, 16:40:33
ну если количество полигонов увеличить то и тормоз увеличиться, если та же геометрия будет нарисована с большим количеством вызовов то производительность уменьшится совсем не на много, на 20-ти вызовах ты этого не заметишь


Название: Re: Плоскость сечения
Отправлено: Campo от 23 Января 2010, 22:12:11
кто-нибудь представляет себе как реализовать подобное при помощи команд плоскости сечения?
т.е. здесь её задать нужно либо боксом, либо тремя плоскостями...наврное )


Название: Re: Плоскость сечения
Отправлено: Sqwer от 24 Января 2010, 01:49:24
Лучше поставить несколько моделей, чем так расправляться с одной.

Но если и крайне нужна двнная реализация то:
надо в цикле вызывать одну и туже геометрию несколбко раз
и перед каждым вызовом создавать клип плейн  - рендить-
переместить клип - рендать-...... рендть- закрывать клип плейны.

в твоём случае понадобится 3 вызова


Название: Re: Плоскость сечения
Отправлено: Sqwer от 24 Января 2010, 01:51:26
О, спасибо! Под носом лежало не заметил.
Плохо только, что это Clip plane не показывает у обьекта сам срез. Это реально как-то победить?

Это делается вершинным шейдером.
пару условий - и всё готово.


Название: Re: Плоскость сечения
Отправлено: Campo от 24 Января 2010, 16:00:13
Sqwer,
- интересный ход мысли про подключение 3х одинаковых моделей и их обрезание) единственный минус - модель может оказаться высокополигональной, и тогда этот вариант (его ещё надо опробовать) отпадает (.
на оф форуме задавал этот вопрос..)
http://forum.quest3d.com/index.php?topic=68269.0 (http://forum.quest3d.com/index.php?topic=68269.0)
- а пример с вершинным шейдером можешь скинуть?
или хотя бы схему, как это делается)?


Название: Re: Плоскость сечения
Отправлено: Sqwer от 24 Января 2010, 16:35:13
По поводу вершинных:
работать будет только если стена идёт строго перпендикулярно миру и не имеет выступов!

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

при таком методе ещё карты текстурные могут поехать, но если процедурный UV, тогда это вопрос нет.


Название: Re: Плоскость сечения
Отправлено: Campo от 24 Января 2010, 17:15:53
не понял, что значит "в вертекстном"?


Название: Re: Плоскость сечения
Отправлено: Sqwer от 24 Января 2010, 21:10:26
из контекста "просто берём в вертекстной(вершинной) части шейдера проверяем, если вершина выше отметки, то придаём ей значение по Y оси равное условному."


По истечении некоторого времени тема будет перенесена в другой раздел.