Segfault при вызове getWorldTransform на btRigidBody в движке физики пульC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Segfault при вызове getWorldTransform на btRigidBody в движке физики пуль

Сообщение Anonymous »

Я пытаюсь добавить движок физики пуль в свой проект Vulkan.
Я создаю куб (коробку в пуле) вот так

Код: Выделить всё

btRigidBody* createBox(float x, float y, float z, float mass) {
btTransform t;
t.setIdentity();
t.setOrigin(btVector3(x, y, z));
btBoxShape* box = new btBoxShape(btVector3(0.5, 0.5, 0.5));
btMotionState* motion = new btDefaultMotionState(t);
btVector3 inertia(0, 0, 0);
if (mass != 0.0) {
box->calculateLocalInertia(mass, inertia);
}
btRigidBody::btRigidBodyConstructionInfo rbinfo(mass, motion, box);
btRigidBody* rigidBody = new btRigidBody(rbinfo);
world->addRigidBody(rigidBody);
bodies.push_back(rigidBody);
return rigidBody;
}
— это вектор твердых тел для рендеринга.
также я создаю плоскость

Код: Выделить всё

btTransform t;
t.setIdentity();
t.setOrigin(btVector3(0.0, 0.0, 0.0));
btStaticPlaneShape* plane = new btStaticPlaneShape(btVector3(0, 1, 0), 0);

btMotionState* motion = new btDefaultMotionState(t);

btRigidBody::btRigidBodyConstructionInfo rbinfo(0.0, motion, plane);
btRigidBody* rigidBody = new btRigidBody(rbinfo);

world->addRigidBody(rigidBody);
обратите внимание, что я не добавляю плоскость к телам, потому что не хочу, чтобы она отображалась.
я обновляю мир вот так

Код: Выделить всё

static auto start = std::chrono::high_resolution_clock::now();
float iTime = std::chrono::duration(std::chrono::high_resolution_clock::now() - start).count();
world->stepSimulation(iTime);
а затем я хочу получить текущую матрицу преобразования твердого тела, чтобы применить ее в вершинном шейдере.

Код: Выделить всё

void getBoxMat(btRigidBody* body, glm::mat4& rmat) {
btTransform t;
if (body == nullptr) return;
if (body->getMotionState() == nullptr) return;
body->getMotionState()->getWorldTransform(t);
float mat[16];
t.getOpenGLMatrix(mat);
rmat = glm::make_mat4(mat);
rmat[1][1] *= -1;
}
но когда я запускаю следующий код, он вызывает ошибку при вызове getWorldTransform(t) в функции getBoxMat. я использую последнюю версию Bullet 3.25. что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ics-engine
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка при применении физики в LWJGL 2.9.1
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Какие методы я могу использовать для мягкой физики тела на шаре
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • MMAP с фиксированным адресом MMAP CALL SEGFAULT при вызове из MAIN, но работает внутри Custom Malloc переопределение в C
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Segfault при вызове функций OpenGL из другого файла
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Segfault при вызове функций OpenGL из другого файла
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»