forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Проблемка с чайлдами (http://forum.boolean.name/showthread.php?t=5806)

LD 26.02.2008 00:30

Проблемка с чайлдами
 
Ребят, помогите, делаю парсинг левелов (чтобы физ объекты, триггеры и.т.д. расставлять) и вот пытаюсь сделать просто нахождение чайлдов и делание их физ объектами... CountTriangles для каждого чайлда равно нулю, хотя чайлды находятся (там просто кубики), соответственно создание хулла вызывает МАВ, никак не могу разобраться... В чем может быть дело?


physmesh=LoadAnimMesh("level/phys_"+trkmesh$)
If physmesh<>0
For i=1 To CountChildren(physmesh)
child=GetChild(physmesh,i)
DebugLog CountTriangles(child)
obj.phisobject = New phisObject
obj\mesh=CopyMesh(child)
PositionEntity obj\mesh,EntityX(child),EntityY(child),EntityZ(chi ld)
obj\phismesh = BodyCreateHull(obj\mesh,10)
phBodySetPos(obj\phismesh,EntityX(obj\mesh),Entity Y(obj\mesh),EntityZ(obj\mesh))
phBodySetEntity(obj\phismesh,obj\mesh)
FreeEntity child
Next
EndIf

Genius 26.02.2008 00:43

Ответ: Проблемка с чайлдами
 
Просто всем физ оъектам в максе даеш имя допустим "PhysOBJ"
И в блице потом делаеш так:
Function RecurseSeek(ent)
tab=tab+4
For i=1 To CountChildren(ent)
child=GetChild(ent,i)
name$=Lower(EntityName(child))
If Instr(name$,"PhysOBJ")
obj.phisobject = New phisObject
obj\mesh=CopyMesh(child)
PositionEntity obj\mesh,EntityX(child),EntityY(child),EntityZ(chi ld)
obj\phismesh = BodyCreateHull(obj\mesh,10)
phBodySetPos(obj\phismesh,EntityX(obj\mesh),Entity Y(obj\mesh),EntityZ(obj\mesh))
phBodySetEntity(obj\phismesh,obj\mesh)
EndIf
Next
tab=tab-4
End Function


physmesh=LoadAnimMesh("level/phys_"+trkmesh$)
RecurseSeek(physmesh)

tormoz 26.02.2008 01:14

Ответ: Проблемка с чайлдами
 
Значит в сцене присутствуют чилды не только кубиков.
Лучше всего отсекать по именам (см. пост выше)

И насколько я помню, из мешей которые являются чилдами нельзя создавать физ тела - они не отцентруются как надо

Если не выйдет, попробуй так:
сначала все чайлды занеси в тип
потом в цикле отпаренть
И только после этого создавай физ тела

LD 26.02.2008 02:02

Спасибо огромное, второй способ прошел )

Вот только да, с центровкой проблемы... ( Они неправильно перенимают позицию и scale... что делать в этом случае? уж очень не хочется расстановщик писать )

Причем что интересно, если делать CopyMesh, то в блице не наследуется скейлинг и сбиваются координаты, но верно обрабатывается физикой, а если делать CopyEntity то скейлинг сохраняется, координаты сбиваются и неверно обрабатывается физикой...

Все таки да, сейчас попробую с чайлда брать трианглы, пересаживать их на свежесозданный мэш, позиционировать его и только потом отдавать физике...

З.Ы. Я не извращенец )

tormoz 26.02.2008 06:26

Ответ: Проблемка с чайлдами
 
Вот так попробуй

Код:

obj.phisobject = New phisObject
obj\mesh=child
mesh=CopyMesh(child)
obj\phismesh = BodyCreateHull(mesh,10)
EntityAlpha mesh,0

phBodySetPos(obj\phismesh,EntityX(obj\mesh,1),EntityY(obj\mesh,1),EntityZ(obj\mesh,1)
phBodySetEntity(obj\phismesh,obj\mesh)


LD 27.02.2008 00:04

Ответ: Проблемка с чайлдами
 
Нет, это тоже не помогает, в данном случае мав на рендере физики... Ну ладно, значит не судьба - буду писать маленький расстановщик объектов )

tormoz 27.02.2008 01:28

Ответ: Проблемка с чайлдами
 
Цитата:

Сообщение от LD (Сообщение 78149)
Нет, это тоже не помогает, в данном случае мав на рендере физики... Ну ладно, значит не судьба - буду писать маленький расстановщик объектов )

Разберись почему МАВ
Все должно работать

LD 27.02.2008 03:21

Ответ: Проблемка с чайлдами
 
Разобрал свою лень, МАВ возникает от phBodySetEntity, ему явно не нравится такое присвоение чайлда, даже если obj\mesh=CopyMesh(Child) все равно МАВ... Все таки буду писать маленький редактор физ объектов ))) Все равно когда нибудь да понадобится...

tormoz 27.02.2008 03:47

Ответ: Проблемка с чайлдами
 
йопть
у тебя там ошибка.
поменяй местами параметры функции:
phBodySetEntity(obj\mesh,obj\phismesh)

moka 27.02.2008 12:28

Ответ: Проблемка с чайлдами
 
LD, заюзай функцию EntityClass, чтобы определить каким типом энтити является объект.
Далее, в 3Д Максе созданный кубик, нужно конвертить в Editable Mesh (правой кнопкой на кубик и там будет).
Тогда экспортируемый кубик будет Мешем.

LD 27.02.2008 14:35

Ответ: Проблемка с чайлдами
 
Ссорь, вчера был не в состоянии проверять код - я сессию вчера закрыл )

И кстати, в функции phBodySetEntity синтаксис - phBodySetEntity(%physbody,%blitzentity), так что все было правильно

tormoz 27.02.2008 20:01

Ответ: Проблемка с чайлдами
 
Цитата:

Сообщение от LD (Сообщение 78186)
Ссорь, вчера был не в состоянии проверять код - я сессию вчера закрыл )

И кстати, в функции phBodySetEntity синтаксис - phBodySetEntity(%physbody,%blitzentity), так что все было правильно

Опечатка в хелпе
pxBodySetEntity(ca\mesh, ca\body)

вот строка из работающего проекта

ох, не заметил, что ты юзаешь ньютон.
Думал что физикс :)
Тогда хз откуда у тебя вылет

moka 28.02.2008 12:09

Ответ: Проблемка с чайлдами
 
Как я уже писал, все модели в Editable Mesh должны быть.
А проверяй на класс объекта, либо ты найдёшь пивот к примеру, и попытаешься его копирнуть как меш =)
Код:

obj\mesh=CopyMesh(child)
obj\phismesh = BodyCreateHull(obj\mesh,10)


tormoz 28.02.2008 20:19

Ответ: Проблемка с чайлдами
 
MoKa
Ну это подразумевалось по умолчанию - парсинг уровня по именам.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot