游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4022|回复: 4

ogre和physx二sdk整合笔记

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-11-8 20:18:00 | 显示全部楼层 |阅读模式

写3d实时程序从头造轮子虽然high,但是巨麻烦,ogre和physx这两年相当成熟了,快速开发再好不过.但是整合起来稍微有点麻烦,这里记录一下以备后查

ogre sdk vc8版本, (我曾经试过用vc7的sdk硬转换成vc8的项目,结果编译能过去,执行却把机器整崩溃了,汗)

PhysX SDK v2.4.1再往上就干硬件了...

试验修改项目: sample project Demo_camera_track

项目属性添加

c/c++(默认装到这个目录):

C:\Program Files\AGEIA Technologies\AGEIA PhysX SDK\v2.4.1\SDKs\Foundation\include
C:\Program Files\AGEIA Technologies\AGEIA PhysX SDK\v2.4.1\SDKs\Physics\include
C:\Program Files\AGEIA Technologies\AGEIA PhysX SDK\v2.4.1\SDKs\PhysXLoader\include

链接器:

附加库目录添加:C:\Program Files\AGEIA Technologies\AGEIA PhysX SDK\v2.4.1\SDKs\lib\Win32

附加依赖项添加:PhysXLoader.lib

CameraTrack.cpp中添加头文件:

#include "NxPhysics.h" (必须放在开头否则 几百个error!!)

然后添加初始,退出physx函数,和在桢回调中调用physx that's it

这里简单的用了一个 box 我接纳闷SceneNode* 为什么不能一个44矩阵做object to world转换
两个函数,这.....:

   //float glMat[16];
   //actor->getGlobalPose().getColumnMajor44(glMat);
   NxVec3 cubePos = actor->getGlobalPosition();
   cubeNode->setPosition(cubePos.x,cubePos.y,cubePos.z);
   NxQuat cubeQuat = actor->getGlobalOrientationQuat();
   cubeNode->setOrientation(cubeQuat.w,cubeQuat.x,cubeQuat.y,cubeQuat.z);


首发:

http://blog.csdn.net/wineceramic/archive/2006/11/07/1371709.aspx
sf_2006118201737.jpg

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-10 11:29:00 | 显示全部楼层

Re:ogre和physx二sdk整合笔记

我接纳闷SceneNode* 为什么不能一个44矩阵做object to world转换

你不做引擎当然不能理解,一切为了效率。

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-11-10 18:25:00 | 显示全部楼层

Re:ogre和physx二sdk整合笔记

楼上的不知道你是不是真明白我在说什么...
44矩阵就是包括pos 和 四元数 一起做的转换啊 底层d9 opengl都是这样做啊...
莫非你认为两个非内联函数加起来比一个内联函数的执行效率要高吗?

0

主题

114

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2006-11-11 22:25:00 | 显示全部楼层

Re:ogre和physx二sdk整合笔记

呵呵,早段时间比较空闲的时候也稍微试验了一下PhysX,希望更多人来琢磨这个,大家一起讨论,
float glMat[16];
actor->getGlobalPose().getColumnMajor44(glMat);
这个getGlobalPose()就可以是matrix4x4阿
你说的是Ogre的不支持SetMatrix,而是SetPos和SetQuat吧:)
我没有仔细研究过Ogre,但是跟我的经验和理解,他内部的运算应该都是vecto3 和 quaternion处理的,setpos和setquat直接设置他要操作的数字更合时,而直接设置matrix4的时候,因为要维护引擎内部数据的同步,还需要做matrix的pos和quat的分离,效率会反而更低,引擎内部都是通过pos+quat处理,包括插值等,最后绘制的时候,组合称为一个matrix就是了,我觉得这样是最合适的方式,至少我的引擎是这样的,ogre顾及也如此吧,虽然我也可提供setmatrix,但是内部进行了分解,并不鼓励项目程序员用,我们项目应用还有scale,要分解的就更多了。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-13 10:55:00 | 显示全部楼层

Re: Re:ogre和physx二sdk整合笔记

ceramictz: Regre和physx二sdk整合笔记

楼上的不知道你是不是真明白我在说什么...
44矩阵就是包括pos 和 四元数 一起做的转换啊 底层d9 opengl都是...

谁说2个非 inline 函数就一定比 一个 inline 函数效率低?还要看函数内部的运算是什么了,比如 SetPos 、 SetRotate,仅仅是简单的赋值,你认为这两个函数会比计算一个 4x4 Matrix 慢吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 20:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表