游戏开发论坛

 找回密码
 立即注册
搜索
楼主: sandy_zc_1

Dx8的问题

[复制链接]

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-9-11 16:08:00 | 显示全部楼层

Re:Dx8的问题

1、我觉得主要是用来读写贴图内存的
zh1110的网站上有教程:http://zh1110.nease.net/Direct%20graphics/AccessingTexture.htm

2、。。。。。。

3、参考1,里面说得很详细的了,只是VB逐点处理很慢,最好写个DLL专门处理这个,我正在写这样的DLL;还有就是Rendre To Texture,还是先自己看看zh1110的教程:http://zh1110.nease.net/Direct%20graphics/renderTarget.htm,看不懂再问

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
 楼主| 发表于 2005-9-11 17:28:00 | 显示全部楼层

Re:Dx8的问题

谢谢,zh1110的教程我大概看了一下,好像是利用D3DSurface8作为中介来实现Texture对Texture的拷贝,但是问题又来了:

1、D3DSurface8与D3DTexture8有何联系?看例子好像是通过GetSurfaceLevel这个方法来建立联系,不过具体意义是什么?是不是在使用这个方法得到的Surface上进行操作的结果就会被保存到Texture里?

2、Direct3DDevice8.DrawPrimitiveUP 这个方法怎么用?尤其是它传递的变量里面并没有Texture,但是却有一个VertexStreamZeroDataArray As Any,dx8sdk和zh1110的例子里面都是自定义一个类型,好像Dx8对这个变量类型没有什么要求,但是真的可以随便定义吗?到底要传递一个怎么样的数据结构?

3、Direct3DDevice8.SetTexture有何作用?它有一个参数Texture As Direct3DBaseTexture8,但是zh1110的例子里面传递的却是一个Direct3DTexture8的对象!
Direct3DTexture8、Direct3DBaseTexture8、Direct3DCubeTexture8这三者到底是个什么关系?

4、sdk和zh1110的例子中都没有用到D3DSprite,好像是使用DrawPrimitiveUP来绘制图像,它和D3DSprite中的Draw到底哪个更快?我感觉后者好像就是把前者封装了一下,使其用起来更方便,对吗?

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
 楼主| 发表于 2005-9-11 17:39:00 | 显示全部楼层

Re:Dx8的问题

另外,我发现D3DDevice8的绘制并不是没有目标的,好像都是渲染在一个D3DSurface8对象上,对吗?

我感觉D3DSurface8就像DDrawSurface7,其中用GetRenderTarget得到的那个就相当于DDraw里面的主表面,两个D3DSurface8也可以相互拷贝,但是功能比Blt少很多,那么D3DX里面的D3DSprite到底是利用什么达到那么多的功能呢?

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2005-9-11 19:18:00 | 显示全部楼层

Re:Dx8的问题

zh1110的网站的"渲染目标层"是将3D模型拍摄,画到 Texture 里,然后贴到球上
如果只是做2D部分使用 D3DXSprite 就可以了,要研究3D建意学 DirectX9

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-9-12 00:57:00 | 显示全部楼层

Re:Dx8的问题

十二楼:
1、Surface与Texture是两个相互独立的对象,GetSurfaceLevel可以"笼统地"理解为用Surface引用Texture,修改Surface对象等于修改了Texture对象。实际上只是用Surface对象的方法实现DX7的DDraw,draw的目标是Texture。以上只是"笼统"的解析,不过如果你会用DX7的话应该很容易理解我的话

2、DrawPrimitiveUP还没研究

3、SetTexture只是在内存里开辟一个区域来放Texture,是个空的Texture。至于Direct3DBaseTexture8类型没有研究

4、(1)Sprite的渲染速度跟它的Texture属性有关,硬件在切换Texture时的开销是很利害的,只要优化一下渲染的算法,Sprite也是很快的。哦,还有提一下drawSprite的 color参数,是ARGB类型的,该方法只认“A”,忽略“RGB”,也就是Sprite的alpha混合,这是硬件计算的,对渲染速度的影响几乎可以忽略不计;
    (2)没错!Sprite只是封装了而已,而且是用DX8的方式,不但方便,也使程序的结构统一

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-9-12 01:12:00 | 显示全部楼层

Re:Dx8的问题

十三楼:

DX8渲染时是使用了类似DX7时的双缓冲,这个在CreateDevice时可以设置,你理解为渲染在Surface对象上也错不了

Surface的lock就可以达到Blt的作用,这个参考其它贴

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2005-9-12 19:08:00 | 显示全部楼层

Re: Re:Dx8的问题

sandy_zc_1: Rex8的问题

谢谢,zh1110的教程我大概看了一下,好像是利用D3DSurface8作为中介来实现Texture对Texture的拷贝,但是问题...

1 你可以把“Surface”理解为Texture的低级处理,可以用于贴图的修改,或自绘一张贴图

2 DrawPrimitiveUP绘出你描述的 VertexBuffer
3 SetTexture 为你下面要渲染的DrawPrimitiveUP设一个贴图。因为有基本贴图、凹凸贴图等,所以有Direct3DTexture8、Direct3DBaseTexture8、Direct3DCubeTexture8 常用的是Direct3DTexture8

4 D3DSprte 就是处理2D的,做2D就用他!

以上是我自已的应用中的感悟,并非专业解释,如果有误,还忘指正!

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
 楼主| 发表于 2005-9-18 14:20:00 | 显示全部楼层

Re:Dx8的问题

继续问:

你们用Dx8时如何做预处理呢?

比如有个大场景地图是用很多小东西拼在一起的,
在循环开始之前需要将这个场景拼好,
你们怎么讲这些小东西合成一个材质呢?
(尤其是CopyRect基本没有什么功能,连镂空都不支持?)

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-9-18 17:51:00 | 显示全部楼层

Re:Dx8的问题

我是用VC++写DLL

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2005-9-20 10:13:00 | 显示全部楼层

Re:Dx8的问题

sandy_zc_1: Rex8的问题

继续问:

你们用Dx8时如何做预处理呢?

比如有个大场景地图是用很多小东西拼在一起的,
在循环开始之...


你做2D还是3D?
如果做2D,用 D3DXSprite,按你原来的方法拼地图。

如果做3D要图镂空,就要打开 AlphaBlend 并指定混合的方式!
"CopyRects",一般不用!

3D 地图有两种最常用的,BSP,Terrain
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 22:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表