PhysX学习记录 三

64 篇文章 0 订阅
16 篇文章 2 订阅

写完第一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值