forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Плавучие объекты (http://forum.boolean.name/showthread.php?t=13690)

YaLAS 10.11.2010 01:01

Плавучие объекты
 
Как лучше всего реализовать плавающие в воде объекты?

Речь в основном идет о мелких объектах, которые могут падать в воду и переворачиваться на ней - бочки, ящики, обломки.
Поведение кораблей на воде проще - они на ней лишь держаться, реализовать правдоподобное покачивание было бы неплохо, но необязательно.



Никакую физику не присоединял пока и даже не определился какую же выбрать. PhysX - вроде бы все может, но ограничения бесплатной версии и еще может какие проблемы от него. ODE - бесплатный, но слабее и пишут, что с проблемами порой. Другие физики вообще не рассматривал.
Большинство примеров с физикой касается твердых тел, а с жидкостями как? Неужели только в платном варианте? Или стоит вообще обойтись без физики и описать это формулами (но в математике на столько не силен).

DeeJex 10.11.2010 01:41

Ответ: Плавучие объекты
 
Цитата:

ограничения бесплатной версии
Незначительны.

IGR 10.11.2010 01:55

Ответ: Плавучие объекты
 
если бочки и ящики (как бэ для декорации да) то можно было бы и без физики и формул, а сделать анимацию (несколько вариантов) и ее проиграть когда типа ящик падает на дно !! Но еще и осколки то я так понимаю это у тебя не для декорации а для реалистичности сцены !! Но а реалистичное повидение модели с помощью формул ни каждый напишет так что здесь нужен провереный физ двиг !!
Бльшинство "козырей" у Физикса !!

YaLAS 10.11.2010 10:00

Ответ: Плавучие объекты
 
Цитата:

Сообщение от IGR (Сообщение 167833)
Но а реалистичное поведении модели с помощью формул ни каждый напишет так что здесь нужен проверенный физ двиг !!
Большинство "козырей" у Физикса!

Спасибо, так я и подумал. Просто анимация здесь не подойдет, а рассчитать реалистичное качание на волнах ящика - слишком сложно. Лучший PhysX, хорошо. Но что именно применить в PhysX для плавучести. Какие команды и методы. Приведите пример или ссылку, если не сложно.

И еще. Не раз люди писали, что он выдает окна типа "купи PhysX" и виснет после 60 объектов (это ведь реально очень мало)!

DeeJex 10.11.2010 10:21

Ответ: Плавучие объекты
 
Цитата:

и виснет после 60 объектов
1)После 300
2)Зачем СТОЛЬКО объектов?

St_AnGer 10.11.2010 12:02

Ответ: Плавучие объекты
 
YaLAS, для этого надо использовать команды для поплавка и воды. Соответствено, объект - поплавок, плавучесть настраивается; вода - ну и так понятно, тоже полностью настраивается. На память не помню все команды, но px*Kep* и px*Water*

Ограничения без ключика незначительные. Для демки хватит с лихвой. Кстати, PhysX Wrapper вроде уже давно бесплатный и с открытым исходным кодом.

зыЖ если что пиши в асю мне. В профиле у меня написана. Помогу с враппером.

YaLAS 10.11.2010 15:30

Ответ: Плавучие объекты
 
St_AnGer, спасибо. А где найти справку по конкретно таким функциям и желательно вообще вменяемую справку по PhysX Wrapper?
Учебник по PhysX Wrapper я кончено же видел и читал, но там не обо всех функциях и нет примеров с жидкостями.

Было неплохо почитать о функциях ph* так как єто в русской справке по остальным функциям блица.

Mr_F_ 10.11.2010 15:55

Ответ: Плавучие объекты
 
Поплавки в Рендеровском враппере физыкса прогал он сам, это силы, выталкивающие тело. Такие же можно реализовать и в ОДЕ и где угодно.

YaLAS 10.11.2010 16:27

Ответ: Плавучие объекты
 
Нашел англоязычную справку для PhysX Wrapper v1.2.
Для ODE есть и русская справка, если не ошибаюсь.
Mr. F., а какие комманды, методы нужны для реализации вышеописанного в ODE?
Неплохо бы увидеть пример "поплавка".

P.S. И есть ли более новая русская справка Блиц3Д, чем для версии 1.85?

YaLAS 11.11.2010 13:59

Ответ: Плавучие объекты
 
Сегодня на англоязычном ресурсе нашел такой пример, который делает что-то в этом роде, причем без физик и даже внешних библиотек и других файлов!

Кода правда много для описания "своей физики", но может пригодиться как альтернатива.

Еще нашел обработку такого плавучего объекта как рыбки - простые, без моделек и текстур, много и рабочие.
Думаю, нужно запустить их в море, только поменьше и поспокойнее, а то с анимироваными акулами пока никак.

Mr_F_ 11.11.2010 16:35

Ответ: Плавучие объекты
 
Цитата:

Неплохо бы увидеть пример "поплавка".
делал поплавки, работающие с анимированными волнами. долго вспоминать что в коде к чему, попробуй сам разобраться.
а ну ещё я это делал для лодочек... так что код может немного отличаться от обычных поплавков.
Код:

void kepref::UpdateOceanKeps()
{
        float3 pos,force,torque,keppos,antiforce,antiangforce;
        float fy,kepbuo,keplindamp,watery,zmult;

        float kepradius=0.0f;
        float kepmaxdist=4.0f;
        float kepangdamp=60.0f;
        float waterdepth=100.0f;

        for (kepref *kr = kepref::First; kr; kr=kr->Next)
        {
                //xLinePick3(xEntityPos(kr->piv)+float3(0,100,0),xEntityPos(kr->piv)+float3(0,-100,0));
                //pos=xPicked3();

          //  cout << "!1";

                if (kr->body->_body==0) return;

                pos=float3(0,Ocean::Pick3(xEntityPos(kr->piv,true))-0.2 ,0);

                keppos=xEntityPos(kr->piv,1);

                fy=abs(kr->body->GetLocalLinearSpeed().y)*0.5f; // ?? ????? ?? ????? ?????? ?? ????? undefined type!
                if (fy<1) fy=1.0f;
               
                if (kr->flood==false) {
                        kepbuo=kr->orig->buo/15.0f;
                        keplindamp=kr->orig->lindamp;
                } else {
                        kepbuo=kr->orig->buo/50.0f;
                        keplindamp=kr->orig->lindamp;
                }

                watery=pos.y;
                xPositionEntity(kr->tmp,keppos.x,pos.y,keppos.z);

        //        cout << "!2";

                if ((keppos.y<(watery-1.5f))&&(kr->flood==false)) kr->MakeDrops(keppos);

        //        cout << "!3";

                force=float3(0,0,0);
                torque=float3(0,0,0);

                if ((keppos.y <= (watery + kepradius)) && (keppos.y >= (watery - waterdepth))) {
                        antiforce=kr->body->GetLocalLinearSpeed();
                        antiangforce=kr->body->GetLocalAngularSpeed();

                        if (keppos.y >= (watery - kepmaxdist + kepradius)) {
                                force.y = (watery - keppos.y + kepradius)*kepbuo/kepmaxdist;
                        }

                        if (keppos.y < (watery - kepmaxdist + kepradius)) {
                                force.y = kepbuo;
                        }

                        zmult=0.25f;
                        if (abs(antiforce.z)<1) zmult=1.0f;

                        force.x -= antiforce.x*keplindamp*10.0f;
                        force.y -= antiforce.y*(keplindamp/fy);
                        force.z -= antiforce.z*zmult;

                        torque.x = -antiangforce.x*kepangdamp*2.0f;
                        torque.y = -antiangforce.y* (10.0f/(abs(antiforce.z)+1.0f));
                        torque.z = -antiangforce.z*12.5f;


                }

        //cout << "!4";

                kr->body->AddLocalForceAtPos(force,keppos,0);
                kr->body->AddLocalTorque(torque,0);


        //cout << "!5";

        }
}


YaLAS 11.11.2010 17:16

Ответ: Плавучие объекты
 
Mr. F., гм. спасибо, но я имел ввиду пример на Блице.
Если его не существует (только на с++ например есть), то ладно.

Randomize 11.11.2010 17:38

Ответ: Плавучие объекты
 
Если сравнивать ODE и PhysX то выбирай PhysX, благо он производительнее и нынче бесплатен (автор забил болт)
Вобще для кораблей физ движки плоховато подходят. Сам в своё время эксперементировал. C настройкой масс и центров тяжести предётся очень запарится чтоб получить более ли менее вменяемое поведение. Лучший вариант писать самому свой велосипед, благо у блица замечательные для этого возможности.

YaLAS 11.11.2010 18:49

Ответ: Плавучие объекты
 
Randomize, а в чем сложность с кораблями? В первом посте я упомянул почему. Но с другой стороны столкновения их между собой обсчитывать буду (с бочками не нужно) и нужен ли в этом физикс?
В том плане, что как физ модель любой корабль - это прямоугольник с треугольником впереди и все (в 3Д конечно), без обсчета каждой веревки на модельке. А на воде они и так держатся (хотя не слишком правдоподобно) и утопить их легко. А вот мелочь всякая - нуждается.

Так может будет лучше и кораблям физику добавить? (держаться на воде и столкновения) Или напротив не нужно усложнять, а удары считать лучше блицовскими коллизиями? И заодно - стоит ли делать пушечные ядра физ. моделями? Или залп с двух линкоров переполнит предел? Хотя им-то как раз нужно учитывать траекторию, начальное ускорение, гравитацию... руками все писать - морока.

impersonalis 12.11.2010 14:09

Ответ: Плавучие объекты
 
Цитата:

Хотя им-то как раз нужно учитывать траекторию, начальное ускорение, гравитацию... руками все писать - морока.
чот вы обленились. =\
это ж школьный курс


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot