游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5816|回复: 15

关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的几

[复制链接]

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
发表于 2006-10-8 18:40:00 | 显示全部楼层 |阅读模式
本来想写信向瓮云兵前辈请教这些问题的,也许他太忙,写了信一直不见回复,就拿到这里向大家请教来了。下面是我的几个问题。
关于粒子系统部分的问题:
问题1:
laser系统部分看不到效果,我认为是给出的代码没有往系统中添加任何粒子.因此我加了下面的语句,这样按住空格键就能开枪了.
// fire!!!!!!!!!!!!!!!!
  //
   if( ::GetAsyncKeyState(VK_SPACE) & 0x8000f )
         Gun->addParticle();

问题2:
火花系统部分重写了preRender()函数,用下面的函数改变了混合因素.
_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
    _device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
这样就可以达到去掉 flare.bmp 图片背景色(当然这里只能是黑色)的效果(即只显示圆形的火花).不知道我理解的对吗?
如果是我这样理解的话,为什么雪花系统部分没有象火花系统一样重写preRender函数呢?最后要显示圆形的雪花的话,不也要去掉snow.bmp图片的背景色吗?
我试着重写了一下preRender,结果雪花变成了白色的正方型,实在是不理解,望赐教.

问题3:关于粒子最后显示在屏幕上颜色的计算问题:
我的理解是这样的:先利用属性表里粒子的颜色和纹理颜色进行计算,(但是在preRender函数当中并没有设置相应的计算方法,难道是用默认的计算方法吗?)然后将结果与后缓冲区的颜色(也就是整个基本场景)混合.这样理解对吗?不对的地方,请指教.



4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-9 10:24:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

怎么没人呀,没看过这本书吗?极力推荐初学看!!!!

17

主题

258

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2006-10-9 23:48:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

去背景颜色,最好用alpha测试,这样比较可靠.

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2006-10-10 15:56:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

等下我看看代码~大家一起研究下~
我QQ70924101

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-10 17:44:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

引用:ddrmsdos
去背景颜色,最好用alpha测试,这样比较可靠.

------------------------------------------------
去背景颜色,一般确实是用alpha测试,但为什么比较可靠?这怎么理解呀?
这里用下面的语句确实是可以去背景色,因为背景色为黑色,难道你的意思是这样做没有alpha测试可靠吗?可以解释一下吗?
device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
    _device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-11 12:01:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

火花系统中重写的prerend函数效果分析如下:
             resutltcolor=sourcecolor*(1,1,1,1)+destcolor*(1,1,1,1)
               =sourcecolor+destcolor
因为火花的背景色为黑色(0,0,0),因此,黑色部分与destcolor相加的结果还是为destcolor的颜色,这样就去掉了背景色。

真的不明白为什么雪花系统部分没有象火花系统一样重写preRender函数呢,最后要显示圆形的雪花的话,不也要去掉snow.bmp图片的背景色吗?
我试着重写了一下preRender,结果雪花变成了白色的正方型,实在是不理解,望赐教.

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-12 20:24:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

我现在的理解是这样的:

device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
    _device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);


resultColor=soureColor*(1,1,1,1)+destColor*(1,1,1,1)
            =soureColor+destColor
因为flare.bmp 图片的背景色是黑色的,因此经过相加就能去背了。对吗?

而snow.bmp 图片的alpha值是0,因此用下面的语句:
_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
_device->SetRenderState(D3DRS_DESTBLEND,
就可以去背了,因此snow system也就不需要重写preRender函数了,是这样的吗?

如果我上面的理解是对的话,我还有几个地方不能理解的:snow.bmp 图片的背景色也是黑色(通过眼睛判断的),
为什么用fire system去背的方法不行呢? 我想也许snow.bmp 图片的背景色不是黑色吧,于是我将fire.bmp 拷到snow system中,当然名字也改成了snow.bmp,这下snow.bmp的背景色总该是黑色了吧,但我试了一下还是不行,实在不能理解?

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-13 14:28:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

怎么没人呀

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-13 14:34:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的

瓮云兵前辈给我回信,很感谢他,不过上面我提到的问题还是没有解决掉,欢迎大家发表看法

4

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
 楼主| 发表于 2006-10-14 16:59:00 | 显示全部楼层

Re:关于瓮云兵前辈翻译的《3d游戏程序设计入门》一书的


今天用工具打开snow.bmp和fire.bmp,竟然发现fire.bmp的背景色不是(0,0,0),而是(4,4,4)
而snow.bmp的背景色却是(0,0,0),这样的话,我就更不能理解了。
那位看过这本书的朋友,一起讨论一下吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 20:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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