forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Вопросы про Xors3D (http://forum.boolean.name/showthread.php?t=15605)

dsd 15.02.2012 21:40

Ответ: Вопросы про Xors3D
 
Направление оси по которой у тебя колесо смещается. То бишь вектор который смотрит в том же направлении. А нулевой вектор параллелен любому, поэтому оно и смещается куда хочет, наверно.

Sashka007 16.02.2012 00:02

Ответ: Вопросы про Xors3D
 
Всем привет, подскажите пожалуйста, у меня неадекватно работают коллизии:

For i=1 To 30 Step 2
sta.map = New map
sta\mesh=xCopyEntity(map_l)
xPositionEntity sta\mesh,0,(-xMeshHeight(sta\mesh)+19.7)*i,0
xEntityColor sta\mesh,255/((i+1)/3),255/((i+1)/3),255/((i+1)/3)
xEntityType sta\mesh,2
sta\dist=340
Next

For i=0 To 30 Step 2
sta.map = New map
sta\mesh=xCopyEntity(map_r)
xPositionEntity sta\mesh,0,(-xMeshHeight(sta\mesh)+19.7)*i,0
xEntityColor sta\mesh,255/((i+1)/3),255/((i+1)/3),255/((i+1)/3)
xEntityType sta\mesh,2
sta\dist=340
Next

Где то они работают, где то тело сквозь проходит, где то наполовину входит в другое. Кстати если xCopyEntity заменить на xCopyMesh и также xPositionEntity на xPositionMesh, то все нормально, но мне не нужен такой вариант.

Krep_Kospit 16.02.2012 19:57

Ответ: Вопросы про Xors3D
 
Нужно просчитать пересечения куба и машинки.
поставил:
Код:

        xEntityPickMode tank\center_cube,3
        xEntityPickMode tank\model,3, 0, True

далее просчитываю(внедряю второй цикл):

Код:

For tankE.tank = Each tank ;CHooSER
                        If Not tank\model=tankE\model Then
               
                        If xEntityPick(tank\center_cube, 10)=tankE\model  Then End
                     
                        EndIf
                Next

результата нет. если же делаю xEntityPick(tank\center_cube, 10)>0, то всё работает.

dsd 16.02.2012 21:17

Ответ: Вопросы про Xors3D
 
А не проще добавить машинке и кубику физическую форму и не маяться херней? Ведь в итоге если получится, то получится тоже самое и не факт, что быстрей или хотя бы лучше.

Krep_Kospit 16.02.2012 21:38

Ответ: Вопросы про Xors3D
 
не. мне надо только просчитать, что они пересеклись, без использования физической модели.

dsd 16.02.2012 22:46

Ответ: Вопросы про Xors3D
 
Цитата:

Код:

BBDECL int BBCALL xMeshesIntersect  ( Entity *  entity1, 
  Entity *  entity2 
 ) 

Returns true if the specified meshes are currently intersecting.

Parameters:
entity1 First entity handle 
entity2 Second entity handle 

BBDECL int BBCALL xMeshesBBIntersect  ( Entity *  entity1, 
  Entity *  entity2 
 ) 

Returns true if the specified meshes bounding boxes are currently intersecting.

Deprecated:
Use xEntitiesBBIntersect() instead.
Parameters:
entity1 First entity handle 
entity2 Second entity handle


Читай справку. Да?

Krep_Kospit 17.02.2012 10:14

Ответ: Вопросы про Xors3D
 
хм, за это спасибо. не знал.
хотя проблема моя решилась поворотом объектов на 180 градусов.

Krep_Kospit 23.02.2012 22:03

Ответ: Вопросы про Xors3D
 
такой вопрос... создаю машинки:

Код:

;;;;FIRST CAR
first_car=xLoadAnimMesh("models\first_car.fbx")
xhideentity first_car
Global logoTexture = xLoadTexture("\textures\first_car_tex.jpg")
CreateTank(first_car,  logoTexture, Rand(-200,300),40,Rand(-200,300), 1, 10, 2500, 20, 40,10)
For i=0 To 5
        CreateTank(first_car,  logoTexture, Rand(-200,300),40,Rand(-200,300), 0, 10, 2500, 20, 40,10)
Next
;;;;FIRST CAR

сама функция:

Код:

Function CreateTank(model, textureT,x#,y#,z#, is_player, hp,  max_speed, step_speed, max_rotate_wheels,steer_step)
       
;create tank
        ;[Block]
        tank.tank= New tank
        tank\model = model
        xEntityTexture tank\model, textureT
        xPositionEntity(tank\model, x,y,z, True)
        xEntityAddBoxShape tank\model,        300, 20,21,49
        tank\is_player=is_player
        tank\hp=hp
       
;VEHICLE
        xEntityCreateVehicle(tank\model)
        xEntityDisableSleeping(tank\model)
        tank\max_speed = max_speed
        tank\step_speed = step_speed
        tank\cur_speed = 0
        tank\max_rotate_wheels = max_rotate_wheels
        tank\steer_step = steer_step
;VEHICLE end
       
       
        ;0 - pivot for hand
        ;1 - hand
        ;2 - pivot for weapon
        ;3 - weapon
        ;LEFT_HAND START
        tank\left_weapon[0] = xFindChild(tank\model, "pivot2")
        tank\left_weapon[1] = xLoadAnimMesh("models\hand.fbx")
       
        xExtractAnimSeq tank\left_weapon[1], 0,100
        xExtractAnimSeq tank\left_weapon[1], 100,200
       
        ;weapon
        tank\left_weapon[3] = xLoadAnimMesh("models\axe.fbx")
        tank\left_weapon[2] = xFindChild(tank\left_weapon[1], "Box001")
        xPositionEntity (tank\left_weapon[3], xentityx(tank\left_weapon[2]), xentityy(tank\left_weapon[2]),xentityz(tank\left_weapon[2]))
        xentityparent (tank\left_weapon[3], tank\left_weapon[2])
        ;weapon end
        xScaleEntity tank\left_weapon[0], 1,1,1
        xEntityParent (tank\left_weapon[2],xFindChild(tank\left_weapon[1], "bone004"))
        xEntityParent (tank\left_weapon[1], tank\left_weapon[0], False)
        xEntityTexture tank\left_weapon[0], logoTexture
        ;LEFT_HAND End
       
        ;Right_HAND START
        tank\Right_weapon[0] = xFindChild(tank\model, "pivot1")
        tank\Right_weapon[1] = xLoadAnimMesh("models\hand.fbx")
       
        xExtractAnimSeq tank\right_weapon[1], 0,100
        xExtractAnimSeq tank\right_weapon[1], 200,300
       
       
        ;weapon
        tank\Right_weapon[3] = xLoadAnimMesh("models\axe.fbx")
        tank\Right_weapon[2] = xFindChild(tank\Right_weapon[1], "Box001")
        xPositionEntity (tank\Right_weapon[3], xentityx(tank\Right_weapon[2]), xentityy(tank\Right_weapon[2]),xentityz(tank\Right_weapon[2]))
        xentityparent (tank\Right_weapon[3], tank\Right_weapon[2])
        ;weapon end
        xScaleEntity tank\Right_weapon[0], 1,1,1
        xEntityParent (tank\Right_weapon[2],xFindChild(tank\Right_weapon[1], "bone004"))
        xEntityParent (tank\Right_weapon[1], tank\Right_weapon[0], False)
        xEntityTexture tank\Right_weapon[0], logoTexture
        ;Right_HAND End
       
       
       
        tank\target=0
        number=number+1
        tank\cur_number = number
       
        ;CUBE
        ;[Block]
        ;0 - left
        ;1 - right
        ;2 - center
        ;3 - first
        tank\cube[2]=xcreatecube()
        xEntityParent (tank\cube[2],tank\model, False)
        xPositionEntity (tank\cube[2], xentityx(tank\model), xentityy(tank\model),xentityz(tank\model)-35, True)
        xscaleentity tank\cube[2], 1,1,1
        xentityalpha tank\cube[2],0;.3
       
        tank\cube[0]=xcreatecube()
        xPositionEntity tank\cube[0], xentityx(tank\model)+20, xentityy(tank\model),xentityz(tank\model)-35
        xEntityParent tank\cube[0],tank\model
        xscaleentity tank\cube[0], 1,1,1
        xentityalpha tank\cube[0],0;.3
       
        tank\cube[1]=xcreatecube()
        xPositionEntity tank\cube[1], xentityx(tank\model)-20, xentityy(tank\model),xentityz(tank\model)-35
        xEntityParent tank\cube[1],tank\model
        xscaleentity tank\cube[1], 1,1,1
        xentityalpha tank\cube[1],0;.3
       
        tank\cube[3]=xcreatecube()
        xPositionEntity tank\cube[3], xentityx(tank\model), xentityy(tank\model),xentityz(tank\model)-55
        xEntityParent tank\cube[3],tank\model
        xscaleentity tank\cube[3], 1,1,1
        xentityalpha tank\cube[3],0;.3
       
        ;[End Block]
       
        tank\b=xcreatecube();pick
        xscaleentity tank\b, 12,6,17;12,6,25
        xEntityParent tank\b,tank\model,False
        xPositionEntity (tank\b, xentityx(tank\model), xentityy(tank\model),xentityz(tank\model), True)
        xentityalpha tank\b,0;.3
        xEntityPickMode tank\b,3
       
        ;[End Block]
;CREATE WHEELS
        ;[Block]
       
        For l = 0 To 5
                wheel.wheel = New wheel
               
                If l=5 Then wheel\entity = xFindChild(tank\model, "wheel5")
                If l=3 Then wheel\entity = xFindChild(tank\model, "wheel3")
                If l=1 Then wheel\entity = xFindChild(tank\model, "wheel1")
                If l=4 Then wheel\entity = xFindChild(tank\model, "wheel4")
                If l=2 Then wheel\entity = xFindChild(tank\model, "wheel2")
                If l=0 Then wheel\entity = xFindChild(tank\model, "wheel0")
               
                xEntityParent wheel\entity, tank\model
               
                xEntityTexture wheel\entity, wheelT
            wheel\max_Rotation = 15000
                xEntityAddWheel(tank\model, wheel\entity)
                xEntityWheelSetConnectionPoint(tank\model, l, xEntityX(wheel\entity), xEntityY(wheel\entity), xEntityZ(wheel\entity))
                xEntityWheelSetAxle(tank\model, l, -1.0, 0.0, 0.0)
                xEntityWheelSetRadius(tank\model, l, 1.0)
                xEntityWheelSetMaxSuspensionForce(tank\model, l, wheel\max_Rotation)
                xEntityWheelSetSuspensionLength(tank\model, l, 1.5)
                xEntityWheelSetSuspensionStiffness(tank\model, l, 3.8)
                xEntityWheelSetSuspensionDamping(tank\model, l,2.22)
                xEntityWheelSetSuspensionCompression(tank\model,l, 0.3)
                xEntityWheelSetFriction(tank\model, l, 300)
                xEntityWheelSetRollInfluence(tank\model, l, 0.18);
        Next
        ;[End Block]
;CREATE WHEELS END
; tank creation end
        SeedRnd xmillisecs()
End Function

получаю в итоге: все создаваемые машины появляются в одной и той же точке. Это решается, если вместо tank\model = model пишу tank\model = xCopyEntity(model). Но мне кажется, что в этом случае программа загружается дольше, чем должна. Можно как-то оптимизировать код?

LLI.T.A.L.K.E.R. 10.03.2012 15:18

Ответ: Вопросы про Xors3D
 
Само-ответ: хотя ладно, сделаю опцию Тени вкл./откл. Всё равно на слабых системах их бессмысленно нагружать.

Кроме PSSM теней в Xors3D других нет?
А то с PSSM у меня на нетбуке MAV указывает на строку в файле xors3d.bb
Цитата:

xRenderWorld_(tween#, renderShadows%)
Когда отключаю лампочки - стандартный пример shadows.bb запускается.

Ещё есть тени на FastExt, а "так же" ProShadows - но они завязаны на FastExt либе, которой нужна инициализация Graphics3D... Но на Xors3D ведь задаётся xGraphics3D - в этом и не связываются вещи.

(как и на Blitz3Dx9 - команда bGraphics3D - туда тоже дополнительные либы не прикрутить)


Придётся использовать чистый Blit3D с FastExt.. Пока самый лучший для меня вариант на счёт теней.

ЗЫ: Но всё же сравнил скорость отрисовки на Blitz3Dx9 и Blitz3D с 1500 подвижными ящиками - DX9 быстрей в 1.5~2 раза.
Пример Xors3D army.bb тоже нормально двигается, не то что с 4-6 аним_моделями в чистом блитзе с большими тормозами.

moka 12.03.2012 14:51

Ответ: Вопросы про Xors3D
 
FastExt тени не имеют ничего общего к Xors3d.
Встроенные тени работают, но хз как там с PSSM.
Советую писать их самому - так будет больше контроля. Да и опыту наберёшься.

LLI.T.A.L.K.E.R. 13.03.2012 16:08

Ответ: Вопросы про Xors3D
 
Я имел в виду, что FastExt тени мне нравятся (и работают на слабых системах) - жаль что Xors3D с ними не совместим.

moka 13.03.2012 19:29

Ответ: Вопросы про Xors3D
 
Потому что эти тени реализованы на древнейшей технологии, которая кстати в новых устройствах, потихоньку выпиливается.

Spy4433 08.06.2012 18:57

Ответ: Вопросы про Xors3D
 
возник вопрос про чилды и их пивот

допустим есть модель.. :) разбираем на чилды
и вот мне надо как то крутить чилд по своей оси.. а пивот находится там же где и центр модели, флаг глобал и тд не помогает , есть ли возможность как то меня центр чилда средствами xors3d?

ANIK123 09.06.2012 00:14

Ответ: Вопросы про Xors3D
 
может трансформация мира координат поможет (xTForm)? хотя скорее всего Я не совсем понял вопрос -_-

moka 09.06.2012 03:41

Ответ: Вопросы про Xors3D
 
Если знаешь где центр чилда должен быть, то примени MoveMesh на этот чилд чтобы подвинуть в центр модели, а затем MoveEntity чтобы подвинуть этот чайлд на нужное положение где он находился прежде.
Таким образом сместишь все данные установив центр, и поставишь обратно чайлд где он был.
Либо если есть исходник модели - ты что-то намудрил с экспортом конкретно.


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

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