|
Библиотеки Сторонние библиотеки для Blitz |
12.08.2012, 01:59
|
#256
|
AnyKey`щик
Регистрация: 30.07.2012
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: PhysX wrapper
Ах да, не мог бы кто-нибудь скинуть ключик от Physx Wrapper'а? Хоть он и бесплатный, но 1.3.0 (которая воистину абсолютно бесплатна) я найти не могу (нашел только исходники, а скомпайлить не могу, ибо я полный ноль в этом вопросе), а в 1.2.0 есть таймер, который портит жизнь =\
|
(Offline)
|
|
12.08.2012, 12:40
|
#257
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: PhysX wrapper
тут на форуме лежит генератор ключей для физикса я даже не знаю где он но вот ключик на твой ник ))
Your name = "mirniybaka"
Your license key = "ae40\`06eU62lm54cm24]T58l]3eT]42"
License key is within '"' and case sensitive!
|
(Offline)
|
|
12.08.2012, 15:36
|
#258
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: PhysX wrapper
А мне можно на всякий случай в ЛС?
И куда вводить эти данные?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.08.2012, 16:28
|
#259
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: PhysX wrapper
и мне если можно. насколько я знаю нужно вводить только ключ. насчет ника незнаю...
кстати на старом компе у меня был физикс последней версии с кучей примеров,=( и ключик , сам рендер давал еще давано , както в аське его подловил..
|
(Offline)
|
|
12.08.2012, 17:43
|
#260
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: PhysX wrapper
генератор
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо tirarex за это полезное сообщение:
|
|
20.09.2012, 14:32
|
#261
|
AnyKey`щик
Регистрация: 20.09.2012
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: PhysX wrapper
ребят, нужны примеры по soft body, если кто обладает, залейте пожалуйста, а то ползаю по форуму и все ссылки битые, заранее благодарен
|
(Offline)
|
|
20.09.2012, 20:43
|
#262
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: PhysX wrapper
PhysX SB.rar
4 примера работы с мягкими телами на PhysX
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо St_AnGer за это полезное сообщение:
|
|
20.09.2012, 21:31
|
#263
|
AnyKey`щик
Регистрация: 20.09.2012
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: PhysX wrapper
Большое спасибо!
|
(Offline)
|
|
29.10.2012, 21:07
|
#264
|
Разработчик
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений (для 565 пользователей)
|
Ответ: PhysX wrapper
Привет Пекари! У кого есть самая последняя версия Физикса залейте пожалуйста и примеры к нему, если есть. За ранее спасибо!
|
(Offline)
|
|
07.11.2012, 13:01
|
#265
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: PhysX wrapper
Если ещё нужно: примеры, ну и сам враппер (библиотека и decls). Примеры не первой свежести, плюс я там что то делал когда то очень давно. Но рабочие вроде и их много.
Samples.zip
А у меня вот проблема внезапно возникла, прошу помощи (если кто то конечно ещё пользуется данным враппером).
Есть тело, из его центра пикает луч (физиковский ray). Мне нужно что бы луч пикал все тела, кроме того, из которого он пикает. Есть ли возможность запретить ему трогать тело "родитель", проходить его насквозь? Не нашёл такой команды увы (что то вроде pxBodySetCollisionGroup, только для луча нужно), а пикать другие тела надо обязательно из центра (а ещё лучше вообще из за спины) "родителя", см. изображение в аттаче.
апд: проблему то саму решил, но очень грубо - до вызова команды pxRayGetBody поднимаю тело "родитель" вверх, а после опускаю на столько же. Но это не самое красивое решение, есть ли ещё какие то варианты?
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
|
(Offline)
|
|
24.11.2012, 18:58
|
#266
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: Re: PhysX wrapper
Сообщение от St_AnGer
А у меня вот проблема внезапно возникла, прошу помощи (если кто то конечно ещё пользуется данным враппером).
Есть тело, из его центра пикает луч (физиковский ray). Мне нужно что бы луч пикал все тела, кроме того, из которого он пикает. Есть ли возможность запретить ему трогать тело "родитель", проходить его насквозь? Не нашёл такой команды увы (что то вроде pxBodySetCollisionGroup, только для луча нужно), а пикать другие тела надо обязательно из центра (а ещё лучше вообще из за спины) "родителя", см. изображение в аттаче.
Вложение 17995
апд: проблему то саму решил, но очень грубо - до вызова команды pxRayGetBody поднимаю тело "родитель" вверх, а после опускаю на столько же. Но это не самое красивое решение, есть ли ещё какие то варианты?
|
я решал это с помощью отодвигания начала луча за пределы объекта.
можно также пускать два луча один первый из центра обьекта .затем получаем координату пересечения с родительским объектом и назначаем эту координату центром второго луча. это если первый способ не знаешь как реализовать
Сообщение от Render
Инструкция как создавать СБ и файл тетрагонов:
1. Открываем 3дмакс или любой другой редактор и создаём модель
1.1 После создания ставим центр модели в её геометрический центр с помощью кнопки "Use selection Center"
1.2 Перемещаем модель так, что бы её центр совпал с центром координат 3дМакса
1.3 Сохраняем модель в Model.b3d и Model.obj. Б3Д можно заменить любым другим.
С 3дмаксом закончили.
2. Открываем утилиту PhysXViewer
2.1 Импортируем Model.obj
2.2 Создаём тетрагоны. Порядок действий на рисунке. Качество модели можно регулировать ползунками. После перемещение ползунков, нужно заново сгенерировать тетрагоны.
Должна быть следующая картина
2.3 Експортим всё в файлы Model_SB.obj и Model_SB.tet
3. Открываем блитц, и по примерам создаём своё СБ
|
ктонить знает как это делать? картинки потерялись
|
(Offline)
|
|
16.12.2012, 17:43
|
#267
|
AnyKey`щик
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: PhysX wrapper
Нормальную ссылку хоть кто-нибудь кинет? Ни одна не работает!
|
(Offline)
|
|
16.12.2012, 22:28
|
#268
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: PhysX wrapper
Сообщение от Gamemaker1
Нормальную ссылку хоть кто-нибудь кинет? Ни одна не работает!
|
WTF? Файлы по ссылкам на форуме хранятся, как это недоступны???
|
(Offline)
|
|
26.09.2016, 20:43
|
#269
|
Элита
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений (для 2,828 пользователей)
|
Ответ: PhysX wrapper
Побуду немного некрофилом
У меня вопрос возник к Знающим!
Как то так получилось, что с такой штукой как джоинты я не работал ни разу в Физиксе. И вот проблемка возникла - соединяю я два тела джоинтом типа Hinge или Fixed. И получается так, что джоинты вообще всех типов работают как "резиновые" если какому-либо из соединяемых тел придать силу или переместить. Как исправить? Упругость пробовал подтягивать - результат не меняется.
Я понимаю что есть bullet wrapper для блица и он более "актуален", если это слово вообще применимо к блицу и всему что с ним связано. С bullet'ом тоже по-экспериментировал сейчас, результат порадовал стабильностью, но там другая проблемка, о ней напишу в теме про bullet, если тут проблему решить не удастся...
зыЖ Нужен именно блиц, потому как это чисто прототип, делаю программный аналог своего робота (ну вот надо мне именно на блице), что бы не спалить дорогущие (нынче) сервоприводы в попытках заставить его ходить. Собственно, джоинты и использую как соединения сервоприводов (fixed - соединения между сервоприводами, hinge - соединение качалки и самого сервопривода)
Вот код, вроде запускается исправно, никаких текстур не требуется. Проблема видна в сочленениях "качалок" и самих сервах (серых кубиков). Качалки имеют сочленение типа Hinge и ограничены во вращении только по оси y, но они всё равно прыгают и по другим осям. Я понимаю что выставлять позицию тела функцией pxBodySetPosition после привязки джоинтом некорректно, но блин, какого хрена даже соединение типа Fixed ведёт себя неадекватно и становится резиновым в этот момент? В буллете такого вроде нету.Есть, проверил. Тогда вопрос - как перенести тело правильно в нужные мне координаты именно ПОСЛЕ установки сочленения?
;Include "pxServo.bb";
Graphics3D 1024,768,32,2;
AppTitle "Aibo"
pxCreateWorld (1, "");
pxSetGravity (0, -9.8, 0);
WireFrame False;
Global Camera=CreateCamera ();
PositionEntity(Camera, 30, 20, -30);
RotateEntity(Camera, 0, 45, 0);
Global light = CreateLight();
PositionEntity light,0, 100, 0;
pxBodySetCollisionGroupFlag (1, 2, 0);
pxBodySetCollisionGroupFlag (1, 1, 0);
Global legLF1.tServo = createServo(0, 15, 0, 0, -90, 90, False);
EntityColor legLF1\arm, 255, 0, 0
servoRotation(legLF1, 0, 90, 90);
servoSetSpeed (legLF1, 1);
servoSetBetween (legLF1, -65, 25, 1);
Global legLF2.tServo = createServo(-3, 15, -11.5, 0, -90, 90, False);
EntityColor legLF2\arm, 0, 255, 0
servoRotation(legLF2, 0, 0, 90);
servoSetSpeed (legLF2, 1);
servoSetAngle (legLF2, -90);
;Global legLF3.tServo = createServo(-4, 5, -20, 0, -90, 90, False);
;EntityColor legLF3\arm, 0, 0, 255
;servoRotation(legLF3, 0, 0, 0);
;servoSetSpeed (legLF3, 1);
;servoSetBetween (legLF3, 0, 90, 1);
;
;Global legLF4.tServo = createServo(-4, 5, -32, 0, 0, 0, False);
;EntityColor legLF4\arm, 0, 0, 255
;servoRotation(legLF4, 0, 90, 0);
servoConnect (legLF1, servoGetArm(legLF1), servoGetArm(legLF2), legLF1\armPoint1, 0, 1, 1, 0);
;servoConnect (legLF2, servoGetBody(legLF2), servoGetArm(legLF3), legLF2\bodyPoint1, 0);
;servoConnect (legLF3, servoGetBody(legLF3), servoGetBody(legLF4), legLF3\bodyPoint1, 0);
pxBodySetFrozen(servoGetBody(legLF1), 1);
;pxBodySetFrozen(servoGetBody(legLF2), 1);
;pxBodySetFrozen(servoGetBody(legLF3), 1);
;pxBodySetFrozen(servoGetBody(legLF4), 1);
Global pointer = CreateCylinder()
ScaleEntity pointer, 0.125, 80, 0.125;
PositionEntity pointer, 0, 80, 0
Global mxs# = 0;
Global mys# = 0;
Global camY# = 0;
Global speed# = 1.0;
Const GameUPS=60 ; Updates per second
Local Period=1000/GameUPS
Local FrameTime=MilliSecs()-Period
Local Tween#, Ticks,i,Remaining,StartTime,Elapsed
MoveMouse(GraphicsWidth()/2, GraphicsHeight()/2);
While Not KeyHit(1)
mxs = -MouseXSpeed()*0.125;
mys = MouseYSpeed()*0.125;
MoveMouse(GraphicsWidth()/2, GraphicsHeight()/2);
StartTime = MilliSecs();
Repeat
Elapsed=MilliSecs()-FrameTime;
Until Elapsed;
Ticks=Elapsed / Period;
Tween=Float(Elapsed Mod Period)/Float(Period);
For i=1 To Ticks
FrameTime=FrameTime+Period;
If i=Ticks Then
CaptureWorld;
End If
UpdateGame();
UpdateWorld();
Next
RenderWorld Tween;
Remaining = Period - (MilliSecs() - StartTime);
If Remaining > 1 Then
Delay (Remaining-1) ; Free some CPU time
End If
Flip;
Wend
btDestroyWorld()
End
Function UpdateGame()
If (KeyDown(17)) MoveEntity Camera, 0, 0, speed;
If (KeyDown(31)) MoveEntity Camera, 0, 0, -speed;
If (KeyDown(30)) MoveEntity Camera, -speed, 0, 0;
If (KeyDown(32)) MoveEntity Camera, speed, 0, 0;
camY = camY + mys;
If (camY <= -75)
camY = -75;
Else If (camY >= 75)
camY = 75;
End If
TurnEntity Camera, 0, mxs, 0;
RotateEntity Camera, camY, EntityYaw(Camera,1), 0;
If KeyHit(57)
; servoToggleAll();
servoPosition(legLF1, 0, 20, 0);
End If
updateServos ();
pxRenderPhysic(60, 0);
End Function
Type tServo
Field angle#, angleBetweenMin#, angleBetweenMax#;
Field min#, max#;
Field speed#;
Field move%;
Field dest#;
Field posX#, posY#;
Field parent%;
Field body%, bodyPoint1%, bodyPoint2%;
Field arm%, armPoint1, armPoint2;
Field cycleMirror%;
Field pxBody%, pxArm%, pxJoint%, pxJointParent%, pxJointChild%, pxParent;
End Type
Function createServo.tServo(px#, py#, pz#, angle#,min#,max#, double% = False)
Local s.tServo = New tServo;
s\angle = angle;
s\min = min;
s\max = max;
s\cycleMirror = False;
s\move = False;
s\parent = 0;
s\body = CreateCube();
ScaleEntity s\body, 2.0, 3.6, 4.0;
PositionEntity s\body, px, py, pz;
; Local body2 = CreateCube();
; ScaleEntity body2, 1.6, 0.4, 3.6;
; PositionEntity body2, px+0, py+4.0, pz+0;
; EntityTexture body2,tex;
; EntityParent body2, s\body;
s\bodyPoint1 = CreateSphere(8);
ScaleEntity s\bodyPoint1, 0.5, 0.5, 0.5;
PositionEntity s\bodyPoint1, px, py+3.6, pz+4.0, 1;
EntityParent s\bodyPoint1, s\body;
EntityColor s\bodyPoint1, 255, 0, 0;
s\bodyPoint2 = CreateSphere(8);
ScaleEntity s\bodyPoint2, 0.5, 0.5, 0.5;
PositionEntity s\bodyPoint2, px, py+3.6, pz-4.0, 1;
EntityParent s\bodyPoint2, s\body
EntityColor s\bodyPoint2, 0, 255, 0;
s\arm = CreateCube();
ScaleEntity s\arm, 0.6, 0.3, 4.6;
PositionEntity s\arm, px, py+4.6, pz+2.4;
s\armPoint1 = CreateSphere(8);
ScaleEntity s\armPoint1, 0.5, 0.5, 0.5;
PositionEntity s\armPoint1, px, py+4.6, pz+2.4+4.6;
EntityParent s\armPoint1, s\arm
EntityColor s\armPoint1, 255, 0, 0;
s\armPoint2 = CreateSphere(8);
ScaleEntity s\armPoint2, 0.5, 0.5, 0.5;
PositionEntity s\armPoint2, px, py+4.6, pz+2.4-4.6;
EntityParent s\armPoint2, s\arm
EntityColor s\armPoint2, 0, 255, 0;
s\pxBody = pxBodyCreateCube(2.0, 3.6, 4.0, 1);
pxBodySetPosition(s\pxBody, px, py, pz);
s\pxArm = pxBodyCreateCube(0.6, 0.3, 4.6, 1);
pxBodySetPosition(s\pxArm, pxBodyGetPositionX(s\pxBody)+0, pxBodyGetPositionY(s\pxBody)+4.6, pxBodyGetPositionZ(s\pxBody)+2.4);
s\pxJoint = pxJointCreateHinge (s\pxBody, s\pxArm, pxBodyGetPositionX(s\pxBody)+0, pxBodyGetPositionY(s\pxBody)+4.6, pxBodyGetPositionZ(s\pxBody)+2.4, 0, 1, 0);
pxJointHingeSetLimit (s\pxJoint, min, max);
Return s;
End Function
Function servoRotation(s.tServo, rX# = 0, rY# = 0, rZ# = 0, flag% = True)
If (s <> Null)
Local x#, y#, z#;
Local x0#, y0#, z0#;
Local x1#, y1#, z1#;
Local x2#, y2#, z2#;
Local x3#, y3#, z3#;
If (flag)
servoRotation(s, 0, 0, 0, False);
End If
If (rX = 0 And rY = 0 And rZ = 0)
x# = pxBodyGetPositionX(s\pxBody);
y# = pxBodyGetPositionY(s\pxBody);
z# = pxBodyGetPositionZ(s\pxBody);
pxBodySetPosition(s\pxArm, x, y+4.6, z+2.4);
Else
x# = pxBodyGetPositionX(s\pxBody);
y# = pxBodyGetPositionY(s\pxBody);
z# = pxBodyGetPositionZ(s\pxBody);
x0# = pxBodyGetPositionX(s\pxArm);
y0# = pxBodyGetPositionY(s\pxArm);
z0# = pxBodyGetPositionZ(s\pxArm);
x1# = x+(x0-x)*Cos(rZ)+(y-y0)*Sin(rZ);
y1# = y+(x0-x)*Sin(rZ)+(y0-y)*Cos(rZ);
z1# = z0;
x2# = x+(x1-x)*Cos(rY)+(z-z1)*Sin(rY);
y2# = y1;
z2# = z+(x1-x)*Sin(rY)+(z1-z)*Cos(rY);
x3# = x2;
y3# = y+(y2-y)*Cos(rX)+(z-z2)*Sin(rX);
z3# = z+(y2-y)*Sin(rX)+(z2-z)*Cos(rX);
pxBodySetPosition(s\pxArm, x3, y3, z3);
End If
pxBodySetRotation(s\pxArm, rX, rY, rZ);
pxBodySetRotation(s\pxBody, rX, rY, rZ);
End If
End Function
Function servoPosition(s.tServo, pX# = 0.0, pY# = 0.0, pZ# = 0.0)
If (s <> Null)
Local nX# = pxBodyGetPositionX(s\pxBody) - pxBodyGetPositionX(s\pxArm)
Local nY# = pxBodyGetPositionY(s\pxBody) - pxBodyGetPositionY(s\pxArm)
Local nZ# = pxBodyGetPositionZ(s\pxBody) - pxBodyGetPositionZ(s\pxArm)
pxBodySetPosition(s\pxBody, pX, pY, pZ);
pxBodySetPosition(s\pxArm, pX+nX, pY+nY, pZ+nZ);
End If
End Function
Function servoGetArm%(s.tServo)
If (s <> Null)
Return s\pxArm;
End If
Return 0;
End Function
Function servoGetBody%(s.tServo)
If (s <> Null)
Return s\pxBody;
End If
Return 0;
End Function
Function servoSetAngle(s.tServo, angle#)
If (s <> Null)
s\dest = angle;
If (s\dest < s\min)
s\dest = s\min;
Else If (s\dest > s\max)
s\dest = s\max;
End If
End If
End Function
Function servoSetSpeed(s.tServo, speed# = 1)
If (s <> Null)
s\speed = speed;
End If
End Function
Function servoStop(s.tServo)
If (s <> Null)
s\move = False;
End If
End Function
Function servoStart(s.tServo)
If (s <> Null)
s\move = True;
End If
End Function
Function servoStopAll()
Local s.tServo;
For s = Each tServo
servoStop(s);
Next
End Function
Function servoStartAll()
Local s.tServo;
For s = Each tServo
servoStart(s);
Next
End Function
Function servoToggle(s.tServo)
If (s <> Null)
If (s\move)
s\move = False;
Else
s\move = True
End If
End If
End Function
Function servoToggleAll()
Local s.tServo;
For s = Each tServo
servoToggle(s);
Next
End Function
Function servoConnect(s.tServo, parent, child, entity1%, angle# = 90, fX% = 0, fY% = 1, fZ% = 0)
If (s.tServo <> Null)
Local g1 = 1;
Local g2 = 1;
Local pX1# = pxBodyGetPositionX(s\pxBody);
Local pY1# = pxBodyGetPositionY(s\pxBody);
Local pZ1# = pxBodyGetPositionZ(s\pxBody);
s\pxJointChild = pxJointCreateHinge(parent, child, pX1, pY1, pZ1, fX, fY, fZ);
pxJointHingeSetLimit s\pxJointChild, 0, 0;
pxJointHingeSetSpring s\pxJointChild, 0, 0;
pxJointHingeSetMotor s\pxJointChild, 10, 0
End If
End Function
Function servoSetBetween(s.tServo, betweenMin# = 0, betweenMax# = 0, dir% = 1)
If (s <> Null)
s\angleBetweenMax = betweenMax;
s\angleBetweenMin = betweenMin;
If (betweenMin = betweenMax)
s\cycleMirror = False;
Else
s\cycleMirror = True;
If (dir > 0)
s\dest = s\angleBetweenMax;
Else
s\dest = s\angleBetweenMin;
End If
End If
End If
End Function
Function updateServos()
Local s.tServo;
For s = Each tServo
pxBodySetEntity(s\body, s\pxBody);
pxBodySetEntity(s\arm, s\pxArm);
If (s\parent)
End If
If (s\move)
If (s\angle < s\dest)
s\angle = s\angle + s\speed;
Else If (s\angle > s\dest)
s\angle = s\angle - s\speed;
Else
If (s\cycleMirror)
If (s\dest = s\angleBetweenMax)
s\dest = s\angleBetweenMin;
Else If (s\dest = s\angleBetweenMin)
s\dest = s\angleBetweenMax;
End If
Else
s\angle = s\dest;
End If
End If
End If
Next
End Function
А получить хочу в конечном итоге примерно вот что (на пробел это нечто начинает невнятно шевелить конечностями), только с физикой (шоб ходило прям как мой роботЪ, Только виртуально и не кроша сервоприводы пачками ).
В архиве работающее приложение (компилил из под вайна на маке... знаю, изващенец ): main.zip.
Под катом код этого приложения (разница только в отсутствии в коде использования текстур):
Graphics3D 1024,768,32,2;
;Include "servo.bb";
WireFrame False;
;Global tex1 = LoadTexture ("tex1.jpg");
;ScaleTexture tex1, 10, 10;
;Global plane = CreatePlane();
;EntityTexture plane,tex1;
Global Camera=CreateCamera ();
PositionEntity(Camera, 30, 40, -30);
RotateEntity(Camera, 0, 45, 0);
Global light = CreateLight();
PositionEntity light,0, 100, 0;
Global legLF1.tServo = createServo(0, -90, 90, False, False);
servoPosition (legLF1, 0, 0, 0);
servoRotate (legLF1, 0, 90, 90);
servoSetSpeed (legLF1, 1);
servoSetBetween (legLF1, -65, 25, 1);
Global legLF2.tServo = createServo(0, -90, 90, True, True);
servoPosition (legLF2, -3, 0, -9);
servoRotate (legLF2, 0, 0, 90);
servoSetAngle (legLF2, -90);
servoSetSpeed (legLF2, 1);
Global legLF3.tServo = createServo(0, -90, 90, True, True);
servoPosition (legLF3, -3, 0, -20);
servoRotate (legLF3, 0, 0, 0);
servoSetSpeed (legLF3, 1);
servoSetBetween (legLF3, 0, 90, 1);
Global footLF = CreateCube();
ScaleEntity footLF, 4, 1, 2;
PositionEntity footLF, -3, 0, -30;
RotateEntity footLF, 90, 0, 0
Global legRF1.tServo = createServo(0, -90, 90, False, False);
servoPosition (legRF1, 0, 0, 0);
servoRotate (legRF1, 0, 90, -90);
servoSetSpeed (legRF1, 1);
servoSetBetween (legRF1, -25, 65, 1);
Global legRF2.tServo = createServo(0, -90, 90, True, True);
servoPosition (legRF2, -3, 0, 9);
servoRotate (legRF2, 180, 0, -90);
servoSetAngle (legRF2, -90);
servoSetSpeed (legRF2, 1);
Global legRF3.tServo = createServo(0, -90, 90, True, True);
servoPosition (legRF3, -3, 0, 20);
servoRotate (legRF3, 180, 0, 0);
servoSetSpeed (legRF3, 1);
servoSetBetween (legRF3, 0, 90, 1);
Global footRF = CreateCube();
ScaleEntity footRF, 4, 1, 2;
PositionEntity footRF, -3, 0, 30;
RotateEntity footRF, 90, 0, 0
Global legLB1.tServo = createServo(0, -90, 90, False, False);
servoPosition (legLB1, 0, 0, 0);
servoRotate (legLB1, 0, 90, 90);
servoSetSpeed (legLB1, 1);
servoSetBetween (legLB1, -45, 45, -1);
Global legLB2.tServo = createServo(0, -90, 90, True, True);
servoPosition (legLB2, -3, 0, -9);
servoRotate (legLB2, 0, 0, 90);
servoSetAngle (legLB2, -90);
servoSetSpeed (legLB2, 1);
Global legLB3.tServo = createServo(0, -90, 90, True, True);
servoPosition (legLB3, -3, 0, -20);
servoRotate (legLB3, 0, 0, 0);
servoSetSpeed (legLB3, 1);
servoSetBetween (legLB3, 0, 90, -1);
Global footLB = CreateCube();
ScaleEntity footLB, 4, 1, 2;
PositionEntity footLB, -3, 0, -30;
RotateEntity footLB, 90, 0, 0
Global legRB1.tServo = createServo(0, -90, 90, False, False);
servoPosition (legRB1, 0, 0, 0);
servoRotate (legRB1, 0, 90, -90);
servoSetSpeed (legRB1, 1);
servoSetBetween (legRB1, -45, 45, -1);
Global legRB2.tServo = createServo(0, -90, 90, True, True);
servoPosition (legRB2, -3, 0, 9);
servoRotate (legRB2, 180, 0, -90);
servoSetAngle (legRB2, -90);
servoSetSpeed (legRB2, 1);
Global legRB3.tServo = createServo(0, -90, 90, True, True);
servoPosition (legRB3, -3, 0, 20);
servoRotate (legRB3, 180, 0, 0);
servoSetSpeed (legRB3, 1);
servoSetBetween (legRB3, 0, 90, -1);
Global footRB = CreateCube();
ScaleEntity footRB, 4, 1, 2;
PositionEntity footRB, -3, 0, 30;
RotateEntity footRB, 90, 0, 0
Global body = CreatePivot();
ScaleEntity body, 1, 1, 1;
Global bodyMesh = CreateCube();
ScaleEntity bodyMesh, 15,0.1,5;
PositionEntity bodyMesh, 0, -2.1, 0;
EntityParent bodyMesh, body;
servoAddEntity (legLF1, servoGetArm(legLF2));
servoAddEntity (legLF2, servoGetArm(legLF3));
servoAddEntity (legLF3, footLF);
servoAddEntity (legRF1, servoGetArm(legRF2));
servoAddEntity (legRF2, servoGetArm(legRF3));
servoAddEntity (legRF3, footRF);
servoAddEntity (legLB1, servoGetArm(legLB2));
servoAddEntity (legLB2, servoGetArm(legLB3));
servoAddEntity (legLB3, footLB);
servoAddEntity (legRB1, servoGetArm(legRB2));
servoAddEntity (legRB2, servoGetArm(legRB3));
servoAddEntity (legRB3, footRB);
servoPosition (legLF1, -12, 0, -5);
servoPosition (legRF1, -12, 0, 5);
servoPosition (legLB1, 12, 0, -5);
servoPosition (legRB1, 12, 0, 5);
servoParent (legLF1, body);
servoParent (legLB1, body);
servoParent (legRF1, body);
servoParent (legRB1, body);
PositionEntity body, 0, 30, 0;
;servoStartAll();
Global mxs# = 0;
Global mys# = 0;
Global camY# = 0;
Global speed# = 1.0;
Const GameUPS=60 ; Updates per second
Local Period=1000/GameUPS
Local FrameTime=MilliSecs()-Period
Local Tween#, Ticks,i,Remaining,StartTime,Elapsed
While Not KeyHit(1)
mxs = -MouseXSpeed()*0.25;
mys = MouseYSpeed()*0.25;
MoveMouse(GraphicsWidth()/2, GraphicsHeight()/2);
StartTime = MilliSecs();
Repeat
Elapsed=MilliSecs()-FrameTime;
Until Elapsed;
Ticks=Elapsed / Period;
Tween=Float(Elapsed Mod Period)/Float(Period);
For i=1 To Ticks
FrameTime=FrameTime+Period;
If i=Ticks Then
CaptureWorld;
End If
UpdateGame();
UpdateWorld();
Next
RenderWorld Tween;
Remaining = Period - (MilliSecs() - StartTime);
If Remaining > 1 Then
Delay (Remaining-1) ; Free some CPU time
End If
Flip;
Wend
End
Function UpdateGame()
If (KeyDown(17)) MoveEntity Camera, 0, 0, speed;
If (KeyDown(31)) MoveEntity Camera, 0, 0, -speed;
If (KeyDown(30)) MoveEntity Camera, -speed, 0, 0;
If (KeyDown(32)) MoveEntity Camera, speed, 0, 0;
camY = camY + mys;
If (camY <= -75)
camY = -75;
Else If (camY >= 75)
camY = 75;
End If
TurnEntity Camera, 0, mxs, 0;
RotateEntity Camera, camY, EntityYaw(Camera,1), 0;
If KeyHit(57)
servoToggleAll();
End If
updateServos ();
End Function
Type tServo
Field angle#, angleBetweenMin#, angleBetweenMax#;
Field min#, max#;
Field mainArm%;
Field speed#;
Field move%;
Field dest#;
Field posX#, posY#;
Field parent%;
Field pivotBody%, pivotArm%
Field body%, arm%;
Field cycleMirror%;
Field pxBody%;
End Type
Function createServo.tServo(angle#,min#,max#, double% = False, mainArm = False)
Local s.tServo = New tServo;
s\angle = angle;
s\min = min;
s\max = max;
s\mainArm = mainArm
s\cycleMirror = False;
s\move = False;
s\pivotBody = CreatePivot();
s\pivotArm = CreatePivot();
; Local tex = LoadTexture ("bricks.jpg");
s\body = CreateCube();
ScaleEntity s\body, 2.0, 3.6, 4.0;
; EntityTexture s\body,tex;
Local body2 = CreateCube();
ScaleEntity body2, 1.6, 0.4, 3.4;
PositionEntity body2, 0.2, 3.8, 0.2;
; EntityTexture body2,tex;
EntityParent body2, s\body;
s\arm = CreateCylinder();
If (double)
ScaleEntity s\arm, 0.55, 4.8, 0.55;
Else
ScaleEntity s\arm, 0.55, 4, 0.55;
PositionEntity s\arm, 0, 0.6, 0;
End If
Local arm2 = CreateCube();
ScaleEntity arm2, 0.6, 0.3, 4.6;
PositionEntity arm2, 0, 4.6, 0;
EntityParent arm2, s\arm;
If (double)
Local arm3 = CreateCube();
ScaleEntity arm3, 0.6, 0.3, 4.6;
PositionEntity arm3, 0, -4.6, 0;
EntityParent arm3, s\arm;
End If
EntityParent s\body, s\pivotBody;
EntityParent s\arm, s\pivotArm;
If (s\mainArm)
PositionEntity s\body, 0, -0.2, -2.4;
EntityParent s\pivotBody, s\pivotArm;
Else
PositionEntity s\pivotArm, 0, 0.4, 2.4;
EntityParent s\pivotArm, s\pivotBody;
End If
If (s\mainArm)
RotateEntity s\pivotArm, 0, s\angle, 0;
Else
RotateEntity s\pivotBody, 0, s\angle, 0;
End If
Return s;
End Function
Function servoRotate(s.tServo, rX# = 0.0, rY# = 0.0, rZ# = 0.0)
If (s <> Null)
If (s\mainArm)
RotateEntity s\pivotArm, rX, rY, rZ;
Else
RotateEntity s\pivotBody, rX, rY, rZ;
End If
End If
End Function
Function servoPosition(s.tServo, pX# = 0.0, pY# = 0.0, pZ# = 0.0)
If (s <> Null)
If (s\mainArm)
PositionEntity s\pivotArm, pX, pY, pZ;
Else
PositionEntity s\pivotBody, pX, pY, pZ;
End If
End If
End Function
Function servoParent(s.tServo, parent)
If (s <> Null)
If (s\mainArm)
EntityParent s\pivotArm, parent;
Else
EntityParent s\pivotBody, parent;
End If
End If
End Function
Function servoGetArm%(s.tServo)
If (s <> Null)
If (s\mainArm)
Return s\pivotArm;
Else
Return s\pivotBody;
End If
End If
Return 0;
End Function
Function servoGetBody%(s.tServo)
If (s <> Null)
If (s\mainArm)
Return s\pivotBody;
Else
Return s\pivotArm;
End If
End If
Return 0;
End Function
Function servoSetAngle(s.tServo, angle#)
If (s <> Null)
s\dest = angle;
If (s\dest < s\min)
s\dest = s\min;
Else If (s\dest > s\max)
s\dest = s\max;
End If
End If
End Function
Function servoSetSpeed(s.tServo, speed# = 1)
If (s <> Null)
s\speed = speed;
End If
End Function
Function servoStop(s.tServo)
If (s <> Null)
s\move = False;
End If
End Function
Function servoStart(s.tServo)
If (s <> Null)
s\move = True;
End If
End Function
Function servoStopAll()
Local s.tServo;
For s = Each tServo
servoStop(s);
Next
End Function
Function servoStartAll()
Local s.tServo;
For s = Each tServo
servoStart(s);
Next
End Function
Function servoToggle(s.tServo)
If (s <> Null)
If (s\move)
s\move = False;
Else
s\move = True
End If
End If
End Function
Function servoToggleAll()
Local s.tServo;
For s = Each tServo
servoToggle(s);
Next
End Function
Function servoAddEntity(s.tServo, entity%)
If (s.tServo <> Null And entity% <> 0)
If (s\mainArm)
EntityParent entity, s\pivotBody;
Else
EntityParent entity, s\pivotArm;
End If
End If
End Function
Function servoSetBetween(s.tServo, betweenMin# = 0, betweenMax# = 0, dir% = 1)
If (s <> Null)
s\angleBetweenMax = betweenMax;
s\angleBetweenMin = betweenMin;
If (betweenMin = betweenMax)
s\cycleMirror = False;
Else
s\cycleMirror = True;
If (dir > 0)
s\dest = s\angleBetweenMax;
Else
s\dest = s\angleBetweenMin;
End If
End If
End If
End Function
Function updateServos()
Local s.tServo;
For s = Each tServo
If (s\move)
If (s\angle < s\dest)
s\angle = s\angle + s\speed;
Else If (s\angle > s\dest)
s\angle = s\angle - s\speed;
Else
If (s\cycleMirror)
If (s\dest = s\angleBetweenMax)
s\dest = s\angleBetweenMin;
Else If (s\dest = s\angleBetweenMin)
s\dest = s\angleBetweenMax;
End If
Else
s\angle = s\dest;
End If
End If
If (s\mainArm)
RotateEntity s\pivotBody, 0, s\angle, 0;
Else
RotateEntity s\pivotArm, 0, s\angle, 0;
End If
End If
Next
End Function
upd Почитал интернеты, по ходу дела никак проблему не решить - джоинты на всех физ.движках так себя ведут под нагрузкой. Это прискорбно .
upd2 На Bullet'е почти получилось реализовать то, что я хотел. Там джоинты менее "резиновые", но всё равно этот эффект никак не получается ещё больше снизить...
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.
Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2
Скачать Doom 2D: Remake v0.3.8a
Последний раз редактировалось St_AnGer, 27.09.2016 в 18:18.
Причина: Добавил желаемый результат
|
(Offline)
|
|
27.09.2016, 23:17
|
#270
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 569
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Ответ: PhysX wrapper
Сообщение от St_AnGer
...
|
Может быть задам немного тупой вопрос, но почему нельзя сделать подобное на движке Халвы/Гмоде, где с физикой все шикарно?
Мб с джоинтами проблему бы не исправил, зато не трахал б трупец.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:56.
|