www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=28)
-   -   PhysX wrapper (http://forum.boolean.name/showthread.php?t=2734)

Render 17.02.2007 03:17

PhysX wrapper
 
В честь нового апдейта решил и здесь запостить тему. Вот держите 0.7.4.0.

1. Наконецто приделал ключик. Теперь уже не буду всем вподряд слать новые версии врапера , и секономлю траф.
PxCreateWorld%(plane%, password$)


2. Испарвлены баги
- в тригерах
- тригера определяют статические поверхности
- с отставанием колёс машины
- теперь можно получить силу контакта со всеми телами (кроме плоскости)


3. Улучшены тригера. теперь тригер имеет свойства кинематики при этом в колизию не вступает, но заполняет даными о контакте структуру контакта. Может определить спящие тела.
появились две новые команды. Эти команды позволяют при перемещении тригера определять им
спящие тела.

pxTriggerSetPosition(body%, x#, y#, z#)
pxTriggerSetRotation(body%, pitch#, yaw#, roll#)


4. Добавлена очень полезная ф-я для копирования тел
Оказывается создания хулла занимает 6-7 мс. Это очень сильно вредит ФПС-ам. Для устранения этого эффекта была создана ф-я копирования тела. Время её выполнения меньше 1мс. Она копирует тело и пересчитует его центр масс. масса остаётся прежней.

pxCopyBody%(body%) - возвращает Ид нового тела.


5. Добавилась ф-я для определения радиуса колеса в райкаст подвеске
pxWheelGetRadius#(wheel%)
и функция которая проверяет сочление на разрыв
pxJointIsBroken%(joint%) - 1-разорвано. 0 -целое.


6. Появились партикл эмитеры

pxParticleCreateEmitter%() - создаёт партикл генератор
pxParticleEmitSetAngDamping(pEmitter, damp) - устанавливает угловое сопротивление частицам
pxParticleEmitSetLinDamping(pEmitter, damp) - устанавливает линейное сопротивлнеие частицам
pxParticleEmitSetMass(pEmitter%, mass#) - устанавливает массу частиц
pxParticleEmitSetRadius(pEmitter%, radius#) - радиус частиц
pxParticleEmitSetPosition(pEmitter%, x#, y#, z#) - позиция эмитера
pxParticleEmitSetRotation(pEmitter%, pitch#, yaw#, roll#) - поворот
pxParticleEmitSetRandRadius(pEmitter%, radius#) - радиус разброса частиц
pxParticleEmitSetStartSpeed(pEmitter%, min#, max#) - начальная скорость частици. Меняется рандомно от минимальной к максимальной.
pxParticleEmitSetTDAcceleration(pEmitter%, x#, y#, z#) - сила действующая на частици (гравитация)
pxParticleEmitSetScaleFactor(pEmitter%, radius#, rate#) - ф-я для изменения размеров частиц (они как бы растут, используется для дыма). radius - конечный радиус, больше которого частици не ростут. rate - шаг роста.
pxParticleEmitDeleteFirstParticle%(pEmitter%) - удаляет первую частицу с эмитера. При этом возвращает ентити пренадлежащий частице. очень удобно использовать для ограничения числа генерируемых частиц.
pxParticleEmitDeleteParticle(pEmitter%, particle%) - удаляет выбраную частицу

ф-и узнают параметры эмитера
pxParticleEmitGetAngDamping#(pEmitter%)
pxParticleEmitGetLinDamping#(pEmitter%)
pxParticleEmitGetMass#(pEmitter%)
pxParticleEmitGetRadius#(pEmitter%)
pxParticleEmitGetPositionX#(pEmitter%)
pxParticleEmitGetPositionY#(pEmitter%)
pxParticleEmitGetPositionZ#(pEmitter%)
pxParticleEmitGetRotationPitch#(pEmitter%)
pxParticleEmitGetRotationYaw#(pEmitter%)
pxParticleEmitGetRotationRoll#(pEmitter%)
pxParticleEmitGetRandRadius#(pEmitter%)
pxParticleEmitGetStartSpeedMax#(pEmitter%)
pxParticleEmitGetStartSpeedMin#(pEmitter%)
pxParticleEmitGetTDAccelerationX#(pEmitter%)
pxParticleEmitGetTDAccelerationY#(pEmitter%)
pxParticleEmitGetTDAccelerationZ#(pEmitter%)
pxParticleEmitGetScaleFactorRadius#(pEmitter%)
pxParticleEmitGetScaleFactorRate#(pEmitter%)

pxParticleEmitAddParticle%(pEmitter%, entity%) - создайт новую частицу в сцене
pxParticleUpdateEmitter(pEmitter%) - апдейт эмитера
pxParticleGetEntity%(particle%) - получить ентити
pxParticleGetBody%(particle%) - получить боди частици. Следует учитывать что боди это не есть частица. На её боди можно применять все те же команды что и на обычных телах. Даже можно ставить маски и группы колизий.
pxParticleGetradius#(particle%) - получает текущий радиус частици с учётом её увеличения.

Советы по применению:
- желательно не сыпать все частици в большую кучу иначе будет падение фпс
- для одного генератора можно генерировать не больше 10 000 частиц
- учитывайте, что это не флуиды, эти частици медленее работают. Просто над флуидами много работы, и будут готовы они не скоро.
- в дальнейшем планируется применения СинглМеш для частиц.
- По применению частиц смотрите семплы.


Теперь есть две версии врапера. Они поставляются в инсталяторах. В одном из инсталяторов есть райвера. Устанавливать содержимое нужно в папку блитц3д\юзерлибс.
Обновились семплы. Теперь их 55 штук. Когда поправлю демки, то выложу заново.

http://files.swargo.com/render/PhysX(drivers).exe - версия с дровами (желательно потестить) -1.6 метра

http://files.swargo.com/render/PhysX.exe - версия без дров - 600 кил

http://files.swargo.com/render/PhysX_Samples.rar - семплы. Все проверены на работоспособность. 1.6 -матра 55 семплов

За ключиком обращатся ко мне либо по мылу, либо в личку.

Megalan 17.02.2007 20:02

Re: PhysX wrapper
 
У меня ошибка. Семпл с машиной выдает ошибку о том что не найдена либа. (Другие не тестил)

---

После теста выявил что у него ошибка в pxSetGravity(0,-30,0) изменение ничего не даёт

Render 17.02.2007 20:14

Re: PhysX wrapper
 
Цитата:

Сообщение от Megalan
У меня ошибка. Семпл с машиной выдает ошибку о том что не найдена либа. (Другие не тестил)
После теста выявил что у него ошибка в pxSetGravity(0,-30,0) изменение ничего не даёт

Ты качал инсталятор с дровами или без? Если с дровами то проверь в реестре на наличие ключа.
HKEY_LOCAL_MACHINE\SOFTWARE\AGEIA Technologies
"PhysXCore Path"="C:\Program Files\AGEIA Technologies"
Это похоже на то что неустановился драйвер. Странно я вчера лично всё сам проверил. А ты точно в тот Юзерлибс установил :)

Megalan 17.02.2007 20:15

Re: PhysX wrapper
 
Цитата:

Сообщение от Render
Ты качал инсталятор с дровами или без? Если с дровами то проверь в реестре на наличие ключа.
HKEY_LOCAL_MACHINE\SOFTWARE\AGEIA Technologies
"PhysXCore Path"="C:\Program Files\AGEIA Technologies"
Это похоже на то что неустановился драйвер. Странно я вчера лично всё сам проверил. А ты точно в тот Юзерлибс установил :)

Всё точно. У меня стоят оффициальные дрова 6.12

----

PS. Вот бреееееед.... Переустановил дрова и теперь все работает...

Megalan 17.02.2007 20:35

Re: PhysX wrapper
 
Некоторые туторы пытаются залезть в реестр. Но так как нужного юзер либа нету то соответственно туторы не компилятся :)

Render 17.02.2007 20:37

Re: PhysX wrapper
 
Цитата:

Сообщение от Megalan
Некоторые туторы пытаются залезть в реестр. Но так как нужного юзер либа нету то соответственно туторы не компилятся :)

Ой, это случайно, Сорри. Удалите все строки для работы с реестром. Проверь мыло ;)

Megalan 17.02.2007 22:02

Re: PhysX wrapper
 
Слушай можешь сказать как заставить колидится все что есть на уровне с контентом загруженным из 3ds файла? А то сделал дорогу а она прозрачная для всего (Как в half-life когда включен noclip)

Render 18.02.2007 16:04

Re: PhysX wrapper
 
Тебе нужно использовать тримеш. Смотри примеры в папке TriMesh, или пример с машиной Победа.

ЛысыЙ_Чук-Иванчук 20.02.2007 19:26

Re: PhysX wrapper
 
Теперь если что то вот:
http://rubux.swargo.com/rus/

Render 25.02.2007 03:12

Re: PhysX wrapper
 
Релиз 0.7.5.0

Самое главное изменение это переход на новый СДК. так что нужно качать всё полностью с драйверами. И поудалять все старые длл-ки. желательно всё хорошенько проверить, а то я невсиле всё сам проверять на баги.
Поскольку удалось перейти на новый СДК, то возможно скоро появятся флуиды м продвинутые мягкие тела . Так что ждёмс.
В примерах появилось два новых. Один от МадМедика - хорошо демонстрирует контакты (смотреть всем в папке Contact). Второй от меня в папке с машинами. там подвеска на сочлениях. Сильно неругать, я её зделал за 15 минут.

1. Добавлена подвеска на сочлениях

pxJointCreateSuspFront%(body0%, body1%, x#, y#, z#) - сочление для передних колёс
pxJointCreateSuspBack%(body0%, body1%, x#, y#, z#) - для задних колёс
pxJointSuspSetSteerN(joint%, x#, y#, z#) - ось вращения колеса
pxJointSuspSetTurnN(joint%, x#, y#, z#) - ось поворота колеса
pxJointSuspSetLinLimit(joint%, lim#)- линейное ограничение хода
pxJointSuspSetLinParameter(joint%, spring#, rest#, damp#) - параметры линейного огарничения
pxJointSuspSetAngLimit(joint%, lim#) - угловое ограничение
pxJointSuspSetAngParameter(joint%, spring#, rest#, damp#) - параметры
pxJointSuspSetAngle(joint%, angle#) - угол поворота колеса
pxJointSuspSetSpeed(joint%, speed#) - установка скорости вращения (лучше не использовать, поскольку сила вращения прикладывается одновременно и к машине, поэтому она может переварачиватся. Для этого можно использовать Торкуе (желательно) или команды вращения и угловой скорости)
pxJointSuspSetBrake(joint%, mode%) - типа ручник . mode = 0 колесо свободно. mode = 1 - заблокировано

Я особо непытался настроить подвеску. В примере нужно применить материалы с хорошим сцеплением, и колёса вращать Торкуе (моментом вращения). также нужно обратить внимание на то что во всех тел есть ограничение угловой скорости. Для этого нужно будет увеличить pxSetMaxAngularSpeed(body%, speed#). на больших скоростях могут проявлятся баги. Вот вырезка из хелпа к Физиксу

Lets you set the maximum angular velocity permitted for this actor.
Because for various internal computations, very quickly rotating actors introduce error into the simulation, which leads to undesired results.
With NxPhysicsSDK::setParameter(NX_MAX_ANGULAR_VELOCITY
) you can set the default maximum velocity for actors created after the call. Bodies' high angular velocities are clamped to this value.
However, because some actors, such as car wheels, should be able to rotate quickly, you can override the default setting on a per-actor basis with the below call. Note that objects such as wheels which are approximated with spherical or other smooth collision primitives can be simulated with stability at a much higher angular velocity than, say, a box that has corners.
Note: The angular velocity is clamped to the set value before the solver, which means that the limit may still be momentarily exceeded.

так, что на боьших скоростях рекомендую использовать Рейкасты.



2. добавилась команда установки групы колизии

pxWheelSetCollisionGroup(NxWheelShape* wheel, int group)


3. Убрал глюк с проваливанием колёс во время засыпания машины


4. Добавились команды для работы с реестром. Конечно немного, но для некоторых мелочей хватит. Сделал специально, что бы нетаскать с собой дополнительную длл-ку для работы с реестром.

pxRegWriteDriverPath%(str$) - записывает в стандартный ключ путь где в текущий момент находятся драйвера. очень полезная ф-я. путь должен указывать на папку с номером версии
pxRegWriteDriverPath("C:\Program Files\AGEIA Technologies")

pxRegWriteString%(RootKey%, Path$, Name$, Data$) - записывает в реестр строку
pxRegWriteInt%(RootKey%, Path$, Name$, Data%) - записывает в реестр целое число
pxRegReadInt%(RootKey%, Path$, Name$) - возвращает целое
pxRegReadString$(RootKey%, Path$, Name$) - возвращает строку
pxRegDeleteValue%(RootKey%, Path$, Name$) - удаляет значение в ключе Name
Значения разделов имеют следующий вид:

RootKey = 0 HKEY_CLASSES_ROOT;
RootKey = 1 HKEY_CURRENT_USER;
RootKey = 2 HKEY_LOCAL_MACHINE;
RootKey = 3 HKEY_USERS;
RootKey = 4 HKEY_PERFORMANCE_DATA;

Все команды проверены.

5. Команда для установки локальной угловой скорости.

pxSetLocalAngularSpeed(body%, lx#, ly#, lz#)

6. Исправлены ошибки с контактами

HolyDel 25.02.2007 11:08

Re: PhysX wrapper
 
а где взять?

Render 25.02.2007 13:56

Re: PhysX wrapper
 
Цитата:

Сообщение от HolyDel
а где взять?

Только здесь http://rubux.swargo.com/rus . В разделе Файлы

Render 06.03.2007 03:38

Re: PhysX wrapper
 
Наконецто готов хелп!!! Качать в разделе файлов.

Новый релиз 0.7.6.0

1. Исправлены ошибки с тригерами. Тригер может определить 200 форм находящихся в нём. Еужно различать формы и тела. Компаунд может иметь несколько форм. Тригер имеет 2 формы. Простые тела имеют по одной. Если количество тел в тригере превышено, то они просто небудут определятся и МАВ больше небудет.

2. Устранён глюк с Удалением мира когда в нём есть тряпки.

3. наконецто нормально работают контакты (надеюсь ошибок больше небудет)


4. Добавлены новые команды для райкаст подвески.
pxWheelGetSuspensionTravel#(wheel%)- узнаёт длину пружины
pxWheelGetSuspensionRestitution#(wheel%) - жёсткость пружины
pxWheelGetSuspensionDamping#(wheel%) - затухание (сопротивление)


5. Добавлена команда для отключения райкасту тела
pxBodySetFlagRayCast(body, stat)


6.
pxBodySetCollisionGroupPair(int group1, int group2) - Команда включает заполнение информациеё о контакте между двумя группами. По умолчанию информация о коллизии (кординаты коллзии, тела и т.д.) получается только между телами с группой 0. Если группа была изменена, то нужно поставить будет ли эта группа заполнятся информацией о контакте.


7. Команда которая отключает проверяемость тела на нахождении в тригере. Тело не будет в нём определятся при
установки флага в ноль
pxBodySetFlagTriggertable(body%, stat%)


8.Добавлена металическая тряпка
pxCreateMetalCloth%(entity%, surf%, coreActor%, impThr#, depth#)
entity% - блитцевский ентити
surf% - сюрфейс данного ентити
coreActor% - физическое тело основы
impThr# - сила удержания
depth# - шаг сминания

Создайт мягкое тело со свойствами металла. Это тело небудет востанавливать прежнюю форму после сминания. Для правильной работы нужно физическое тело основы, оно должно быть похоже по форме на мягкое тело. Тело основы будет задавать области сминания мягкого тела. Мягкое тело сомнётся лиш в том случае когда выйдет за пределы основы. Сила удержания - это та сила с которой мягкое тело привязано к основе. Шаг сминания указывает насколько сомнётся тело за один удар.

moka 06.03.2007 04:01

Re: PhysX wrapper
 
Какие могут быть причины не запуска враппера, если я в клубе, установил драва, поставил блиц (скопировал домашний), и примеры тестяца, а дома нет, выводит MAV на Gravity, как-будто я не ввожу key. Меня это очень даже трогает и не устраивает, да и если я не один такой? Что делать то?

Render 06.03.2007 21:32

Re: PhysX wrapper
 
давно мне нужно было это зделать :)
http://rubux.swargo.com/rus/index.ph...ticles&b=2&a=3

ФАК по установке и решению проблем.


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

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