📄 dxsprite.pas
字号:
unit DXSprite;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DXDraws, DXclass, DirectX, ExtCtrls, StdCtrls;
type
TfrmDX = class(TDXForm)
DXDraw: TDXDraw;
DXTimer1: TDXTimer;
Image1: TImage;
Image2: TImage;
Image3: TImage;
ScrollBar1: TScrollBar;
procedure DXDrawInitialize(Sender: TObject);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Image1Click(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Image3Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
private
{ Private declarations }
public
{ Public declarations }
SceneMeshBuilder :Idirect3DRMMeshBuilder;
ObjectMesh :Idirect3DRMMeshBuilder;
SceneFrame :IDirect3DRMFrame;
Light :Idirect3DRMLight;
LightFrame :Idirect3DRMFrame;
PlaneFrame :IDirect3DRMFrame;
SphereFrame :IDirect3DRMFrame;
Shadow :Idirect3DRMVisual;
// -----------------------------------------
Frame,Axis,Circle :IDirect3DRMFrame;
tex :IDirect3DRMTexture;
inf :D3DRMIMAGE;
end;
var
frmDX: TfrmDX;
filename:string;
implementation
{$R *.DFM}
procedure TfrmDX.DXDrawInitialize(Sender: TObject);
begin
DXtimer1.Enabled:=false;
{create meshbulder}
DXdraw.D3DRM.CreateMeshBuilder(SceneMeshBuilder);
DXdraw.D3DRM.CreateMeshBuilder(ObjectMesh);
{create frame}
DXdraw.D3DRM.CreateFrame(DXdraw.scene,LightFrame);
DXdraw.D3DRM.CreateFrame(DXdraw.scene,SceneFrame);
DXdraw.D3DRM.CreateFrame(DXdraw.scene,SphereFrame);
DXdraw.D3DRM.CreateFrame(DXdraw.scene,PlaneFrame);
DXdraw.D3DRM.CreateFrame(DXdraw.scene,frame);
{setup view}
DXdraw.Camera.SetPosition(DXdraw.scene,0,2,-10);
{direction in Z axes UP vector in Y axes }
DXdraw.Camera.SetOrientation(DXdraw.scene,0,0,1,0,1,0);
//DXdraw.Camera.SetRotation(DXdraw.scene,0,1,0,0.04);
DXtimer1.Enabled:=true;
{default scene light}
DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 0.9, 0.9, 0.9, Light);
DXDraw.Scene.AddLight(Light);
{ Spot Light create and setting }
DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_SPOT, 1, 1, 1, Light);
with light do
begin
setPenUmbra(0.2); // outer Cone
setUmbra(0.15); // inner Cone
SetRange(40);
end;
{load plane}
FileName := ExtractFilePath(Application.ExeName)+'plane.x';
ChDir(ExtractFilePath(FileName));
SceneMeshBuilder.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
SceneMeshBuilder.Scale(3, 3, 3);
SceneFrame.SetPosition(DXdraw.scene,0,-1,0);
SceneFrame.AddVisual(SceneMeshBuilder);
frame.SetPosition(DXdraw.scene,0,0,0);
frame.SetOrientation(DXdraw.scene,0,1,0,0,0,1);
//frame.setrotation(Dxdraw.scene,0,0.9,0,0.04);
Dxdraw.D3DRM.CreateTexture(inf,tex); // create texture
Dxdraw.D3DRM.LoadTexture(pchar('expl.bmp'),tex); // load texture
tex.SetColors(256); // set color
tex.SetShades(1); // set shade
tex.SetDecalScale(0); // set scale N=>0, if >0 then scale down
tex.SetDecalOrigin(64,64); // set origin
tex.SetDecalTransparency(true); // transparency ON (default black color)
Dxdraw.D3DRM.CreateFrame(frame,axis); // create axis frame
Frame.SetRotation(DXdraw.scene,0,0,1,0.04); // set rotation for frame around Z
axis.SetRotation(DXdraw.scene,0,1,0,0.04); // set rotation for AXIS around Y
Dxdraw.D3DRM.CreateFrame(axis,circle); // create circle frame
circle.SetPosition(axis,2.6,0,0); // set position
circle.AddVisual(tex); // add texture(sprite) to circle
end;
procedure TfrmDX.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
DXdraw.Render;
DXdraw.scene.move(1);
DXdraw.flip;
end;
procedure TfrmDX.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#27 then close;
if key='1' then begin
SceneMeshBuilder.SetQuality(D3DRMRENDER_WIREFRAME);
ObjectMesh.SetQuality(D3DRMRENDER_WIREFRAME);
end;
if key='2' then begin
SceneMeshBuilder.SetQuality(D3DRMRENDER_FLAT);
ObjectMesh.SetQuality(D3DRMRENDER_FLAT);
end;
if key='3' then begin
SceneMeshBuilder.SetQuality(D3DRMRENDER_PHONG);
ObjectMesh.SetQuality(D3DRMRENDER_PHONG);
end;
end;
procedure TfrmDX.Image1Click(Sender: TObject);
begin
SceneMeshBuilder.SetQuality(D3DRMRENDER_WIREFRAME);
ObjectMesh.SetQuality(D3DRMRENDER_WIREFRAME);
end;
procedure TfrmDX.Image2Click(Sender: TObject);
begin
SceneMeshBuilder.SetQuality(D3DRMRENDER_FLAT);
ObjectMesh.SetQuality(D3DRMRENDER_FLAT);
end;
procedure TfrmDX.Image3Click(Sender: TObject);
begin
SceneMeshBuilder.SetQuality(D3DRMRENDER_PHONG);
ObjectMesh.SetQuality(D3DRMRENDER_PHONG);
end;
procedure TfrmDX.ScrollBar1Change(Sender: TObject);
begin
tex.SetDecalSize(scrollbar1.position,scrollbar1.position);
DXdraw.flip;
end;
procedure TfrmDX.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
DXdraw.render;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -