DirectX 8的问题,请D8各大高手指点~~(300分)

  • 主题发起人 主题发起人 showton
  • 开始时间 开始时间
S

showton

Unregistered / Unconfirmed
GUEST, unregistred user!
在d8中是可以用一个叫CDisplay的类表示ddraw对象,主页面和后台页面,这个类控制大多数的blt操作.一个CSurface类控制所有的offscreen对象,负责加载图形数据,管理图形数据.程序中需要创建一个CDisplay对象,然后进行一系列的设置,然后根据需要创建出相当的CSurface对象,加载图形,以后有blt操作的时候,调用CDisplay对象的相关函数,把CSurface对象作为参数就可以了.

我需要返回主页面的时候用CDisplay 类的GetDirectDraw() 可以得到,但是返回的类型却是LPDIRECTDRAW7???
这是不是有什么问题,我究竟能不能再继续使用CDisplay来简单的完成一些D8的功能了?如果我想实现alpha混合,用CDispaly如何实现???我尝试了很久都没有办法///
另外哪里有好一点的针对D8的教程可以学习?我想先学习2D的相关技术//感谢~~

 
从DX8开始已经不提供IDirectDraw这个接口了,但IDirectDraw7还仍然可以使用。不过还
可以在DX8中找到一些痕迹,就象你说的离屏操作。但是DX8的2D功能明显不如DX7好用。
大部分情况下,D3DX提供的一些2D功能可以解决问题的。
我不知道你需要实现什么样的alpha混合,我认为不需要CDisplay来实现呀。有两种方案:
1.直接建立一个离屏渲染表面,然后用这个表面去建立纹理;
2.直接建立纹理,在纹理上使用D3DX作2D操作。

另外,我那个贴子上有用GDI操作纹理的源码,可以参考。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1723095

另外,最好的教程应该是DX8的SDK了,你可以从MS下载一个。不过很多示例原码也是很好
的学习过程。
 
啊?用3D渲染出来2D??
难怪我找了那么多例子都没有办法正常的运行//
之前我先看了些D8的3D技术,然后回过头从2D开始自己做一些实例~谁知道到处碰壁~
只是想实现一个简单的图像半透明的alpha混合~
却无从下手。。
SDK我当然装了~里面的例子我也看了~但好像没有什么alpha之类图形特效的例子哦//
那这样你的意思是~~我放弃CDisplay而改用3D的渲染来实现2D图像及特效?
是这样吗?
 
3D中的2D一般就是对纹理进行操作。如果你需要在景中显示某个2D图片的话,也需要建立
一个已Transform的矩形(两个三角形,顶点格式带有D3DFVF_XYZRHW),然后设置其纹理坐
标,一渲染就行了。
你需要alpha混合,这样的例子很多,MFCTex下就有一个,如果你不想那么复杂,我可以
给你一个方案:
1.定义一个类,类中有这样的方法实现一个平面渲染(方法前面已述),可以指定大小、纹
理图片、透明度;
2.生成一个类实例G,渲染底纹理,透明度为0;
3.生成一个类实例F,渲染面纹理,透明度可以指定。
4.Render的时候先渲染G再渲染F,非常爽,我经常这样干。

当然关键是设计这个类了。因为我不知道你使用的框架,所以无法给你提供代码。步骤是
这样的:
1.初始化的时候要取得纹理图片并放到IDirect3DTexture8中;
2.建立一个顶点缓冲区IDirect3DVertexBuffer8;
3.准备渲染,保存状态块,并设置新的状态;
4.六个顶点组成两个三角形,顶点的尺寸单位为象素,根据图片来;
5.顶点纹理从标可以是(0,0)~(1,1),根据你的纹理图片来定;
6.指定顶点格式及StreamSource,用设备的DrawPrimitive方法渲染即可。
 
实现半透明的过程中需要用SetTextureStageState方法设置好参数。这方面你看看SDK的文
章。具体的参数序号有:
D3DTSS_ALPHAOP
D3DTSS_ALPHAARG1
D3DTSS_ALPHAARG2
 
当然,渲染状态也重要。在使用SetRenderState的时候注意以下参数序号:
D3DRS_ALPHABLENDENABLE
D3DRS_SRCBLEND
D3DRS_DESTBLEND
 
接受答案了.
 
后退
顶部