|
Xors3D Графический движок с поддержкой DirectX9 |
28.08.2011, 03:30
|
#1
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Столкновение trimesh-to-box
Не происходит столкновение тримеша с боксом, бокс просто проходит сквозь него. Код:
#include <xors3d.h>
#include <iostream>
#include <math.h>
int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR commandLine, int commandShow)
{
xGraphics3D(800, 600, 32, false, true);
int camera = xCreateCamera();
xPositionEntity(camera, 0, 10, -40);
int floor = xCreateCube();
xScaleEntity(floor,15,1,15);
int hazar = xLoadAnimMesh("../../../media/Meshes/hazar.b3d");
xPositionEntity(hazar,0,5,0);
xEntityType(hazar,1,true);
xEntityAddTriMeshShape(floor);
xEntityAddBoxShape(hazar,1);
while(!xKeyDown(KEY_ESCAPE))
{
xUpdateWorld(2);
xRenderWorld(2);
xFlip();
}
return 0;
}
|
Если xEntityAddTriMeshShape(floor) заменить на xEntityAddBoxShape(hazar,0) или грузить неанимированную модель(xLoadMesh), то все работает отлично. Подскажите пожалуйста в чем моя ошибка.
Последний раз редактировалось Kornival, 28.08.2011 в 12:46.
|
(Offline)
|
|
28.08.2011, 09:46
|
#2
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Столкновение trimesh-to-box
Ну наверное просто для animmesh нужно физ тело делать для каждого child
xFindchild
xCountChildren
xGetChild
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.08.2011, 11:11
|
#3
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
Сообщение от Spy4433
Ну наверное просто для animmesh нужно физ тело делать для каждого child
|
Ну вообщето-да, но дело в том, что строка xEntityType(hazar,1,true) по идее должна была решить эту проблему. По крайней мере она заставляет работать коллизии box-to-box(иначе не работали). Если назначить каждому child`у свое физ. тело коллизии работают прекрасно, но сами child`ы при старте отскакивают друг от друга. Я делаю так:
for(int i = 0; i < xCountChildren(hazar); i++)
xEntityAddBoxShape(xGetChild(hazar,i),10);
|
|
(Offline)
|
|
28.08.2011, 12:46
|
#4
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Столкновение trimesh-to-box
Надо еще отфильтровать их столкновения между собой. См. пример с фильтрацией коллизий.
Или использовать одно большое тело на весь анимированный меш, задав размер вручную через xEntityBodyLocalScale, и, возможно, подкорректировав центр с помощью xEntityBodyLocalPosition.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.08.2011, 12:55
|
#5
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
На С++ примеров с физикой вроде нет, а от того что находиться в этих *.bb файлах у меня рябит в глазах. Буду шаманить.
|
(Offline)
|
|
28.08.2011, 13:33
|
#6
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
Таак, все почти получилось:
for(int i = 0; i < xCountChildren(hazar); i++)
{
xEntityAddBoxShape(xGetChild(hazar,i),10);
xEntitySetCollisionGroup(xGetChild(cube,i),2);
}
xPhysicsSetCollisionFilter(2,2,0);
|
Но меч(xGetChild(hazar,1)) выпадает из рук хазара(xGetChild(hazar,0)). Можно ли как-то привязать физ. тело xGetChild(hazar,1) к xGetChild(hazar,0)?
|
(Offline)
|
|
28.08.2011, 18:32
|
#7
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
и вопрос в догонку: как проверить соприкасаются ли два объекта?
|
(Offline)
|
|
28.08.2011, 19:40
|
#8
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Столкновение trimesh-to-box
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
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
|
Может этим?
Еще есть xCollisionX,xCollisionY,z,nx,ny,nz и т.д.
|
(Offline)
|
|
28.08.2011, 20:05
|
#9
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
По-моему эти функции детектируют пересечение объектов, а у меня им не дают пересекаться физ. тела и мне нужно знать соприкасаются ли объекты(или физ. тела).
|
(Offline)
|
|
28.08.2011, 22:06
|
#10
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Столкновение trimesh-to-box
кстати, мешинтерсект крайне медленный, так что будьте аккуратны.
|
(Offline)
|
|
28.08.2011, 22:58
|
#11
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Столкновение trimesh-to-box
/xors3d/docs/html/group__px__contacts.html
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.08.2011, 22:59
|
#12
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
UP
На данный момент актуально 2 вопроса:
1) Как привязать одно физ. тело к другому
2) Как узнать соприкосается ли одно физ. тело с другим(например находится ли кубик на полу)
|
(Offline)
|
|
28.08.2011, 23:07
|
#13
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
/xors3d/docs/html/group__px__contacts.html
|
Спасибо. Вопрос с привязкой объектов снят. Остался второй.
|
(Offline)
|
|
28.08.2011, 23:07
|
#14
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Столкновение trimesh-to-box
Проще скачать Блитц, и глянуть примеры.
В ближайшей ревизии примеры на С++ не появятся. Увы.
UPD. По-моему я дал ответ как раз на второй вопрос.
А привязка происходит автоматически про добавлении тела (xEntityAdd***Shape), либо xEntityAttachBody. В документации все есть.
__________________
|
(Offline)
|
|
28.08.2011, 23:25
|
#15
|
AnyKey`щик
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
|
Ответ: Столкновение trimesh-to-box
Проще скачать Блитц, и глянуть примеры.
|
Blitz3d? Очень нехочется разбираться с еще одним двигом/ЯПом =(
UPD. По-моему я дал ответ как раз на второй вопрос.
|
Ааа, вот оно что, я почему-то по ошибке раздел про сочленения открыл :D
А привязка происходит автоматически про добавлении тела (xEntityAdd***Shape), либо xEntityAttachBody. В документации все есть.
|
Ну это вроде привязка физ. тела к объекту, а мне нужно привязать одно физ. тело к другому, или сделать одно дочерним другого. Вот так как-то.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:27.
|