Posts Tagged ‘ PhysX

Aquilae Demo V1.0裡面的PhysX

Aquilae使用了OGRE作為圖形引擎,同時也使用了NVIDIA的PhysX,是的,使用了PhysX對OGRE封裝好的NxOGRE.

Demo裡面的PhysX效果其實非常簡單,看過Demo就知道,就是一大堆立方體從天而降,即將落到地面的時候被一個球擊中的效果.

代碼非常簡單,算是貼代碼玩吧.


bool PhysX::InitPhysX(SceneManager* mSceneM)
{
	mSceneMgr=mSceneM;

	mWorld= NxOgre::World::createWorld();

	NxOgre::SceneDescription sceneDesc;
	sceneDesc.mGravity = NxOgre::Vec3(0,-9.8f,0);
	sceneDesc.mName = "BloodyMessTutorial2";

	mScene = mWorld->createScene(sceneDesc);

	// 指定一些应用到整个场景的默认物理量
	mScene->getMaterial(0)->setStaticFriction(0.6); // 静摩擦系数
	mScene->getMaterial(0)->setDynamicFriction(0.6); // 动摩擦系数
	mScene->getMaterial(0)->setRestitution(0.3); // 恢复系数

	mRenderSystem = new OGRE3DRenderSystem(mScene);

	//创建场景几何

	CreateBox();
 	mScene->createSceneGeometry(new NxOgre::PlaneGeometry(0,NxOgre::Real3(0,1,0)), Matrix44_Identity);

	return true;
}

Read more

Aquilae V1.0 釋出

終於,為了期末趕工,Aquilae Demo的第一個正式發布版本。為了對付後天的實驗室期末答辯,算是草草完成V1.0版本吧.

恩,這個不是遊戲,僅僅只是一個Demo,展示自然場景。

使用了OGRE,HyDrax,NxOGRE(NVIDIA PhysX),CEGUI

截圖在上一篇網誌裡面可以看到很多,在這裡補上一張截圖。

PhysX碰撞的瞬間.

Read more

OGRE笔记–NxOGRE 第0篇

熟悉了基本的OGRE之后,就开始给OGRE添加物理引擎支持了,选择了NxOGRE,这是一个基于NVIDIA PhysX物理引擎和OGRE结合的东西.

关于NxOGRE入门的文档还是有些,不过NxOGRE还没有SDK,需要自己编译Lib和dll.

下面简要的说说如何配置NxOGRE的Visual Studio开发环境。

当然,前提是你已经配置好了NVIDIA的PhysX SDK目录,假如还不会配置,可以Google一下,网上关于PhysX的资料还是比较多的。

首先来这里http://nxogre.org/ 下载BloodyMess,解压到任意目录。然后在Visual Studio的Include和Lib包含设置上,全部填入NxOGRE BloodyMess目录下的SDK目录。

这个时候你可能会惊讶,说,SDK目录里面什么都没有啊,是一个空的。

别急,我们还要编译生成。

进入NxOGRE BloodyMess目录下的Build/msvc目录,你可以看到三个工程,分别是NxOgre,OgreRenderSystem和GLUTRenderSystem.

对于使用OGRE引擎的同学来说,只要编译NxOgre和OgreRenderSystem工程即可。

编译这两个工程,接着你就会发现在SDK目录下多出了很多很多东西,一大堆原始码和两个lib.

Read more

Aquilae:糟透了

突然觉得Aquilae的代码写的糟透了,到现在也不清楚具体Aquilae能做成什么样子.

一个游戏的工作量很大,一个人承担要很多努力.

加油吧!

Aquilae:完成第一个PhysX类立方体堆

终于,尽管对PhysX还有非常非常多的不熟悉,但是现在终于还是写出了第一个PhysX类.

这个类的作用是创建一个立方体堆,然后可以在碰撞的时候用上演示.

发泄一下今天怎么这网路环境打开米国的网站是如此的慢哇~

#pragma once

#include "includes.h"

#define BOX_CLASS_L 5.0  //立方体堆的长度
#define BOX_CLASS_H 10.0   //立方体堆的高度
#define BOX_CLASS_W 5.0  //立方体堆的宽度
#define BOX_CLASS_NUM 180  //一个立方体堆所包含的立方体数目
#define BOX_SIZE pow((BOX_CLASS_H*BOX_CLASS_L*BOX_CLASS_W)/BOX_CLASS_NUM,1.0/3.0)  //小立方体边长

class NvPhysX
{
public:
	void Init(LPDIRECT3DDEVICE9 device,const NxVec3 &pos);  //初始化
	void RenderActor();  //渲染函式
	void CreateBoxClass(const NxVec3 &pos);  //创建一个立方体堆
	bool CalculateBoxSite(const NxVec3 &pos);  //计算各个立方体坐标点
	NxActor* CreateBox(const NxVec3 &pos);
	void Quit();  //退出
public:
	NxPhysicsSDK   *gPhysicsSDK; //PhysX SDK实例对象
	NxScene   *gScene;  //场景对象
	NxSceneDesc sceneDesc; //场景表述表对象
	NxActor *Box_Class[BOX_CLASS_NUM];
	ID3DXMesh *BoxMesh;
	NxVec3 boxSite[BOX_CLASS_NUM];
	float boxsize;  //每个立方体的大小
};

Read more

Aquilae:用PhysX做方块堆

蒽,方块堆,就是一堆立方体的,好累了现在,直接先贴代码吧,还有一些小问题.

我想睡觉了,晚安.

void NvPhysX::CreateBoxClass(const NxVec3 &pos)
{
 for (int i=0;i<BOX_CLASS_NUM;i++)
 {
 Box_Class[i]=CreateBox(NxVec3(0.0f, (i * 3) + 5.0f, 0.0f));
 }
}

NxActor* NvPhysX::CreateBox(const NxVec3 &pos)
{
 // Set the box starting height to 3.5m so box starts off falling onto the ground
 NxReal boxStartHeight = 3.5; 

 // Add a single-shape actor to the scene
 NxActorDesc actorDesc;
 NxBodyDesc bodyDesc;

 // The actor has one shape, a box, 1m on a side
 NxBoxShapeDesc boxDesc;
 boxDesc.dimensions.set(0.5,0.5,0.5);
 boxDesc.localPose.t =NxVec3(0, 0, 0);  //初始位置
 actorDesc.shapes.pushBack(&boxDesc);

 actorDesc.body            = &bodyDesc;
 actorDesc.density        = 10.0f;
 actorDesc.globalPose.t    = pos;
 assert(actorDesc.isValid());
 NxActor *pActor = gScene->createActor(actorDesc);    
 assert(pActor);

 return pActor;
}

return top