Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Библиотеки

Библиотеки Сторонние библиотеки для Blitz

Ответ
 
Опции темы
Старый 12.08.2012, 01:59   #256
mirniybaka
AnyKey`щик
 
Аватар для mirniybaka
 
Регистрация: 30.07.2012
Сообщений: 2
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: PhysX wrapper

Ах да, не мог бы кто-нибудь скинуть ключик от Physx Wrapper'а? Хоть он и бесплатный, но 1.3.0 (которая воистину абсолютно бесплатна) я найти не могу (нашел только исходники, а скомпайлить не могу, ибо я полный ноль в этом вопросе), а в 1.2.0 есть таймер, который портит жизнь =\
(Offline)
 
Ответить с цитированием
Старый 12.08.2012, 12:40   #257
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 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
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: PhysX wrapper

А мне можно на всякий случай в ЛС?
И куда вводить эти данные?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pepel (12.08.2012)
Старый 12.08.2012, 16:28   #259
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений
(для 2,526 пользователей)
Ответ: PhysX wrapper

и мне если можно. насколько я знаю нужно вводить только ключ. насчет ника незнаю...
кстати на старом компе у меня был физикс последней версии с кучей примеров,=( и ключик , сам рендер давал еще давано , както в аське его подловил..
(Offline)
 
Ответить с цитированием
Старый 12.08.2012, 17:43   #260
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: PhysX wrapper

генератор
Вложения
Тип файла: rar gen.rar (17.8 Кб, 972 просмотров)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо tirarex за это полезное сообщение:
LLI.T.A.L.K.E.R. (16.08.2012), pepel (12.08.2012)
Старый 20.09.2012, 14:32   #261
red
AnyKey`щик
 
Регистрация: 20.09.2012
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: PhysX wrapper

ребят, нужны примеры по soft body, если кто обладает, залейте пожалуйста, а то ползаю по форуму и все ссылки битые, заранее благодарен
(Offline)
 
Ответить с цитированием
Старый 20.09.2012, 20:43   #262
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 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 за это полезное сообщение:
4yBa4Ok (21.09.2012), LLI.T.A.L.K.E.R. (20.09.2012), red (20.09.2012)
Старый 20.09.2012, 21:31   #263
red
AnyKey`щик
 
Регистрация: 20.09.2012
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: PhysX wrapper

Большое спасибо!
(Offline)
 
Ответить с цитированием
Старый 29.10.2012, 21:07   #264
FREE MAN
Разработчик
 
Регистрация: 20.02.2010
Сообщений: 397
Написано 173 полезных сообщений
(для 565 пользователей)
Ответ: PhysX wrapper

Привет Пекари! У кого есть самая последняя версия Физикса залейте пожалуйста и примеры к нему, если есть. За ранее спасибо!
(Offline)
 
Ответить с цитированием
Старый 07.11.2012, 13:01   #265
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: PhysX wrapper

Если ещё нужно: примеры, ну и сам враппер (библиотека и decls). Примеры не первой свежести, плюс я там что то делал когда то очень давно. Но рабочие вроде и их много.

Samples.zip


А у меня вот проблема внезапно возникла, прошу помощи (если кто то конечно ещё пользуется данным враппером).
Есть тело, из его центра пикает луч (физиковский ray). Мне нужно что бы луч пикал все тела, кроме того, из которого он пикает. Есть ли возможность запретить ему трогать тело "родитель", проходить его насквозь? Не нашёл такой команды увы (что то вроде pxBodySetCollisionGroup, только для луча нужно), а пикать другие тела надо обязательно из центра (а ещё лучше вообще из за спины) "родителя", см. изображение в аттаче.

Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 1458
Размер:	6.7 Кб
ID:	17995

апд: проблему то саму решил, но очень грубо - до вызова команды 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
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 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
Gamemaker1
AnyKey`щик
 
Регистрация: 12.12.2012
Сообщений: 14
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: PhysX wrapper

Нормальную ссылку хоть кто-нибудь кинет? Ни одна не работает!
(Offline)
 
Ответить с цитированием
Старый 16.12.2012, 22:28   #268
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,018
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Ответ: PhysX wrapper

Сообщение от Gamemaker1 Посмотреть сообщение
Нормальную ссылку хоть кто-нибудь кинет? Ни одна не работает!
WTF? Файлы по ссылкам на форуме хранятся, как это недоступны???
(Offline)
 
Ответить с цитированием
Старый 26.09.2016, 20:43   #269
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 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
KCEPOKC
Принтер
 
Аватар для KCEPOKC
 
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 569
Написано 342 полезных сообщений
(для 1,242 пользователей)
Ответ: PhysX wrapper

Сообщение от St_AnGer Посмотреть сообщение
...
Может быть задам немного тупой вопрос, но почему нельзя сделать подобное на движке Халвы/Гмоде, где с физикой все шикарно?
Мб с джоинтами проблему бы не исправил, зато не трахал б трупец.
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учебник по PhysX Wrapper для Blitz3D ABTOMAT FAQ 15 29.04.2014 19:11
Обсужение учебника по PhysX Wrapper для Blitz3D ABTOMAT 3D-программирование 309 24.02.2014 08:46
Капсульный игрок в PhysX Wrapper JohnAustin 3D-программирование 10 17.12.2009 20:50
Xors3D's Wrapper (PB4.3+) Chrono Syndrome PureBasic 19 20.08.2009 21:37
Bink Video Wrapper Zidane Библиотеки 7 05.06.2007 22:41


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com