надо коекому кинуть было
ну и другим мож понадобится
#define NOMINMAX
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <string>
#include <sstream>
#include <wchar.h>
#include <math.h>
extern unsigned int BUNNY_NBVERTICES;
extern unsigned int BUNNY_NBFACES;
extern float gBunnyVertices[];
extern int gBunnyTriangles[];
NxTriangleMesh * bunnyTriangleMesh;
NxPhysicsSDK* gPhysicsSDK = NULL;
NxScene* gScene = NULL;
NxActor * blablablabunny;
void CreateBunny(const NxVec3 & pos)
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//генерация PMAP ФАЙЛА
//выдрано из jimon framework 2 :)
NxPMap q3mapPMap;
q3mapPMap.dataSize = 0;
q3mapPMap.data = NULL;
NxTriangleMeshDesc bunnyDesc;
bunnyDesc.numVertices = BUNNY_NBVERTICES;
bunnyDesc.numTriangles = BUNNY_NBFACES;
bunnyDesc.pointStrideBytes = sizeof(NxVec3);
bunnyDesc.triangleStrideBytes = 3*sizeof(NxU32);
bunnyDesc.points = gBunnyVertices;
bunnyDesc.triangles = gBunnyTriangles;
bunnyDesc.flags = 0;
MemoryWriteBuffer buf;
NxCookTriangleMesh(bunnyDesc, buf);
MemoryReadBuffer readBuffer(buf.data);
NxTriangleMesh *q3mapTriangleMesh = gPhysicsSDK->createTriangleMesh(readBuffer);
char * file_name = "bunny.pmap";
std::fstream file(file_name,std::ios::in|std::ios::binary|std::ios::ate);
if (!file.good()) // if the file doesn't exist
{
file.close();
file.clear();
file.open(file_name,std::ios::out|std::ios::binary|std::ios::trunc);
if(NxCreatePMap(q3mapPMap, *q3mapTriangleMesh, 64))
{
// The pmap has successfully been created, save it to disk for later use
if (file.good())
{
file.write((char*)q3mapPMap.data, q3mapPMap.dataSize);
}
//assign pmap to mesh
q3mapTriangleMesh->loadPMap(q3mapPMap);
// sdk created data => sdk deletes it
NxReleasePMap(q3mapPMap);
}
file.close();
}
else
{
// Found pmap file
q3mapPMap.dataSize = file.tellg(); //getFileSize("q3map.pmap");
file.seekg(0,std::ios::beg);
q3mapPMap.data = new NxU8[q3mapPMap.dataSize];
file.read((char*)q3mapPMap.data, q3mapPMap.dataSize);//fread(q3mapPMap.data, q3mapPMap.dataSize, 1, fp);
file.close();
q3mapTriangleMesh->loadPMap(q3mapPMap);
delete [] q3mapPMap.data;
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// создание самого обьекта
//create triangle mesh instance
NxTriangleMeshShapeDesc bunnyShapeDesc;
bunnyShapeDesc.meshData = q3mapTriangleMesh;
bunnyShapeDesc.localPose.t.set(0,0.65f,0);
// Create body
NxBodyDesc BodyDesc;
BodyDesc.angularDamping = 0.5f;
BodyDesc.maxAngularVelocity = 10.0f;
NxActorDesc ActorDesc;
ActorDesc.shapes.pushBack(&bunnyShapeDesc);
ActorDesc.body = &BodyDesc;
ActorDesc.density = 1.0f;
ActorDesc.globalPose.t = pos;
NxActor* newActor = gScene->createActor(ActorDesc);
blablablabunny = newActor;
}
код работает на PhysX SDK 2.5.1
для работы надо еще NxBunnyData.cpp приложить в проект