Тема: xors+PhysX=ragdoll
Показать сообщение отдельно
Старый 09.12.2007, 16:05   #1
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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)
 
Ответить с цитированием