Check this out:
http://forum.thegamecreators.com/?m=forum_view&t=149976&b=22. I had the same question, and jezza, prasoc and ABXG helped me out allot. There's also a video, and source there. Good luck.
Edit: Hm, i just saw there's no video or source there
! Here's the source code:
#include "DarkGDK.h"
#include "SC_Collision.h"
#include "math.h"
void MovementSiColliziune();
float gravity = -0.28f;
float radius = 2;
float radious = 1;
int playervar = 2;
float playerspeed = 0.3;
float speed = 0;
float px;
float py;
float pz;
float dist;
float G = 6.67428 * pow(10.0,-11);
float acceleration;
void DarkGDK ( void )
{
dbSyncOn ( );
dbSyncRate ( 60 );
dbSetDisplayModeAntialias(1024,768,32,1,4,0);
dbAutoCamOff();
SC_Start( );
//World - 1
dbMakeObjectSphere(1,50);
SC_SetupComplexObject(1,1,2);
//dbGhostObjectOn(1);
//Player - 2
dbMakeObjectCube(playervar,radius);
dbPositionObject(playervar,dbObjectPositionX(1),dbObjectPositionY(1)+30,dbObjectPositionZ(1));
SC_SetupObject(playervar,0,0);
//Debug Object
dbMakeObjectCube(5,1);
dbColorObject(5,dbRGB(255,0,0));
dbPositionObject(5,dbObjectPositionX(1),dbObjectPositionY(1)+30,dbObjectPositionZ(1));
SC_SetupObject(5,0,0);
while ( LoopGDK ( ) )
{
MovementSiColliziune();
dbControlCameraUsingArrowKeys(0,0.7,0.7);
dbSync ( );
}
return;
}
void MovementSiColliziune()
{
float oldx = dbObjectPositionX(playervar);
float oldy = dbObjectPositionY(playervar);
float oldz = dbObjectPositionZ(playervar);
if(dbKeyState(17))
{
dbMoveObject(playervar,playerspeed);
}
if(dbKeyState(31))
{
dbMoveObject(playervar,-playerspeed);
}
dbPositionObject(5,dbObjectPositionX(playervar),dbObjectPositionY(playervar),dbObjectPositionZ(playervar));
px = dbObjectPositionX(1)-dbObjectPositionX(playervar);
py = dbObjectPositionY(1)-dbObjectPositionY(playervar);
pz = dbObjectPositionZ(1)-dbObjectPositionZ(playervar);
dist = (px*px)+(py*py)+(pz*pz);
acceleration = 0-(20000000000*G)/dist;
speed-=acceleration;
dbPointObject(5,dbObjectPositionX(1),dbObjectPositionY(1),dbObjectPositionZ(1));
dbMoveObject(5, speed);
dbPositionObject(playervar,dbObjectPositionX(5),dbObjectPositionY(5),dbObjectPositionZ(5));
float newx = dbObjectPositionX(playervar);
float newy = dbObjectPositionY(playervar);
float newz = dbObjectPositionZ(playervar);
int collide = SC_SphereSlideGroup( 1, oldx,oldy,oldz, newx,newy,newz,radious, 0 );
if(collide)
{
dbPositionObject(playervar,SC_GetCollisionSlideX(),SC_GetCollisionSlideY(),SC_GetCollisionSlideZ());
speed = 0;
}
if(dbKeyState(30))
{
dbTurnObjectLeft(playervar,1);
}
if(dbKeyState(32))
{
dbTurnObjectRight(playervar,1);
}
if(dbSpaceKey())
{
dbPitchObjectUp(playervar,1);
}
if(dbReturnKey())
{
dbPitchObjectDown(playervar,2);
}
}
And the video:
http://www.youtube.com/watch?v=PvYY2XGsjA8 But do check that topic, since it will help you understand the concept better.