游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8304|回复: 20

Dx8的问题

[复制链接]

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-9-4 18:34:00 | 显示全部楼层 |阅读模式
从DDraw7转向D3Dsprite,有很多问题望Dx8高手指教:

1、DDraw7里面的Blt方法是从一个表面拷贝信息到另一个表面,但D3Dsprite中的Draw只有原Texture,目标在哪里呢?不会直接到了屏幕上了吧?(D3DDevice)

2、DDraw7里面有DrawLine、DrawBox、BltColorFIll等绘图函数,D3D8里面有相似功能吗?(不会得自己一个一个改点吧)

3、由于DDraw7的Blt方法是从一个Surface到另一个Surface,所以一个作为目标的Surface下次可以作为源,这样可以通过多次Blt江Surface混合已达到一些效果,Dx8中如何实现呢?

望赐教,谢谢!

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-9-4 20:25:00 | 显示全部楼层

Re:Dx8的问题

1、真聪明,就是画在屏幕上,不过是没有Z感的(意思即:与2D一样)
2、有个d3dline等等,查看SDK帮助
3、混合可以用D3D的渲染状态来Alpha混合

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

积分
252
发表于 2005-9-4 23:02:00 | 显示全部楼层

Re:Dx8的问题

先说明,本人也刚接触DX8不久

1. Sprite的Texture属性是修改的重点,很明显,此属性是个引用(或者说指针),指向Texture对象,只需把渲染平面设定为该对象,然后render to surface就作出了新的贴图,还原渲染平面渲染出Sprite就可以了,不过实验证明,用多个Sprite重叠比较快,DX自己会计算Alpha混合

2.DX有对应的函数,找找就知道,具体不记得了

3.主要用CopyRace或者lock,不过巨慢;CopyRace还勉强,但似乎不能Alpha混合以及楼空,具体还在试验中

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-9-5 13:00:00 | 显示全部楼层

Re:Dx8的问题

关于第3个问题,可以通过LPDIRECT3DDEVICE8->SetRenderTarget()来解决。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-9-5 13:25:00 | 显示全部楼层

Re:Dx8的问题

http://bbs.gameres.com/showthread.asp?threadid=33886

完整例子,里面包含了,Sprite等各种应用,Alpha-Blending,字体,动画,材质,Vector,SkinMesh,DirectInput,没有涉及的是光照,还有一个没有涉及按照游戏之家说的是音乐和视频,其实还有网络部分也没有涉及

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-9-5 13:41:00 | 显示全部楼层

Re:Dx8的问题

D3D下制作2D游戏(准确说是游戏的2D部分)有3种方式
1、使用Direct3DSurface8接口,类似DDraw,基本上和DDraw用法没什么区别,唯一变化就是用起来更方便,D3D8用CopyRect作类似Blt的操作,D3D9下用UpdateSurface来做类似Blt操作,功能都是一样的

2、使用Direct3DVertexBuffer8的RHW顶点格式来模拟平面,这个也很方便,可以用渲染3D的方式来渲染2D

3、直接使用D3DXSprite,这个效率也很高,据说早期3D显卡会有问题

上面的3种方式都非常方便,基本上不用Lock表面

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-9-5 14:09:00 | 显示全部楼层

Re:Dx8的问题

再说一下3D游戏的流程

1、首先调用CreateDevice生成D3D设备和其他接口
2、调用SetRenderState设置全局的渲染参数,比如打开ZBuffer,打开光照等等

Do While True
    3、Direct3DDevice8::Clear
    4、Direct3DDevice8::BeginScene
        5、SetLight设置光照
        6、设置视野矩阵变换 Direct3DDevice8::SetTransform D3DTS_VIEW
        7、下面渲染每个3D对象
        For Each 3D对象
            8、设置每个对象的世界矩阵 Direct3DDevice8::SetTransform D3DTS_WORLD
            9、SetTextureStageState,SetRenderState,设置每个对象的渲染参数,比如是否使用Alpha-Blending等等
            10、设置材质属性
            11、渲染对象   
        Next
        12、设置透视变换矩阵 SetTransform D3DTS_PROJECTION
        13、下面渲染2D对象,渲染2D对象一般是先图片后文字
        14、SetTextureStageState,SetRenderState设置2D渲染参数
        D3DXSprite::Begin
            For Each 2D对象
                15、D3DXSprite:raw
                16、D3DXFont::Draw
            Next
        D3DXSprite::End
    17、Direct3DDevice8::EndScene
    18、Direct3DDevice8:resent
Loop

如果我们不做3D游戏,那么3D的那一部分就不用作了

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

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

Re: Dx8的问题

终于从宿舍中解放出来了,还没启动VB就来回帖,呵呵。

仔细看了回帖,收获不少,但还有些问题:

1、D3Dsprite好像就是D3DDevice先产生一个3D场景,以后的Draw就是画在这个场景的最前面,对吗?

2、关于用D3d进行基本图形的绘制,还是不太清楚,sdk里面也查不到d3dline。能将详细点吗?

3、这时我最关心的问题,就是用D3DSprite编2D的程序员是怎样达到DDraw的混合方法的:
由于D3DSprite直接绘制到屏幕,无法将此次绘制结果当作下次的绘制源,这样有很多东西不好实现。
比如有时候我需要进行个预处理,把很多图片绘制在一个Surface上,主循环中就只需要Blt这个Surface就行了,不需要再一个个绘制,在D3DSprite中如何实现呢?
还有一些遮罩效果,或者说蒙版效果,在DDraw里利用两三个Surface加上ColorKey可以很轻松完成,D3DSprite怎么办呢?

如此图中的Mask混合效果
sf_200591021392.gif

53

主题

241

帖子

252

积分

中级会员

Rank: 3Rank: 3

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

Re:Dx8的问题

1.可以画在后面的
2.本人懒查
3.DrawSprite时有个透明度参数,DX会自动计算当前的Sprite与后面的物体的Alpha Blending

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

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

Re:Dx8的问题

还是不是很明白。

1、那个D3DSurface8怎么用?

2、继续请教如何在Dx8中绘制2D图形。

3、如何在运行时修改Texture的内容?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 02:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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