Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Lilim
6 / 6 / 0
Регистрация: 24.12.2011
Сообщений: 53
#1

Трение и Bullet - C++

28.11.2015, 17:34. Просмотров 297. Ответов 0
Метки нет (Все метки)

Возникла проблема с трением Кинетического тела.


Исходные условия таковы:

Имеется большая сфера (к примеру R=1000) символизирующая планету. На небольшом расстоянии от её поверхности (100) помещено динамическое тело – куб небольшой массы. Вектор гравитации определяю сам с таким расчетом, что на поверхности сила притяжения равна земной. Сама планета как btCollisionShape не является сферой, а разбита на прямоугольные области-чанки которые и задаются фигурами столкновения. Так же планета вращается вокруг своей оси.


Что я хочу получить:

Куб под действием силы притяжения падает на вращающуюся планету, пару раз кувыркается и прикованный гравитацией вращается вмести с ней лежа на её поверхности.


Что я имею:

Куб падает, подскакивает и под действием гравитации остаётся в контакте с поверхностью но не вращается вместе с ней вокруг оси планеты. Это выглядит как будто планета «проезжает» под кубом не вступая с ним в зацепление за счет трения.(Вспомнился анекдот – «Если земля действительно вертится то мой дом должен проехать где-то рядом»)


Теперь код:

C++
1
2
3
4
5
6
7
8
9
10
11
// Инициализация мира
m_pCollisionConfiguration = new btDefaultCollisionConfiguration();
m_pCollisionDispatcher = new btCollisionDispatcher(m_pCollisionConfiguration);
m_pBroadphase = new btDbvtBroadphase();
m_Solver = new btSequentialImpulseConstraintSolver();
m_pWorld = new btDiscreteDynamicsWorld( m_pCollisionDispatcher, 
                        m_pBroadphase, 
                        m_Solver, m_pCollisionConfiguration);
/*m_pWorld->getSolverInfo().m_solverMode |=
SOLVER_USE_2_FRICTION_DIRECTIONS|SOLVER_RANDMIZE_ORDER;*/ // нашел в одном из примеров но не помогло
m_pWorld->setGravity( btVector3(0.0, 0.0, 0.0) );
C++
1
2
3
4
5
6
7
8
9
10
11
// Создание куба
btCollisionShape* shape = new btBoxShape( btVector3(5.0,5.0,5.0) );
btVector3 localInertia(0,0,0);
float mass = (float)m_designs.size();//каждая конструкция весит по одной единицы массы
shape->calculateLocalInertia(mass,localInertia);
btRigidBody::btRigidBodyConstructionInfo info(mass, nullptr, shape, localInertia);
info.m_friction = btScalar(0.5);
info.m_rollingFriction = btScalar(0.3);
info.m_restitution = 0.5f;
m_physic_object= new btRigidBody(info);
m_physic_object->forceActivationState(DISABLE_DEACTIVATION);
C++
1
2
3
4
5
6
7
8
9
10
//Так я добавляю новые чанки-поверхности планеты
btRigidBody* ptr_body = new btRigidBody(0,nullptr,new_obj->ptr_shape);
ptr_body->setWorldTransform( btTransform(new_obj->basis_quat, new_obj->pos_surface) );
ptr_body->setCollisionFlags(btCollisionObject::CF_KINEMATIC_OBJECT);
ptr_body->setFriction(80.0f); // Явно перебор но я в отчаяние
ptr_body->setRollingFriction(50.0f);
ptr_body->setRestitution(0.5f);
ptr_body->setActivationState(DISABLE_DEACTIVATION);
AddObject(ptr_body);//добавляем твердое тело в физ. мир
m_surfaces.emplace_back(new_obj->ptr_shape, ptr_body);//добавляем пару тело-форма в m_surfaces
C++
1
2
//Планета вертится и так я меняю положение чанков
surface->setCenterOfMassTransform( btTransform(new_basis_quat, new_pos_surface) );
Пробовал разобраться в исходниках Bullet но там все как-то неявно и непонятно где в расчеты вступает трение.
Подскажите кто что знает, помогите кто чем может.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2015, 17:34     Трение и Bullet
Посмотрите здесь:

Bullet Physics - Visual C++
Не могу понять как установить этот физический движок, в инструкции написано что надо его скомпилировать через CMake, потом через Visual...

Сбор библиотеки bullet - C++
Есть проект C++ VS 2013 к которому подключается либа. Вот так вроде бы подключается: #include "BasicDemo.h" #include "GlutStuff.h" ...

Удаление элемента из вектора ( std::vector<Bullet> ) - C++
Здравствуйте! У меня возникла проблема во время удаления элементов, значения которых не удовлетворяли условию. П.С: До того как...

Трение скольжения - Механика
1.почему сила трения при равномерном движении бруска с грузами меньше,чем максимальные показания динамометра в момент перед началом...

Comsol. Трение в шаровом соединении - САПР
Здравствуйте. Пытаюсь обсчитать с виду несложную модель. Имеется консольно закрепленная балка на свободном конце которой расположен...

Myachik.Bullet
http://vladik-myachikov.narod.ru/Bull.htm Абсолютно новый браузер. Кроме того, что представлено на этой странице, там идёт он-лайн...

Bullet Physics Library - Программирование Android
Здравствуйте! Кто знает физический движок Bullet physics? Кто поможет разобраться с ним, скомпилировать и запустить? Ну конечно не...

Трение-скольжение. Какова величина трения в точке? - Механика
Пожалуйста помогоите решить задачку: Нормальное давление твёрдого тела на опорную поверхность в данной точке равно ...

Трение скольжение и верчения при захвате объекта - Механика
Здравствуйте! Представим себе следующее: есть твердое тело прямоугольный формы (например, тетрадь). Берем ее двумя пальцами за край. Если...

Форум Bullet Energy Forum - DLE
Установил форум, вроде все нормально, но есть одна проблема: как убрать точки? вроде везде прописаны: list-style-type: none; ...

Как сделать грамотное трение для мячика (шара) - Unity, Unity3D
Вопрос в том, что насколько можно понять дело в friction(dynamic) для шара. Шар катится по quad у которого стоит Меш-коллайдер без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru