|
3D-программирование Вопросы, касающиеся программирования 3D мира |
09.12.2007, 16:05
|
#1
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
xors+PhysX=ragdoll
================
WARNING!!!
================
Так, сразу предупреждаю: копипастить ragdoll Render'a из аналогичного семпла я НЕ НАМЕРЕН. Почему - не спрашивайте. Как говорится, t0p secre|)
================
Теперь по теме:
---
Итак, задача: сделать меш и физическое тело (с написанием всех элементов проблем нет), объеденить все тела (думаю, тоже сам смогу сваять) и сделать функцию приведения в соответствие всех элементов.
Именно с последним пунктом у меня и возникли проблемы. Поначалу использовал вот эту функцию, вычитав ее в справке (эх, пора-бы что ли справку поисправлять, или мне свежую версию найти... Кстати, никто не знает, где брать? Только точный линк, плз) :
pxBodySetBodyEntity ...
С этой коммандой все нормально компилировалось, однако никаких результатов ее работы я лично так и не обнаружил.
Потом глянул в семплы, нашел другой синтаксис:
pxBodySetEntity ...
Вот тут и начались веселости... Т.к. я работаю сразу в Realese режиме, я сразу же словил MAV. Угу, молодец, ничего не скажешь... Включил дебаг, поймал тот же самый MAV на строчке:
pxBodySetEntity a\meshL,a\bodyL
В чем же дело? Код вот такой:
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; |||||||||||||||||||||||||||||
; . . Initializing . . . . . .
; |||||||||||||||||||||||||||||
Include "b3d_dx9.bb" ; Include |-| 0 |_ \|/ lib...
; set Title, Mode, AntiAlias & Tex_Filter
xAppTitle "|)ynamics"
xGraphics3D 800,600,32,0,False
xAntiAlias True
xSetTextureFiltering TF_ANISOTROPIC
If xGetMaxVertexShaderVersion() > -1
xSetSkinningMethod SKIN_HARDWAREVS
skinvs = xLoadVertexShader("..\media\skinning.txt", "main", VS_1_1)
Else
xSetSkinningMethod SKIN_SOFTWARE
EndIf
; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; //////////////////////////////////////////////////////////
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; |||||||||||||||||||||||||||||
; . . Player . . . . . . . . .
; |||||||||||||||||||||||||||||
Type arm
Field name$
;-----------|
Field meshL
Field bodyL
Field angL
;-----------|
Field meshU
Field bodyU
Field angU
;-----------|
Field rotate
Field Aend
End Type
; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; //////////////////////////////////////////////////////////
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; |||||||||||||||||||||||||||||
; . . Creating . . . . . . . .
; |||||||||||||||||||||||||||||
cam = xCreateCamera()
xPositionEntity cam, 0, 0, -40
xCameraRange cam, 0.1, 1000
light1 = xCreateLight(LIGHT_DIRECTION)
xRotateEntity light1, -45, 0, 0
pxCreateWorld(1,"36777-32943-20423-12306-18567")
pxSetGravity(0, -10, 0)
create_pl()
; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; //////////////////////////////////////////////////////////
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; |||||||||||||||||||||||||||||
; . . Main l00p . . . . . . . .
; |||||||||||||||||||||||||||||
While Not xKeyHit(1)
pxRenderPhysic(30,0)
update_pl()
xRenderWorld()
xFlip()
Wend
; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; //////////////////////////////////////////////////////////
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; |||||||||||||||||||||||||||||
; . . Ending . . . . . . . . .
; |||||||||||||||||||||||||||||
End
; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; //////////////////////////////////////////////////////////
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
; |||||||||||||||||||||||||||||
; . . Functions . . . . . . . .
; |||||||||||||||||||||||||||||
; Create function
Function create_pl()
; Pre-creation
seg=xCreateCylinder()
xScaleEntity seg,1,3.5,1.5
xPositionMesh seg,0,-1.5,0
xHideEntity seg
;===========================
; Creation. Stage 1 == leg_L
;===========================
a.arm=New arm
a\name="leg_l"
a\meshL=xCopyEntity(seg)
xPositionEntity a\meshL,-1.5,3.8,0
; - -
a\bodyL=pxBodyCreateCylinder(0.6,3.5,8,7)
pxBodySetPosition a\bodyL,-1.5,4.5,0
;pxBodySetCMassGlobalposition a\bodyL,-1.5,3.8,0
;- - - - - - - - - - - - - -
a\meshU=xCopyEntity(seg)
xPositionEntity a\meshU,-1.5,6,0
;xEntityParent a\meshL,a\meshU
; - -
a\bodyU=pxBodyCreateCylinder(0.6,3.5,8,7)
pxBodySetPosition a\bodyU,0,10,0
;xHideEntity a\meshU
End Function
; Update function
Function update_pl()
For a.arm=Each arm
pxBodySetEntity a\meshL,a\bodyL
pxBodySetEntity a\meshU,a\bodyU
Next
End Function
; |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; //////////////////////////////////////////////////////////
Если кто знает, в чем дело, просьба разъяснить... Ну, или рабочим вариантом поделиться... (^_^')
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
09.12.2007, 20:42
|
#2
|
Знающий
Регистрация: 12.07.2006
Сообщений: 283
Написано 16 полезных сообщений (для 32 пользователей)
|
Re: xors+PhysX=ragdoll
pxBodySetEntity работает только с блитцем. В Ксорсе другая структура памяти, поэтому МАВ. Тебе придётся самому писать ф-ю, делай как в ОДЕ. Определяё углы поворта и позицию боди, а потом ставь в ту же позицию меш.
|
(Offline)
|
|
09.12.2007, 22:04
|
#3
|
Дэвелопер
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений (для 17 пользователей)
|
Re: xors+PhysX=ragdoll
Да ты бы 50 раз подумал как можно задать, и потом задавол- ато чтобы понять такое приходится даже мозг подключать.
PositionEntity Entity, pxBodyGetPositionX(body), ...Y, ...Z
RotateEntity Entity. pxBodyGetRotationPitch( body), ... Yaw, ... Roll
RTFM
PS\ Вопрос можно было озвучить так:
Как в Ксорсе Меш поставить в позицию боди.
|
(Offline)
|
|
09.12.2007, 23:25
|
#4
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Re: xors+PhysX=ragdoll
Всем огромное спасибо, плусадын и прочие респекты.
Пошел писать функцию для приведения Ксорсовского ентити под боди. Как напишу - кину сюда.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
10.12.2007, 00:51
|
#5
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
xors+PhysX=ragdoll ; Функция приведения в соответствие
Как и обещался, выкладываю сюда плод цельных 2-х минут деятельности моего моска... Юзайте на здоровье. За возможные совпадения я не отвечаю.
; pxBodySetEntity-заменитель...
Function BodySetEntity(bod,ent)
Local pX,pY,pZ,rX,rY,rZ
pX=pxBodyGetPositionX(bod)
pY=pxBodyGetPositionY(bod)
pZ=pxBodyGetPositionZ(bod)
rX=pxBodyGetRotationPitch(bod)
rY=pxBodyGetRotationYaw(bod)
rZ=pxBodyGetRotationRoll(bod)
xPositionEntity ent,pX,pY,pZ
xRotateEntity ent,rX,rY,rZ
End Function
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.12.2007, 01:38
|
#6
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Re: xors+PhysX=ragdoll
Что-то лагучий мой метод получается... Есть мысль сделать несколько блитцевских ентити, а потом проводить синхрониз уже с ними (вполне верноятно, что это будут простые pivot... Скорее всего так оно и будет)... Но вопрос встает: не будет ли это слишком расточительно?
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
10.12.2007, 04:43
|
#7
|
Дэвелопер
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений (для 17 пользователей)
|
Re: xors+PhysX=ragdoll
Блин чувак ЖЖОш, я находу ето прописывал , но если так охота функцию(1001% рабочести)
Но изза того что юзается Ксорс могут возникнут дерганости(объект иногда дергается)- у меня возникали(но ето было давно, что сейчас хз)
Function BodySetEntity(bod,ent)
xPositionEntity ent,pxBodyGetPositionX(bod),pxBodyGetPositionн(bod ),pxBodyGetPositionZ(bod)
xRotateEntity ent,pxBodyGetRotationPitch(bod),pxBodyGetRotationY aw(bod),pxBodyGetRotationRoll(bod)
End Function
|
(Offline)
|
|
10.12.2007, 09:27
|
#8
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: xors+PhysX=ragdoll
Глобали не забудьте установить, а то у физ объектов нету локальных, а у энтитей вероятны.
|
(Offline)
|
|
10.12.2007, 11:01
|
#9
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Re: xors+PhysX=ragdoll
Тогда вопрос состоит теперь именно в том, чтобы убрать дерганности...
Я попробовал и через стандартные ентити, однако дерганность осталась...
Придется видимо городить функцию для проверки движения на баг и устранения ошибки (;
Если реализую грамотно и мое чудо даже заработает, то опять-таки выложу здесь.
ПёС.
А "жжу" я именно потому, как мне хотелось в коде видеть не мудреную конструкцию, а что-то вроде:
BodySetEntity a\body,a\mesh
...
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
10.12.2007, 12:48
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: xors+PhysX=ragdoll
Ize'g0re, хм если ставить перемещение после упдейта физики и перед рендером?
|
(Offline)
|
|
10.12.2007, 13:32
|
#11
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Re: xors+PhysX=ragdoll
Там оно и находится... Вернее находилось... (^+^')
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
10.12.2007, 14:57
|
#12
|
|
Re: xors+PhysX=ragdoll
обычно матрица обьекта не обновляется после SetPosition
надо ее ручками обновлять и всьо хотя хз
|
|
|
10.12.2007, 15:30
|
#13
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Re: xors+PhysX=ragdoll
Джимон, если возможно, опиши несколько подробнее.
Не совсем понимаю, что есть матрица объекта - имеется ввиду вертексная матрица?
В любом случае, вопрос: как ее обновить ручками?
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
10.12.2007, 15:44
|
#14
|
|
Re: xors+PhysX=ragdoll
ну в ирлихте, к примеру, после вызова setposition сама позиция
обьекта не обновляется
там стоит такой метод в ISceneNode
virtual void setPosition(const core::vector3df& newpos)
{
RelativeTranslation = newpos;
}
так же там стоит вот такой метод
virtual void updateAbsolutePosition()
{
if (Parent )
{
AbsoluteTransformation = Parent->getAbsoluteTransformation() * getRelativeTransformation();
}
else
AbsoluteTransformation = getRelativeTransformation();
}
(AbsoluteTransformation - матрица трансформации node)
тоесть после задания позиции, ее реальное значение не обновляется
и для синхронизации приходилось ручками вызывать updateAbsolutePosition()
я хз как в xors ... просто предположил такое
|
|
|
10.12.2007, 20:26
|
#15
|
Дэвелопер
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений (для 17 пользователей)
|
Re: xors+PhysX=ragdoll
Сообщение от Ize'g0re
Я попробовал и через стандартные ентити, однако дерганность осталась...
|
Выпремляй руки!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
C++ и xors |
Hurrit |
Xors3D |
18 |
24.11.2009 23:15 |
b3d,xors,bmax |
NitE |
Xors3D |
11 |
06.10.2009 14:51 |
RagDoll: Ice Adventures |
cahekp |
Проекты на Blitz3D |
39 |
12.09.2009 10:39 |
RagDoll |
Тарас Шевченко |
3D-программирование |
16 |
12.12.2006 19:38 |
ode ragdoll |
vadim2 |
3D-программирование |
4 |
31.10.2006 15:44 |
Часовой пояс GMT +4, время: 20:44.
|