AGEIA PhysX + Blitz3D?

Blitz3D Forums/Blitz3D Userlibs/AGEIA PhysX + Blitz3D?

Happy Sammy(Posted 2006) [#1]
Hi all,

It is said that AGEIA PhysX is a new technology.
The AGEIA PhysX processor is available in game PCs from
Dell, Alienware and Falcon Northwest starting today, and on
add-in boards from ASUS and BFG technologies starting in
May 2006.

Darkbasic Pro has integrated it (DarkPhysics).
Is it possible for blitz3D to work with it?

Thanks in advance.
Sammy
:)


puki(Posted 2006) [#2]
Mmm, I'd rather let them go first and see how they get on with it before it comes our way.

Anyway, I'd assume you have to have the required GPU hardware to use it?

I assume for Blitz to use this then a deal must be struck with AGEIA.


Shifty Geezer(Posted 2006) [#3]
Should just be a case of using Novodex (or whatever they've called the engine now). Aegia should have encoded support for their hardware in that. Though I'd wait and see if anyone bothers to get a PPU first. In most game situations you'd stillneed to sdesign fr lower specced PCs, so the PPU would just be about adding extra eyecandy. And if you're all about power-hungry eyecandy, Blitz3D probably isn't the platform of choice.


CodeGit(Posted 2006) [#4]
You do not need the hardware to run the physics engine.


Battle Tanks(Posted 2006) [#5]
I think it's a good move. Good physics is as much about game play as Eyecandy. I use JV-ODE but even the hight JV-ODE has to share a already taxed PCU. I say we need PPU it is the future just as long as it as ease to use as JV-ODE.


Robert Cummings(Posted 2006) [#6]
Darkbasic pro will be having AGEIA physics. What I love about AGEIA is, say you have the hardware? no problem... but if you don't and you have a dual core cpu then it will take advantage of that too!.


Regular K(Posted 2006) [#7]
Physics add to gameplay rather than just an eyecandy (compared to HDR, etc)

So, I hope PPUs catch on in the next few years.


Robert Cummings(Posted 2006) [#8]
It's a misconception that HDR and eye candy do not contribute to gameplay. I immerse better and enjoy the game and play differently with better graphics.


Happy Sammy(Posted 2006) [#9]
Hi all,

Now "Darkbasic" and "irrlicht" have integrated
AGEIA PhysX!!!

http://www.twilightstar.net/~andrew/works/tutorial/irrlicht_physx/physxtutorial.htm

Sammy
:)


Robert Cummings(Posted 2006) [#10]
Darkbasic's AGEIA physics is gonna rule, with water, etc... gonna be cool stuff.

What I like is, it's hardware accelerated also!


Battle Tanks(Posted 2006) [#11]
Would AGEIA physics be the rezone to switch to Darkbasic?

The answer has to be NO. Why? you can't set the physics detail on Hi in a game unless it got the hardware to do it. So until it become wide spread it's at best a nice toy at worst a big waste of time for us to code on. Especially when we have JV-ODE which is fast, stable and well supported by Viper.

We should concentrate on playability not gimmicks. In two years things will have changed but for now the best thing you can do is use Blitz3D with JV-ODE and leave the Big boys to play with AGEIA physics until it’s makes sense for us to use.


imekon(Posted 2006) [#12]
I can do this in DarkBasic with DarkPhysics:

REM load the universe, make the physics
loadobject "media\simple.dbo", 1000
phy make rigid body static mesh 1000

REM make our player
make object box 10, 20, 50, 20
phy make box character controller 10, 400, 40, -500, 10, 35, 10, 1, 10.5, 45
hide object 10

What's the equivalent with JV-ODE?

scene = loadanimmesh "media\simple.b3d"

then what?

I think it will require more coding than the above DBP fragment. Which is better? I've got both Blitz3D and JV-ODE, DarkBasic Pro with DarkPhysics - I'll let you know!


VIP3R(Posted 2006) [#13]
Maybe something like this...
scene=CreateTriMesh(Space,LoadMesh("media\simple.b3d"))

body=dBodyCreate(World)
dBodySetRotation(body,rx,ry,rz)
dBodySetPosition(body,xpos,ypos,zpos)
geom=dCreateBox(Space,xscale,yscale,zscale)
dGeomSetBody(geom,body)


It's possible to build much simpler helper functions in JV-ODE though...
Function MakeObjectBox(xpos#,ypos#,zpos#,rx#,ry#,rz#,xscale#,yscale#,zscale#)

body=dBodyCreate(World)
dBodySetRotation(body,rx,ry,rz)
dBodySetPosition(body,xpos,ypos,zpos)
geom=dCreateBox(Space,xscale,yscale,zscale)
dGeomSetBody(geom,body)

Return body

End Function


Which would result in a similar setup to the DarkPhysics example above...
scene=CreateTriMesh(Space,LoadMesh("media\simple.b3d"))

player=MakeObjectBox(xpos#,ypos#,zpos#,rx#,ry#,rz#,xscale#,yscale#,zscale#)


Obviously this doesn't include the 10-15? lines of ODE init/step/close. It also doesn't include player control but that's trivial stuff...
If KeyDown(leftkey) Then dBodyAddForce(player,-10,0,0)


It's difficult to say without knowing what '10, 400, 40, -500, 10, 35, 10, 1, 10.5, 45' means exactly.

AGEIA PhysX is great with the required hardware, but without the PhysX hardware it's just a Novadex based physics engine, nothing more.


imekon(Posted 2006) [#14]
Thanks, I'll try it! I was thinking I would need to examine the contents of the mesh to find all the bounding boxes and create ODE geometries accordingly...

phy make box character controller 10, 400, 40, -500, 10, 35, 10, 1, 10.5, 45

Sorry, should have been a bit more descriptive there... they are parameters describing the size of the player, let's see...

10 is the object ID (DBP's ghastly system, I prefer the Blitz way)
400, 40, -500 is the X, Y, Z position
35, 10, 1 is the size
10.5 is the maximum step level (so you can walk up steps)
45 is the maximum slope angle (walking up slopes)


imekon(Posted 2006) [#15]
I can get a basic mesh to load - four walls in a scene in this case. However, when I try to add a dynamic object to the scene, I get a memory access violation in the dSpaceCollide call; if I remove the mesh, then it works fine with just the dynamic object.

To load the mesh I do the following:

; The walls
walls.PhysicsObject = New PhysicsObject
walls\mesh = LoadMesh("walls.b3d")
walls\geometry = dCreateTriMesh( space, walls\mesh )

To create the dynamic object:

Function MakeDynamicBox.PhysicsObject(xpos, ypos, zpos, xsiz, ysiz, zsiz, xrot, yrot, zrot)

obj.PhysicsObject = New PhysicsObject

obj\body = dBodyCreate( world )

dBodySetRotation( obj\body, xrot, yrot, zrot )
dBodySetPosition( obj\body, xpos, ypos, zpos )

dBodySetAutoDisableFlag( obj\body, 1 )

obj\geometry = dCreateBox( space, xsiz, ysiz, zsiz )

dGeomSetBody( obj\geometry, obj\body )

mass = dMassCreate()

dMassSetBox( mass, 0.1, xsiz, ysiz, zsiz )
dBodySetMass( obj\body, mass )

obj\mesh = CreateCube()

ScaleMesh obj\mesh, xsiz / 2, ysiz / 2, zsiz / 2

Return obj

End Function


VIP3R(Posted 2006) [#16]
Hi Pete,

The following line is incorrect...

walls\geometry = dCreateTriMesh( space, walls\mesh )

It should be as follows (no 'd' prefix)...

walls\geometry = CreateTriMesh( space, walls\mesh )

Check the TriMesh/AnimTriMesh car demos included with JV-ODE to see the above in action.


imekon(Posted 2006) [#17]
Thanks, that fixed it. I changed my simple scene to one with a few obstacles and now have a few spheres all bouncing around inside it...