原文地址:http://blog.csdn.net/heartrude/article/details/7768490
写完第一个Demo,心里有了一个直观的感受。现在需要通过阅读来深入了解一些内部细节了。
1.对于NxCreatePhysicsSDK函数
a.PhysX支持玩家自定义的内存分配方式。
只要在NxCreatePhysicsSDK函数的第二个参数里面传入内存分配类指针即可。
- class MyAllocator : public NxUserAllocator
- {
- public:
- void * malloc(NxU32 size)
- {
- return ::malloc(size);
- }
- void * mallocDEBUG(NxU32 size,const char *fileName, int line)
- {
- return ::_malloc_dbg(size,_NORMAL_BLOCK, fileName, line);
- }
- void * realloc(void * memory, NxU32 size)
- {
- return ::realloc(memory,size);
- }
- void free(void * memory)
- {
- ::free(memory);
- }
- }
- myAllocator; gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION, &myAllocator, 0);
b.创建和释放必须配对
NxCreatePhysicsSDK函数返回的是一个单键对象指针。所以一个进程,多次调用NxCreatePhysicsSDK返回的是同一个对象。一个进程只能由一个SDK实例对象。该实例是包含引用计算的单键。所以要求每次NxCreatePhysicsSDK调用,都要有配对的gPhysicsSDK->release();2.实例化对象
很多SDK对象接口都包含了Create方法。可以返回实例化对象指针。很多对象对不能直接new出来。因为本身是虚函数。然后对应的释放都调用对应的release函数。
对象包含userData成员。可以用来记录对象相应数据内存指针。
3.有关时间间隔
这里主要是两个时间。一个是模拟时间,一个是模拟步长。
在NxScene->simulate函数传入参数elapsedTime是模拟时间。每一次simulate模拟的时间。
NxScene->setTiming(maxTimestep, maxIter, method)。
maxTimeStep该参数在传入的method是NX_TIMESTEP_FIXED的时候表示每次simulate模拟的最大时间步长。如果elapsedTime > maxTimeStep,则simulate会把时间分成多个maxTimeStep来执行。最多执行maxIter次。如果maxIter次还没有达到elapsedTime 时间。则剩余的时间累计到下一次simulate调用时计算。maxTimeStep一般是1/100到1/50s比较好。
如果method是NX_TIMESTEP_VARIABLE则simulate把elapsedTime作为单步时间来模拟。
4.有关VRD的坐标颜色
VRD显示的坐标系只有红色、绿色、蓝色三种不同颜色坐标轴。没有坐标轴的X,Y,Z标志的。
据观察测试 红色:X 绿色:Y 蓝色:Z