forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   быстрый FAQ : Создание динамического trianglemesh в physx (http://forum.boolean.name/showthread.php?t=1742)

jimon 19.10.2006 18:45

быстрый FAQ : Создание динамического trianglemesh в physx
 
надо коекому кинуть было :) ну и другим мож понадобится

Код:

#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 приложить в проект


Часовой пояс GMT +4, время: 16:39.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot