Я использую 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
? Или я делаю что-то еще не так?
Кстати, причина того, что я использую одну и ту же переменную в качестве источника для всех форм треугольников, заключается в том, что эта переменная асинхронно заполняется другим потоком.
Задача ещё не решена.
Других решений пока нет …