2014-06-16 2 views
1

Я использую физики Bullet Engine загрузить OBJ модель в мире, используя btGImpactMeshShape .. Я очень новый, используя этот двигательИспользование Bullet Physics для загрузки OBJ модели для btGImpactMeshShape, но результат не так

Вот мой код

//---------------------------------------// 

//   load from obj    // 

//---------------------------------------// 

ConvexDecomposition::WavefrontObj wobj; 
printf("load first try"); fflush(stdout); 
std::string filename("bunny.obj"); 
int result = wobj.loadObj("bunny.obj"); 
if(!result) 
{ 
printf("first try fail\n"); fflush(stdout); 
printf("load second try"); fflush(stdout); 
result = wobj.loadObj("../bunny.obj"); 
} 

printf("--load status %d\n", result); 
printf("--triangle: %d\n", wobj.mTriCount); 
printf("--vertex: %d\n", wobj.mVertexCount); 


btTriangleIndexVertexArray* colonVertexArrays = new btTriangleIndexVertexArray(
wobj.mTriCount, 
wobj.mIndices, 
       3*sizeof(int), 
       wobj.mVertexCount, 
       wobj.mVertices, 
       3*sizeof(float) 
       ); 

btGImpactMeshShape* bunnymesh = new btGImpactMeshShape(colonVertexArrays); 
bunnymesh ->setLocalScaling(btVector3(0.5f, 0.5f, 0.5f)); 
bunnymesh ->updateBound(); 
startTransform.setOrigin(btVector3(0.0, 0.0, 0.0)); 
startTransform.getBasis().setEulerZYX(0, 0, 0); 
localCreateRigidBody(bunnymesh , startTransform, 0.0); 
printf("Load done...\n"); 

Здесь в модели, которую я нагруженной .............. этот кролик был просмотрен с помощью MeshLab на MAC

original bunny model viewed by Meshlab

Я попытался изменить различные параметры Stride, однако это результат из моей программы

using bullet to view Bunny Console output

Есть ли у вас какие-либо предложения, что не так с кодом?

ответ

0

Не wobj.mVertices указатель на двойной массив? btTriangleIndexVertexArray ожидает указатель на поплавок, так что вам придется создать новый массив с плавающей точкой и копировать и отбрасывать вершины в.

+0

Спасибо за ваше предложение. Однако как я могу установить указатель на float. Проблема связана с моей моделью? или мне нужно изменить какие-либо части моего кода. – MooMoo

0

имен блендера его индексы, начиная с 1, а Bullet Physics начинается с 0. В качестве иллюстрации здесь ниже кубической сетки, экспортируемой из Blender, затем отображается как btGImpactMeshShape и 3 куба, отображаемых как btBoxShape. Также ниже, как вершины и индексы для btTriangleIndexVertexArray должны выглядеть так, чтобы кубическая сетка правильно отображалась в Bullet Physics как btGImpactMeshShape. Более подробную информацию, нажмите на ссылку, чтобы увидеть подобную нить на Bullet Physics forum.

Чтобы узнать больше о btTriangleIndexVertexArray и btGImpactMeshShape, а также увидеть в Bullet Physics SDK GimpactTestDemo который демонстрирует тор и ... Standford кролика.

const int NUMBER_VERTICES = 8; 
const int NUMBER_TRIANGLES = 12; 

static float cubeVertices[NUMBER_VERTICES * 3] = { 
    1.000000, -1.000000, -1.000000, 
    1.000000, -1.000000, 1.000000, 
    -1.000000, -1.000000, 1.000000, 
    -1.000000, -1.000000, -1.000000, 
    1.000000, 1.000000, -0.999999, 
    0.999999, 1.000000, 1.000001, 
    -1.000000, 1.000000, 1.000000, 
    -1.000000, 1.000000, -1.000000 
}; 

static int cubeIndices[NUMBER_TRIANGLES][3] = { 
    { 1, 3, 0 }, 
    { 7, 5, 4 }, 
    { 4, 1, 0 }, 
    { 5, 2, 1 }, 
    { 2, 7, 3 }, 
    { 0, 7, 4 }, 
    { 1, 2, 3 }, 
    { 7, 6, 5 }, 
    { 4, 5, 1 }, 
    { 5, 6, 2 }, 
    { 2, 6, 7 }, 
    { 0, 3, 7 } 
}; 

enter image description here