home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / DELPHIX.ZIP / Samples / d3drm / shadow / DXshadow.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-06  |  4.7 KB  |  168 lines

  1. unit DXshadow;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   DXDraws, DXclass, DirectX, ExtCtrls, StdCtrls;
  8.  
  9. type
  10.   TfrmDX = class(TDXForm)
  11.     DXDraw: TDXDraw;
  12.     DXTimer1: TDXTimer;
  13.     Image1: TImage;
  14.     Image2: TImage;
  15.     Image3: TImage;
  16.     ScrollBar1: TScrollBar;
  17.     procedure DXDrawInitialize(Sender: TObject);
  18.     procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
  19.     procedure FormKeyPress(Sender: TObject; var Key: Char);
  20.     procedure Image1Click(Sender: TObject);
  21.     procedure Image2Click(Sender: TObject);
  22.     procedure Image3Click(Sender: TObject);
  23.     procedure ScrollBar1Change(Sender: TObject);
  24.     procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  25.       var ScrollPos: Integer);
  26.   private
  27.     { Private declarations }
  28.   public
  29.     { Public declarations }
  30.     SceneMeshBuilder      :Idirect3DRMMeshBuilder;
  31.     ObjectMesh            :Idirect3DRMMeshBuilder;
  32.     SceneFrame            :IDirect3DRMFrame;
  33.     Light                 :Idirect3DRMLight;
  34.     LightFrame            :Idirect3DRMFrame;
  35.     PlaneFrame            :IDirect3DRMFrame;
  36.     SphereFrame           :IDirect3DRMFrame;
  37.     Shadow                :Idirect3DRMVisual;
  38.  
  39.  
  40.   end;
  41.  
  42. var
  43.   frmDX: TfrmDX;
  44.   filename:string;
  45. implementation
  46.  
  47. {$R *.DFM}
  48.  
  49. procedure TfrmDX.DXDrawInitialize(Sender: TObject);
  50. begin
  51. DXtimer1.Enabled:=false;
  52. {create meshbulder}
  53. DXdraw.D3DRM.CreateMeshBuilder(SceneMeshBuilder);
  54. DXdraw.D3DRM.CreateMeshBuilder(ObjectMesh);
  55. {create frame}
  56. DXdraw.D3DRM.CreateFrame(DXdraw.scene,LightFrame);
  57. DXdraw.D3DRM.CreateFrame(DXdraw.scene,SceneFrame);
  58. DXdraw.D3DRM.CreateFrame(DXdraw.scene,SphereFrame);
  59. DXdraw.D3DRM.CreateFrame(DXdraw.scene,PlaneFrame);
  60. {setup view}
  61. DXdraw.Camera.SetPosition(DXdraw.scene,0,5,-30);
  62. {direction in Z axes    UP vector in Y axes }
  63. DXdraw.Camera.SetOrientation(DXdraw.scene,0,0,1,0,1,0);
  64. DXtimer1.Enabled:=true;
  65. {default scene light}
  66. DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 0.9, 0.9, 0.9, Light);
  67. DXDraw.Scene.AddLight(Light);
  68. {  Spot Light create and setting  }
  69. DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_SPOT, 1, 1, 1, Light);
  70. with light do
  71.        begin
  72.         setPenUmbra(0.2);   // outer Cone
  73.         setUmbra(0.15);     // inner Cone
  74.         SetRange(40);
  75.        end;
  76.  
  77. {load plane}
  78. FileName := ExtractFilePath(Application.ExeName)+'plane.x';
  79. ChDir(ExtractFilePath(FileName));
  80. SceneMeshBuilder.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
  81. SceneMeshBuilder.Scale(3, 3, 3);
  82. SceneFrame.AddVisual(SceneMeshBuilder);
  83.  
  84.  
  85. {load sphere}
  86. FileName := ExtractFilePath(Application.ExeName)+'sphere.x';
  87. ChDir(ExtractFilePath(FileName));
  88. ObjectMesh.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
  89. ObjectMesh.Scale(0.5, 0.5, 0.5);
  90.  
  91.  
  92. {Create Shadow}
  93. DXdraw.D3DRM.CreateShadow(ObjectMesh,
  94.                           Light,
  95.                           0,1,0,
  96.                           0,1,0,Shadow);
  97.  
  98. {add light}
  99. LightFrame.AddLight(Light);
  100. {set position}
  101. LightFrame.setposition(Dxdraw.scene,0,10,0);
  102. {add shadow to sphereFrame}
  103. SphereFrame.addVisual(shadow);
  104. {add mesh to sphereFrame}
  105. SphereFrame.addVisual(ObjectMesh);
  106. {set position}
  107. SphereFrame.SetPosition(Dxdraw.scene,0,5,0);
  108. end;
  109.  
  110. procedure TfrmDX.DXTimer1Timer(Sender: TObject; LagCount: Integer);
  111. begin
  112. DXdraw.Render;
  113. DXdraw.scene.move(1);
  114. DXdraw.flip;
  115. end;
  116.  
  117. procedure TfrmDX.FormKeyPress(Sender: TObject; var Key: Char);
  118. begin
  119. if key=#27 then close;
  120. if key='1' then begin
  121.                 SceneMeshBuilder.SetQuality(D3DRMRENDER_WIREFRAME);
  122.                 ObjectMesh.SetQuality(D3DRMRENDER_WIREFRAME);
  123.                 end;
  124. if key='2' then begin
  125.                 SceneMeshBuilder.SetQuality(D3DRMRENDER_FLAT);
  126.                 ObjectMesh.SetQuality(D3DRMRENDER_FLAT);
  127.                 end;
  128. if key='3' then begin
  129.                 SceneMeshBuilder.SetQuality(D3DRMRENDER_PHONG);
  130.                 ObjectMesh.SetQuality(D3DRMRENDER_PHONG);
  131.                 end;
  132.  
  133. end;
  134.  
  135. procedure TfrmDX.Image1Click(Sender: TObject);
  136. begin
  137. SceneMeshBuilder.SetQuality(D3DRMRENDER_WIREFRAME);
  138. ObjectMesh.SetQuality(D3DRMRENDER_WIREFRAME);
  139. end;
  140.  
  141. procedure TfrmDX.Image2Click(Sender: TObject);
  142. begin
  143. SceneMeshBuilder.SetQuality(D3DRMRENDER_FLAT);
  144. ObjectMesh.SetQuality(D3DRMRENDER_FLAT);
  145.  
  146. end;
  147.  
  148. procedure TfrmDX.Image3Click(Sender: TObject);
  149. begin
  150. SceneMeshBuilder.SetQuality(D3DRMRENDER_PHONG);
  151. ObjectMesh.SetQuality(D3DRMRENDER_PHONG);
  152.  
  153. end;
  154.  
  155. procedure TfrmDX.ScrollBar1Change(Sender: TObject);
  156. begin
  157. sphereframe.setposition(DXdraw.scene,0,-Scrollbar1.position/10,0);
  158. DXdraw.flip;
  159. end;
  160.  
  161. procedure TfrmDX.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  162.   var ScrollPos: Integer);
  163. begin
  164. DXdraw.render;
  165. end;
  166.  
  167. end.
  168.