Как глубоко скопировать btTriangleMesh в Bullet Physics?

Я использую Bullet Physics и мне нужно скопировать экземпляр btTriangleMesh тип.

// the variable is a class member
btTriangleMesh triangles;

Моя цель — изменить форму столкновения тела на новую форму треугольной сетки. Эта форма должна содержать данные, хранящиеся в настоящее время в triangles переменная, даже если эта переменная изменится в будущем. Поэтому мне нужна глубокая копия.

// in a method change collision shape
btTriangleMesh *copy = new btTriangleMesh(triangles);
btBvhTriangleMeshShape *shape = new btBvhTriangleMeshShape(copy), true, true);
body->setCollisionShape(shape);

// after that, reset variable
triangles = btTriangleMesh();

// change content of variable for next body
// ...

Я хотя экземпляр новой переменной в куче new btTriangleMesh(triangles) будет глубоко копировать объект. Но, как вы можете видеть на изображениях ниже, форма столкновения первого тела зависит от следующего.

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

один кусок с правильной формой столкновения

И вот как это выглядит после вставки другого тела с правой стороны. Форма первого тела изменилась, чтобы соответствовать форме второго тела. Этого не должно быть. На изображении может быть неясно, но в 3D вы определенно видите, что форма первого тела изменилась, чтобы точно соответствовать форме второго.

вставка второго куска нежелательно меняет форму первого

Как глубоко скопировать btTriangleMesh? Или я делаю что-то еще не так?

Кстати, причина того, что я использую одну и ту же переменную в качестве источника для всех форм треугольников, заключается в том, что эта переменная асинхронно заполняется другим потоком.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …