PDA

View Full Version : Ogre4Delphi (UP 30/11/08) - All files



djoker
29-11-2008, 08:18 PM
hi ppl this is my fist attempt 2 create a framework 4 delphi, still mutch to do.
the next version will initiate the engine by code and or dialog.

sorry my english :oops:

full working version and better with all files(media ,source and binary)

http://www.mediafire.com/file/mzmmkytagyy/Ogre4D.zip

plz report any problem.

http://img117.imageshack.us/img117/2517/screenshot4xe8.th.png (http://img117.imageshack.us/my.php?image=screenshot4xe8.png)
http://img117.imageshack.us/img117/2079/screenshot3un2.th.png (http://img117.imageshack.us/my.php?image=screenshot3un2.png)

http://img530.imageshack.us/img530/490/shot1dq0.th.jpg (http://img530.imageshack.us/my.php?image=shot1dq0.jpg)
http://img370.imageshack.us/img370/2751/shot2pq6.th.jpg (http://img370.imageshack.us/my.php?image=shot2pq6.jpg)



program teste2;

{$APPTYPE CONSOLE}

uses
SysUtils,mmsystem,math,
dialogs,
Ogre4D in 'Ogre4D.pas',
OgreTypes in 'OgreTypes.pas';

var
camera:ocamera;
vp:OViewPort;
plane,Mesh:OEntity;
l2,Light:OLight;
AnimNode,PlaneNode,Ogre:OSceneNode;
bbs:OBillboards;
trail:ORibbonTrail;
mRotX,mRotY:single;
mMoveSpeed:single=800;
mSpeedLimit , mMoveScale:single;
mTranslateVector:vector3;
animupdate,animupdate2:OAnimationState;

anim:OAnimation;
track:OAnimationTrack;
kf:OKeyFrame;

dir:vector3;


procedure RenderEvent(timeSinceLastEvent,timeSinceLastFrame: single);stdcall;
begin
AnimState_AddTime(animupdate,timeSinceLastFrame);
AnimState_AddTime(animupdate2,timeSinceLastFrame);

mTranslateVector:=vector(0,0,0);
mSpeedLimit := mMoveScale * timeSinceLastFrame;
mMoveScale := mMoveSpeed * timeSinceLastFrame;

if Window_isKeyDown(KC_F12) then Window_TakeShot;

if Window_isKeyDown(KC_A) then mTranslateVector.x := -mMoveScale; // Move camera left
if Window_isKeyDown(KC_D) then mTranslateVector.x := mMoveScale; // Move camera RIGHT

if(Window_isKeyDown(KC_UP) or (Window_isKeyDown(KC_W))) then
mTranslateVector.z := -mMoveScale; // Move camera forward

if(Window_isKeyDown(KC_DOWN) or (Window_isKeyDown(KC_S))) then
mTranslateVector.z := mMoveScale; // Move camera backward

if(Window_isKeyDown(KC_PGUP)) then mTranslateVector.y := mMoveScale; // Move camera up

if(Window_isKeyDown(KC_PGDOWN)) then mTranslateVector.y := -mMoveScale; // Move camera down

mRotX := -Window_MouseX * 0.13;
mRotY := -Window_MouseY * 0.13;

Camera_SetYaw(camera,mRotX);
Camera_SetPitch(camera,mRotY);
Camera_MoveRelative(camera,mTranslateVector);

Node_Yaw(ogre,0.10);


Engine_DrawDebugPanel;
end;

begin

Engine_CreateRoot(LL_NORMAL,'plugins.cfg','ogre.cf g');


Engine_SelectRenderSystem(DV_DIRECT3D9);
engine_SetConfigOption('VSync','No');
engine_SetConfigOption('Full Screen','No');
engine_SetConfigOption('Video Mode','800 x 600 @ 16-bit colour');
Engine_Init('OGRE4D');


Engine_SetFrameListner(RenderEvent);



camera:=Scene_AddCamera('mycamera');


Camera_SetDistanceClip(camera,1.0,20000.0);
vp:=Camera_SetViewPort(Camera);
ViewPort_SetColor(vp,0,0,0.4);

Camera_SetPosition(camera,vector(0,20,500));
Camera_SetLookAt(camera,vector(0,0,300));

Scene_SetAmbientLight(1.0,1.0,0.5);








Engine_AddResourceLocation('media','FileSystem');
Engine_AddResourceLocation('media/fonts','FileSystem');
Engine_AddResourceLocation('media/overlays','FileSystem');
Engine_AddResourceLocation('media/models','FileSystem');

Engine_AddResourceLocation('media/materials/scripts','FileSystem');
Engine_AddResourceLocation('media/materials/textures','FileSystem');

Engine_AddResourceLocation('media/packs/ogrecore.zip','Zip');
Engine_AddResourceLocation('media/packs/skybox.zip','Zip');



Engine_UpdateAllResourceGroups;






Scene_AddSkyBox('Examples/SpaceSkyBox');
//Scene_AddSkyPlane('Examples/SpaceSkyPlane');
//Scene_SetSkyDome('Examples/CloudySky',5,8);



Mesh:=Scene_AddEntity('axes', 'axes.mesh');
Scene_AttachObject(mesh);


Mesh:=Scene_AddEntity('head', 'ogrehead.mesh');
ogre:=Scene_AddChildSceneNode( 'head');
Node_AttachObject(ogre,mesh);
Node_ShowBoundigBox(ogre,true);



MeshManager_CreatePlane('plane',1000,1000);
plane:=Scene_AddEntity('floor','plane');
Entity_SetMaterialName(plane,'Examples/RustySteel');
PlaneNode:=Scene_AddChildSceneNode( 'plane');
Node_AttachObject(planenode,plane);

dir:=vector(-1, -1, 0.5);
dir:=VNormalize(dir);

Light:=Scene_AddLight('light1',LT_DIRECTIONAL);
Light_SetDirection(light,dir);




trail:=Scene_AddRibbonTrail('l','RibbonTrail');
RibbonTrail_SetMaterialName(trail,'Examples/LightRibbonTrail');
RibbonTrail_SetTrailLength(trail,400);
Scene_AttachObject(trail);

animnode:=Scene_AddChildSceneNode('anim1');
Node_SetPosition(animnode,vector(50,30,0));

anim:=Scene_AddAnimation('an1',14);
Animation_SetInterpolationMode(anim,IM_SPLINE);
track:=Animation_CreateNodeTrackTOnNode(anim,1,ani mnode);
kf:=Track_CreateNodeKeyFrame(track,0);

KeyFrame_SetTranslate(kf,Vector(50,30,0));
kf:=Track_CreateNodeKeyFrame(track,2);
KeyFrame_SetTranslate(kf,Vector(100, -30, 0));
kf:=Track_CreateNodeKeyFrame(track,4);
KeyFrame_SetTranslate(kf,Vector(120, -100, 150));
kf:=Track_CreateNodeKeyFrame(track,6);
KeyFrame_SetTranslate(kf,Vector(30, -100, 50));
kf:=Track_CreateNodeKeyFrame(track,8);
KeyFrame_SetTranslate(kf,Vector(-50, 30, -50));
kf:=Track_CreateNodeKeyFrame(track,10);
KeyFrame_SetTranslate(kf,Vector(-150, -20, -100));
kf:=Track_CreateNodeKeyFrame(track,12);
KeyFrame_SetTranslate(kf,Vector(-50, -30, 0));
kf:=Track_CreateNodeKeyFrame(track,14);
KeyFrame_SetTranslate(kf,Vector(50,30,0));

animupdate:=Scene_AddAnimationState('an1');


RibbonTrail_SetInitialColour(trail,0, color(1.0, 0.8, 0,0));
RibbonTrail_SetColourChange(trail,0,color( 0.5, 0.5, 0.5, 0.5));
RibbonTrail_SetInitialWidth(trail,0, 5);
RibbonTrail_AddNode(trail,animNode);

l2:=Scene_AddLight('l2',LT_POINT);
Light_SetColor(l2,1.0,0.8,0);
Node_AttachObject(animnode,l2);


bbs:=Scene_AddBillBoards('bb',1);
BillBoard_AddBillBoard(bbs,vector(0,0,0),color(1.0 ,0.8,0,0));
BillBoard_SetMaterial(bbs,'Examples/Flare');
Node_AttachObject(animnode,bbs);




animnode:=Scene_AddChildSceneNode('anim2');
Node_SetPosition(animnode,vector(-50,100,0));

anim:=Scene_AddAnimation('an2',10);
Animation_SetInterpolationMode(anim,IM_SPLINE);
track:=Animation_CreateNodeTrackTOnNode(anim,1,ani mnode);
kf:=Track_CreateNodeKeyFrame(track,0);
KeyFrame_SetTranslate(kf,Vector(-50,100,0));
kf:=Track_CreateNodeKeyFrame(track,2);
KeyFrame_SetTranslate(kf,Vector(-200, 150, -30));
kf:=Track_CreateNodeKeyFrame(track,4);
KeyFrame_SetTranslate(kf,Vector(-200, 0, 40));
kf:=Track_CreateNodeKeyFrame(track,6);
KeyFrame_SetTranslate(kf,Vector(0, -150, 70));
kf:=Track_CreateNodeKeyFrame(track,8);
KeyFrame_SetTranslate(kf,Vector(50, 0, 30));
kf:=Track_CreateNodeKeyFrame(track,10);
KeyFrame_SetTranslate(kf,Vector(-50, 100, 0));

animupdate2:=Scene_AddAnimationState('an2');

RibbonTrail_SetInitialColour(trail,1, color(0.0, 1.0, 0.4,0));
RibbonTrail_SetColourChange(trail,1,color( 0.5, 0.5, 0.5, 0.5));
RibbonTrail_SetInitialWidth(trail,1, 5);
RibbonTrail_AddNode(trail,animNode);


l2:=Scene_AddLight('l3');
Light_SetColor(l2,0.0,1.0,0.4);
Node_AttachObject(animnode,l2);


bbs:=Scene_AddBillBoards('bb2',1);
BillBoard_AddBillBoard(bbs,vector(0,0,0),color(0.0 ,1.0,0.4,0));
BillBoard_SetMaterial(bbs,'Examples/Flare');
Node_AttachObject(animnode,bbs);


Engine_BeginLoop;

Engine_Shutdown;



end.




unit Ogre4D;

interface
uses windows,ogretypes;




//************************************************** *******
//* OGRE MAIN *
//************************************************** *******
function Engine_CreateRoot(OLoggingLevel:OLoggingLevel;plug inFileName,configFileName:pchar):bool;cdecl;extern al ogredll;
function Engine_RootLoadPlugin(pluginFileName:pchar):bool;c decl;external ogredll;

function Engine_InitFromDialog(caption:pchar;SceneType:OSce neType=ST_GENERIC):bool;cdecl;external ogredll;

function Engine_SelectRenderSystem(Devide:ODeviceType):bool ;cdecl;external ogredll;
function Engine_SetConfigOption(name,value:pchar):bool;cdec l;external ogredll;
function Engine_Init(windowTitle:pchar;SceneType:OSceneType =ST_GENERIC):bool;stdcall;external ogredll;

//function Engine_SelectRenderSystemByCode(windowTitle:pchar) :bool;cdecl;external ogredll;

function Engine_BeginLoop:bool;cdecl;external ogredll;
procedure Engine_SetFrameListner(OgreRenderCallBack:ORenderE vent);cdecl;external ogredll;
procedure Engine_Shutdown();cdecl;external ogredll;
procedure Engine_RenderOneFrame;cdecl;external ogredll;
procedure Engine_AddResourceLocation( Path, LocType:pchar; recursive:boolean=false);cdecl;external ogredll;
procedure Engine_AddResourceLocationFromFile(filename:pchar) ;cdecl;external ogredll;
procedure Engine_UpdateAllResourceGroups;cdecl;external ogredll;
procedure Engine_DrawDebugPanel;cdecl;external ogredll;

procedure Engine_SetDefaultTextureFiltering( fo:OTextureFilterOptions);cdecl;external ogredll;
procedure Engine_SetDefaultTextureFilteringMinMag(minFilter, magFilter, mipFilter:OFilterOptions);cdecl;external ogredll;
procedure Engine_SetDefaultTextureFilteringType( ftype:OFilterType; opts:OFilterOptions);cdecl;external ogredll;
procedure Engine_SetDefaultAnisotropy(maxAniso:integer);cdec l;external ogredll;
//************************************************** *******
//* OGRE WINDOW *
//************************************************** *******
procedure Window_Close;cdecl;external ogredll;
procedure Window_TakeShot;cdecl;external ogredll;
function Window_isKeyDown(key:OKeyCode):bool;cdecl;external ogredll;
function Window_isMouseDown( button:integer):boolean;cdecl;external ogredll;
function Window_MouseX:integer;cdecl;external ogredll;
function Window_MouseY:integer;cdecl;external ogredll;
function Window_MouseZ:integer;cdecl;external ogredll;
function Window_MouseXAbs:integer;cdecl;external ogredll;
function Window_MouseYAbs:integer;cdecl;external ogredll;
function Window_MouseZAbs:integer;cdecl;external ogredll;

//************************************************** *******
//* OGRE SCENE *
//************************************************** *******
procedure Scene_SetAmbientLight(r,g,b:single);cdecl;external ogredll;

procedure Scene_AddSkyBox(MatName:pchar;distance :single= 5000; drawFirst:boolean = true);cdecl;external ogredll;
function Scene_AddBillBoards(Name:pchar;poolSize:integer = 20):OBillBoards;cdecl;external ogredll;
procedure Scene_AddSkyDome(Name:pchar; curvature:single = 10;tiling:single = 8; distance:single = 4000;drawFirst:boolean = true)cdecl;external ogredll;
procedure Scene_AddSkyPlane(Name:pchar; dist:single=5000; scale:single = 1000; tiling:single = 10; drawFirst:boolean = true; bow:single = 0)cdecl;external ogredll;
function Scene_AddCamera(Name:pchar):OCamera;cdecl;external ogredll;
function Scene_AddEntity(Name,Filename:pchar):OEntity;cdecl ;external ogredll;
function Scene_AddLight(Name:pchar;LightTypes:OLightTypes=L T_POINT):OLight;cdecl;external ogredll;


function Scene_AddRibbonTrail(Name,TypeName:pchar; NumberOfChains:integer=2; maxElement:integer=80):ORibbonTrail;cdecl;external ogredll;
function Scene_AddChildSceneNode(Name:pchar):OSceneNode;cde cl;external ogredll;
function Scene_AddAnimation(Name:pchar;length:single):OAnim ation;cdecl;external ogredll;
function Scene_AddAnimationState(Name:pchar):OAnimationStat e;cdecl;external ogredll;
procedure Scene_AttachObject(obj:TMovableObject);cdecl;exter nal ogredll;

//************************************************** *******
//* OGRE CAMERAS *
//************************************************** *******
procedure Camera_SetAspectRatio(camera:OCamera;Ratio:single) ;cdecl;external ogredll;
procedure Camera_SetFOVy(camera:OCamera;fov:single);cdecl;ex ternal ogredll;
procedure Camera_SetDistanceClip(camera:OCamera;distNear,dis tFar:single);cdecl;external ogredll;
function Camera_SetViewPort(Camera:OCamera;ZOrder:integer=0 ;left:single=0.0;Top:single=0.0;width:single= 1.0;height:single= 1.0):OViewPort;cdecl;external ogredll;
procedure Camera_SetPolygonMode(Camera:Ocamera;value:OPolygo nMode);cdecl;external ogredll;
procedure Camera_SetPosition(Camera:OCamera;vec:Vector3);cde cl;external ogredll;
procedure Camera_SetLookAt(Camera:OCamera; vec:Vector3);cdecl;external ogredll;
procedure Camera_MoveRelative(Camera:OCamera; vec:Vector3);cdecl;external ogredll;
procedure Camera_Move(Camera:OCamera; vec:Vector3);cdecl;external ogredll;
procedure Camera_SetDirection(Camera:OCamera; vec:Vector3);cdecl;external ogredll;
procedure Camera_SetYaw(Camera:OCamera;angle:single);cdecl;e xternal ogredll;
procedure Camera_SetPitch(Camera:OCamera;angle:single);cdecl ;external ogredll;
procedure Camera_SetRoll(Camera:OCamera;angle:single);cdecl; external ogredll;
//************************************************** *******
//* OGRE VIEWPORT *
//************************************************** *******
procedure ViewPort_SetColor(vp:OViewport;r,g,b:single);cdecl ;external ogredll;
function ViewPort_GetWidth(vp:OViewport):single;cdecl;exter nal ogredll;
function ViewPort_GetHeight(vp:OViewport):single;cdecl;exte rnal ogredll;
//************************************************** *******
//* OGRE ENTITYS *
//************************************************** *******
procedure Entity_SetMaterialName(Entity:OEntity;MatName:pcha r);cdecl;external ogredll;
//************************************************** *******
//* OGRE LIGHTS *
//************************************************** *******
procedure Light_SetPosition(Light:Olight; vec:Vector3);cdecl;external ogredll;
procedure Light_SetDirection(Light:Olight; vec:Vector3);cdecl;external ogredll;
procedure Light_SetColor(Light:OLight;r,g,b:single);cdecl;ex ternal ogredll;
//************************************************** *******
//* OGRE NODES *
//************************************************** *******
procedure Node_AttachObject(Node:OSceneNode;obj:OMovableObje ct);cdecl;external ogredll;
procedure Node_AttachChilld(Node,Chilld:OSceneNode);cdecl;ex ternal ogredll;
procedure Node_SetPosition(SceneNode:OSceneNode; vec:Vector3);cdecl;external ogredll;
procedure Node_SetDirection(SceneNode:OSceneNode; vec:Vector3);cdecl;external ogredll;
procedure Node_Scale(SceneNode:OSceneNode; vec:Vector3);cdecl;external ogredll;
procedure Node_Rotate(SceneNode:OSceneNode; vec:Vector3; angle:single);cdecl;external ogredll;
procedure Node_ShowBoundigBox(SceneNode:OSceneNode;bShow:boo lean);cdecl;external ogredll;
procedure Node_SetDebugDisplayEnabled(SceneNode:OSceneNode;b Show:boolean);cdecl;external ogredll;
procedure Node_Yaw(Node:OSceneNode;angle:single);cdecl;exter nal ogredll;
procedure Node_Pitch(Node:OSceneNode;angle:single);cdecl;ext ernal ogredll;
procedure Node_Roll(Node:OSceneNode;angle:single);cdecl;exte rnal ogredll;

procedure Node_YawPitchRollInRadian(Node:OSceneNode; yaw, pitch,roll:single);cdecl;external ogredll;
procedure Node_YawPitchRollInDegree(Node:OSceneNode; yaw, pitch,roll:single);cdecl;external ogredll;

function Node_GetChilldByIndex(Node:OSceneNode;index:intege r):OSceneNode;cdecl;external ogredll;
function Node_GetChilldByName(Node:OSceneNode;name:pchar):O SceneNode;cdecl;external ogredll;

//************************************************** *******
//* OGRE MESHMANAGER *
//************************************************** *******

procedure MeshManager_CreatePlane(Name:pchar; width, height:single;xsegments:integer = 1;ysegments:integer = 1;
normals:boolean = true; numTexCoordSets:integer = 1;
uTile:single = 1.0; vTile :single= 1.0);cdecl;external ogredll;
//************************************************** *******
//* OGRE RibbonTrail *
//************************************************** *******
procedure RibbonTrail_SetTrailLength(trail:ORibbonTrail; lean:single);cdecl;external ogredll;
procedure RibbonTrail_SetMaterialName(trail:ORibbonTrail; Name:pchar);cdecl;external ogredll;
procedure RibbonTrail_SetInitialColour(Trail:ORibbonTrail;ch ainIndex:integer;color:OColor);cdecl;external ogredll;
procedure RibbonTrail_SetColourChange(Trail:ORibbonTrail;cha inIndex:integer;color:OColor);cdecl;external ogredll;
procedure RibbonTrail_SetInitialWidth(Trail:ORibbonTrail;cha inIndex:integer;size:single);cdecl;external ogredll;
procedure RibbonTrail_AddNode(Trail:ORibbonTrail;cNode:OScen eNode);cdecl;external ogredll;
//************************************************** *******
//* OGRE ANIMATION *
//************************************************** *******
procedure Animation_SetInterpolationMode(anim:OAnimation;im: OInterpolationMode);cdecl;external ogredll;
function Animation_CreateNodeTrack(anim:OAnimation;handle:i nteger):OAnimationTrack;cdecl;external ogredll;
function Animation_CreateNodeTrackTOnNode(anim:OAnimation;h andle:integer;Node:OSceneNode):OAnimationTrack;cde cl;external ogredll;
//************************************************** *******
//* OGRE ANIMATION STATES *
//************************************************** *******
procedure AnimState_AddTime(state:OAnimationState;offset:sin gle)cdecl;external ogredll;
//************************************************** *******
//* OGRE KEYFRAME *
//************************************************** *******
procedure KeyFrame_SetTranslate(keyframe:Okeyframe;vect:vect or3);cdecl;external ogredll;
procedure KeyFrame_SetScale(keyframe:Okeyframe;vect:vector3) ;cdecl;external ogredll;
procedure KeyFrame_SetRotation(keyframe:Okeyframe;vect:vecto r3);cdecl;external ogredll;
//************************************************** *******
//* OGRE TRACK *
//************************************************** *******
function Track_CreateNodeKeyFrame(anim:OAnimationTrack; timePos:single):OKeyFrame;cdecl;external ogredll;
//************************************************** *******
//* OGRE BILLBOARD *
//************************************************** *******
function BillBoard_AddBillBoard(Bils:OBillboards;pos:vector 3;color:OColor ):OBillBoard;cdecl;external ogredll;
procedure BillBoard_SetMaterial(Bils:OBillboards;name:pchar) ;cdecl;external ogredll;

Srki_82
29-11-2008, 10:16 PM
Excelent work :)
Do you plan to make possible for Pascal users to create classes that "inherite" from Ogre classes?

djoker
29-11-2008, 11:06 PM
Excelent work :)
Do you plan to make possible for Pascal users to create classes that "inherite" from Ogre classes?

from ogre no but with this api you can create classes and drop on a form

i prefer clean api like


var
camera:OCamera;

camera:=addcamera(name)
positioncamera(camera,x,y,z);


or create 1 class


Tcamera=class
private
cam:OCamera//ogre node
public
constructor create(name);
procedurere position(x,y,z);
end;


constructor TCamera.create(name);
begin
cam:=ogreaddcamera(name);
end;
procedurere TCamera.position(x,y,z);
begin
positioncamera(cam,x,y,z)
end;

Traveler
01-12-2008, 12:00 PM
This is really cool news. I just looked at Ogre last week and regretted the fact that there has never been an attempt to port it to Delphi (there have been some questions regarding this issue in the past on their forums, and I think you should make a post about it)

bumped to news as well

djoker
01-12-2008, 04:35 PM
This is really cool news. I just looked at Ogre last week and regretted the fact that there has never been an attempt to port it to Delphi (there have been some questions regarding this issue in the past on their forums, and I think you should make a post about it)

bumped to news as well

I have just post this on "Ogre" Forum, but it still needs some more hard work so I don't want to acquaint it too much.
I just spend 2 days working on it and its too complex to code

farcodev_
10-12-2008, 05:41 PM
Incredible ! :shock:

Yeah it's a pain in the *ss that there's no official Delphi (and why not lazarus) port of it, it's a great engine !!!

excellent work by the way ! :P

djoker
19-12-2008, 05:47 PM
Incredible ! :shock:

Yeah it's a pain in the *ss that there's no official Delphi (and why not lazarus) port of it, it's a great engine !!!

excellent work by the way ! :P

tks but now irrlicht have VBO ,
is the best free engine

djoker
19-12-2008, 05:53 PM
This is really cool news. I just looked at Ogre last week and regretted the fact that there has never been an attempt to port it to Delphi (there have been some questions regarding this issue in the past on their forums, and I think you should make a post about it)

bumped to news as well


hi Traveler ... why Ogre4Delphi is on news and irr4delphi dont ??

irrlicht3d is much better than Ogre :oops:

Traveler
19-12-2008, 11:14 PM
It could have been a news item back when the thread was started in March, but I'm not sure about it as the frontpage does not go back that far.
I noticed irrlicht 1.5 was released a few days ago. Are these new features available from Delphi now as well?

djoker
20-12-2008, 01:12 AM
It could have been a news item back when the thread was started in March, but I'm not sure about it as the frontpage does not go back that far.
I noticed irrlicht 1.5 was released a few days ago. Are these new features available from Delphi now as well?

yes ... if irr as new feature delphi have 2 and more because im working with the sources of irr and not the lib.

but i see lotS of bugs :S on driver dx8 and gl, dx9 is fine,
but on delphi i make my extra VBO's .

Best Regards .