|
Xors3D Графический движок с поддержкой DirectX9 |
15.02.2012, 21:40
|
#106
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Вопросы про Xors3D
Направление оси по которой у тебя колесо смещается. То бишь вектор который смотрит в том же направлении. А нулевой вектор параллелен любому, поэтому оно и смещается куда хочет, наверно.
|
(Offline)
|
|
16.02.2012, 00:02
|
#107
|
ПроЭктировщик
Регистрация: 11.11.2008
Адрес: Тольятти
Сообщений: 153
Написано 10 полезных сообщений (для 24 пользователей)
|
Ответ: Вопросы про 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, то все нормально, но мне не нужен такой вариант.
|
(Offline)
|
|
16.02.2012, 19:57
|
#108
|
Оператор ЭВМ
Регистрация: 16.01.2012
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы про 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, то всё работает.
|
(Offline)
|
|
16.02.2012, 21:17
|
#109
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Вопросы про Xors3D
А не проще добавить машинке и кубику физическую форму и не маяться херней? Ведь в итоге если получится, то получится тоже самое и не факт, что быстрей или хотя бы лучше.
|
(Offline)
|
|
16.02.2012, 21:38
|
#110
|
Оператор ЭВМ
Регистрация: 16.01.2012
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы про Xors3D
не. мне надо только просчитать, что они пересеклись, без использования физической модели.
|
(Offline)
|
|
16.02.2012, 22:46
|
#111
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Вопросы про 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
|
Читай справку. Да?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.02.2012, 10:14
|
#112
|
Оператор ЭВМ
Регистрация: 16.01.2012
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы про Xors3D
хм, за это спасибо. не знал.
хотя проблема моя решилась поворотом объектов на 180 градусов.
|
(Offline)
|
|
23.02.2012, 22:03
|
#113
|
Оператор ЭВМ
Регистрация: 16.01.2012
Сообщений: 30
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Вопросы про 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). Но мне кажется, что в этом случае программа загружается дольше, чем должна. Можно как-то оптимизировать код?
|
(Offline)
|
|
10.03.2012, 15:18
|
#114
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопросы про 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 аним_моделями в чистом блитзе с большими тормозами.
|
(Offline)
|
|
12.03.2012, 14:51
|
#115
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Вопросы про Xors3D
FastExt тени не имеют ничего общего к Xors3d.
Встроенные тени работают, но хз как там с PSSM.
Советую писать их самому - так будет больше контроля. Да и опыту наберёшься.
|
(Offline)
|
|
13.03.2012, 16:08
|
#116
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопросы про Xors3D
Я имел в виду, что FastExt тени мне нравятся (и работают на слабых системах) - жаль что Xors3D с ними не совместим.
|
(Offline)
|
|
13.03.2012, 19:29
|
#117
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Вопросы про Xors3D
Потому что эти тени реализованы на древнейшей технологии, которая кстати в новых устройствах, потихоньку выпиливается.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.06.2012, 18:57
|
#118
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Вопросы про Xors3D
возник вопрос про чилды и их пивот
допустим есть модель.. разбираем на чилды
и вот мне надо как то крутить чилд по своей оси.. а пивот находится там же где и центр модели, флаг глобал и тд не помогает , есть ли возможность как то меня центр чилда средствами xors3d?
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
09.06.2012, 00:14
|
#119
|
Знающий
Регистрация: 29.11.2010
Сообщений: 244
Написано 31 полезных сообщений (для 49 пользователей)
|
Ответ: Вопросы про Xors3D
может трансформация мира координат поможет (xTForm)? хотя скорее всего Я не совсем понял вопрос
__________________
Intel Core i3-4005U (1.7 ГГц), 4 ГБ ОЗУ, nVidia GeForce 940M 4 ГБ, Win8.1
|
(Offline)
|
|
09.06.2012, 03:41
|
#120
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Вопросы про Xors3D
Если знаешь где центр чилда должен быть, то примени MoveMesh на этот чилд чтобы подвинуть в центр модели, а затем MoveEntity чтобы подвинуть этот чайлд на нужное положение где он находился прежде.
Таким образом сместишь все данные установив центр, и поставишь обратно чайлд где он был.
Либо если есть исходник модели - ты что-то намудрил с экспортом конкретно.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:49.
|