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

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

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

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 28.08.2011, 03:30   #1
Kornival
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
Spy4433
ПроЭктировщик
 
Аватар для Spy4433
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kornival (28.08.2011)
Старый 28.08.2011, 11:11   #3
Kornival
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
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Столкновение trimesh-to-box

Надо еще отфильтровать их столкновения между собой. См. пример с фильтрацией коллизий.
Или использовать одно большое тело на весь анимированный меш, задав размер вручную через xEntityBodyLocalScale, и, возможно, подкорректировав центр с помощью xEntityBodyLocalPosition.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kornival (28.08.2011)
Старый 28.08.2011, 12:55   #5
Kornival
AnyKey`щик
 
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
Ответ: Столкновение trimesh-to-box

На С++ примеров с физикой вроде нет, а от того что находиться в этих *.bb файлах у меня рябит в глазах. Буду шаманить.
(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 13:33   #6
Kornival
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
Kornival
AnyKey`щик
 
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
Ответ: Столкновение trimesh-to-box

и вопрос в догонку: как проверить соприкасаются ли два объекта?
(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 19:40   #8
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 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
Kornival
AnyKey`щик
 
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
Ответ: Столкновение trimesh-to-box

xMeshesBBIntersect
xMeshesIntersect
По-моему эти функции детектируют пересечение объектов, а у меня им не дают пересекаться физ. тела и мне нужно знать соприкасаются ли объекты(или физ. тела).
(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 22:06   #10
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Столкновение trimesh-to-box

кстати, мешинтерсект крайне медленный, так что будьте аккуратны.
(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 22:58   #11
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Столкновение trimesh-to-box

/xors3d/docs/html/group__px__contacts.html
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kornival (28.08.2011)
Старый 28.08.2011, 22:59   #12
Kornival
AnyKey`щик
 
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
Ответ: Столкновение trimesh-to-box

UP
На данный момент актуально 2 вопроса:
1) Как привязать одно физ. тело к другому
2) Как узнать соприкосается ли одно физ. тело с другим(например находится ли кубик на полу)
(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 23:07   #13
Kornival
AnyKey`щик
 
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
Ответ: Столкновение trimesh-to-box

/xors3d/docs/html/group__px__contacts.html
Спасибо. Вопрос с привязкой объектов снят. Остался второй.
(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 23:07   #14
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Столкновение trimesh-to-box

Проще скачать Блитц, и глянуть примеры.
В ближайшей ревизии примеры на С++ не появятся. Увы.

UPD. По-моему я дал ответ как раз на второй вопрос.
А привязка происходит автоматически про добавлении тела (xEntityAdd***Shape), либо xEntityAttachBody. В документации все есть.
__________________

(Offline)
 
Ответить с цитированием
Старый 28.08.2011, 23:25   #15
Kornival
AnyKey`щик
 
Регистрация: 28.08.2011
Сообщений: 11
Написано одно полезное сообщение
Ответ: Столкновение trimesh-to-box

Проще скачать Блитц, и глянуть примеры.
Blitz3d? Очень нехочется разбираться с еще одним двигом/ЯПом =(
UPD. По-моему я дал ответ как раз на второй вопрос.
Ааа, вот оно что, я почему-то по ошибке раздел про сочленения открыл :D
А привязка происходит автоматически про добавлении тела (xEntityAdd***Shape), либо xEntityAttachBody. В документации все есть.
Ну это вроде привязка физ. тела к объекту, а мне нужно привязать одно физ. тело к другому, или сделать одно дочерним другого. Вот так как-то.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


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