请介绍一下有关DirectX开发的书 (50分)

  • 主题发起人 主题发起人 arcore
  • 开始时间 开始时间
A

arcore

Unregistered / Unconfirmed
GUEST, unregistred user!
请介绍一下有关DirectX开发的书,资料也可以的。我主要想用到DirectShow,想实现
视频采集、压缩存贮以及回放等。
 
DirectX 一般用 VC++做!
 
推荐一位富翁的网站:kuga.51.net
你可以看一下:
 
jsxjd:用Delphi也可以做的吧。

请富翁们继续发言。
 
DELPHI完全可以做到!
 
ndyufei:请问,你以前做过此类的开发没有?可以指点一下吗?
 
在Delphi中使用DirectX

Delphi作为一种方便的可视化程序设计语言,一 直非常受大家喜爱。但它在图形处理、3D表现等方面 不很让人满意。如果说你要开发一个Windows95下的3D游戏,你会用什么工具呢?DirectX!不少人会不加 思索地答道。然而接触过DirectX的朋友们都知道它 内部的结构复杂,一般来说结合VC开发是一个理想 的组合。而要在Delphi中利用DirectX SDK真是难上 加难。但现在一切都好啦,有了本文介绍的DelphiX 组件,你终于可以用你熟悉的Delphi来开发漂亮的图 形程序了。

DelphiX是由日本人Hiroyuki Hori开发的使DirectX5.0在Delphi中更容易使用的一套控件,从网上 下载时叫DelphiX.zip,837KB。解开后在bin目录下 运行install_for?(根据你的Delphi版本号,支持3.0和 4.0),DelphiX会自动将控件安装到你的Delphi中,帮 助文件也自动融合到Delphi的帮助里,真是好用极了!

DelphiX 包括的控件有如下这些:
TDXDraw 最重要的控件,是DirectDraw和Direct3D的基础;
TDXDIB 一个代表DIB图像的控件;
TDXImageList 代表一组 Tpicture;
TDX3D Direct3D控件,要与TDXDraw共同使用;
TDXSound DirectSound控件;
TDXWave 一个代表波形Wave的控件;
TDXWaveList 一组Wave;
TDXInput 输入控制控件(操纵键盘和摇杆要靠它);
TDXPlay 通讯控件;
TDXSpriteEngine “精灵”引擎;
TDXTimer 高速时间控件;
TDXPaintbox TDXForm 专为DelphiX优化过的Form。

DirectDraw中重要的对象有:

TDirectDraw对象
DirectDraw应用程序的核心,它是你创建的第一个对象。创建了DirectDraw对象后,可以在它的基础上创建其它所有相关的对象。在DelphiX中的TDXdraw.ddraw属性即是一个Tdi rectDraw对象。

TDirectDrawSurface对象
表征了一块内存区 域,在该区域的数据将作为图像显示在屏幕上或移动 到其它表面上。

TDirectDrawPalette对象
表征了一个用于表面 的16色或256色的索引调色板,它包含了一系列描述 同表面相关的RGB颜色索引值。

TDirectDrawClipper对象
帮助你禁止向表面的 某一位置或超出表面的位置块写数据。

Tsprite对象
代表了“精灵”,在许多视频游戏都 使用了精灵。从最基本的意义上来讲,一个精灵就是 在屏幕上移动的图像。精灵画在一个表面上,覆盖在 已有的背景上,合成后的图像被送到屏幕上显示出来,在DelphiX中通过TspriteEngine实现对Tsprite的控制。

TDirectDrawSurfaceCanvas对象
提供方便的 访问机制,你可以像访问一般Canvas对象一样访问 它。TDXDraw.Surface.Canvas即是这样一个对象。

TdirectDrawDisplay对象
控制着DirectDraw的显示模式,TdxDraw.display是这样一个对象。

DelphiX基本上严格按照Microsoft DirectX SDK 开发包来将其功能在Delphi中实现出来。所以,如果 你对DirectX SDK比较熟悉的话,你会发现大多数程 序从C移植到Delphi是很容易的事。DelphiX中没有提供帮助的地方,你可以在DirectX SDK中获得答案。

下面通过一个简单的例子对如何利用DelphiX编 程作一介绍,只涉及Ddraw二维的一小部分。

Unit Unit1;


interface
uses Windows.Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DXClass, DXDraws, DIB;

type
TForm1=class(TDXForm)
DXDraw1:TDXDraw;

DXTimer1:TDXTimer;

DXDIB1:TDXDIB;


procedure DXDrawlFinalize(Sender:Tobject);

procedure DXDraw1Initialize(Sender:Tobject);

procedure DXDraw1RestoreSurfase(Sender:Tobject);

procedure DXTimer1Timer(
Sendsr:Tobject;LagCount:Integer);

procedure FormActivate(Sender:Tobject);


private
{Private declarations}
public
{Public declarations}
private
Fsurface:TDirectDrawSurface;

end;



var
Form1:TForm1;

x,y:integer;


implementation

{$R *.DFM}

procedure TForm1.DXDrawlInitialize(Sender:Tobject);

begin

Fsurface:=TDirectDrawSurface.Create(DXDraw1.Ddraw);

{创建抽象图像表面}
end;



procedure TForm1.DXDraw1Finalize(Sender:Tobject);

begin

Fsurface.Free;
Fsurface: = nil;

{释放表面}
end;



procedure TForm1.DXDraw1RestoreSurfare(Sender:Tobject);

begin

Fsurface.LoadfromGraphic(DXDIB1.DIB);
{将位图送入抽象表面}
end;



procedure TForm1.DXTimer1Timer(
Sendsr.Tobject;LagCount integer);

begin

if not DXDraw1.CanDraw then
Exit;
{在绘制之前检验是否允许}
DXDraw1.Surfaca.Fill(0);

x: = x + 1;

y: = y + 1;

DXDraw1.Surface.Draw(X, Y,
Fsurface.ClientRect,Fsur face, True);

DXDraw1.Flip;
{将内存中的表面再将映射入实际显存}
end;



procedure TForm1.FormActivate(Sender:Tobject);

begin

X: =0;

y: =0;

end;



end.


首先要在程序开头包含DXClass、DXDraws两个 Unit(TDXtimer、TDXForm在DXClass中定义,TDX Draw在DXDraws中定义)。程序用的Form不要从一 般的Tform派生,而应从TDXForm中派生。在Form 中放入TDXDraw控件和TDXTimer控件,将其inter val值设为0。对DXDraw1控件改变其属性,使其与 Form大小一致。再放人一个TDXDIB控件,在其属性 中的DIB一项调人一个位图,如Windows下的bubbles.bmp。定义一个DirectDraw表面Fsurface,这是一 个抽象内存表面,以后会将它映射到DXDraw对象的 Surface上。在DXDraw的Events一栏中编写OnIni tialize、OnFinalize、OnRestoreSurface三个过程,之后便 可以根据需要对表面进行操纵。

另外,要完成上面程序的功能,还有其他不少办 法。例如利用TDXImageList对象,可以用它的方法 Imagelist.items[N].draw来完成同样功能。

 
用 Delphi 确实可以做。而且和 VC++ 做的过程也好,方法也好,可以基本一样外,还可
以利用 Delphi 更方便地做。举例来讲,装入一个 Bitmap ,使用 VC++ ,你必须手工处
理将物理文件向内存装入,使用 Delphi 直接就可以使用 Canvas 。
DirectX 有两方面的内容,一是 2D 一是 3D ,在简单的应用中,可以利用 Delphi 很多
已有的能力,但在复杂的应用中,和 VC++ 相比并没有优势,都必须一步一步建立模型和
引擎。VC++ 的优势是 Microsoft 直接提供 n 多的例子和头文件,Delphi 必须第三方或
自己来翻译头文件和数据类型。一旦有了头文件,很多初始化的工作是例行公事,除非使
用 DelphiX 这类的控件。否则,Microsoft 为 VC++ 提供的例子,只需要简单的改动即
可在 Delphi 下编译。改动的也无非是一些类的名称有需要加一个 T 这样的操作。....
 
其实我主要要用到DirectX中的DirectShow。如果大家有这方面的资料,或是Delphi下
的DirectX的开发类库,请帮一下,小弟感激不尽。
 
后退
顶部