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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 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)
 
Ответить с цитированием
Старый 09.12.2007, 20:42   #2
Render
Знающий
 
Регистрация: 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
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tormoz (30.10.2008)
Старый 10.12.2007, 01:38   #6
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: xors+PhysX=ragdoll

Глобали не забудьте установить, а то у физ объектов нету локальных, а у энтитей вероятны.
(Offline)
 
Ответить с цитированием
Старый 10.12.2007, 11:01   #9
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: xors+PhysX=ragdoll

Ize'g0re, хм если ставить перемещение после упдейта физики и перед рендером?
(Offline)
 
Ответить с цитированием
Старый 10.12.2007, 13:32   #11
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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
jimon
 
Сообщений: n/a
Re: xors+PhysX=ragdoll

обычно матрица обьекта не обновляется после SetPosition
надо ее ручками обновлять и всьо хотя хз
 
Ответить с цитированием
Старый 10.12.2007, 15:30   #13
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 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
jimon
 
Сообщений: n/a
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)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


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