游戏开发论坛

 找回密码
 立即注册
搜索
查看: 13030|回复: 28

d小调弹奏一下CS类型游戏弹痕的实现

[复制链接]

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-6-24 14:24:00 | 显示全部楼层 |阅读模式
开始学做图形的时候,也是对那些CS换枪等什么的很感兴趣。。。。。。。
今天来点特别的,d小调。。
简单聊聊弹痕的实现(PS,我只是YY一下,并不真正用代码实现,也不考虑速度问题):)

弹痕本身的图像可以是一个矩形加上纹理,出可以简单的用点来模拟。(在DX和OGL里面点的大小都是可调的,而且也可以贴上纹理。)从逆推来说,倒数第一步就是,假如找到了要贴图的那个点或是那个矩形,然后就把图贴上去,这样这可以了。(HL2里用的是bump,让人能看到孔,做法差不多)。当然你也可以做个粒子系统放动画。。。。墙灰掉下来的动画。。

倒数第二步就是要找到这个点或矩形,矩形和点的找法大同小异,以点来说明。怎么找到要贴图的那个点呢?最简单的做法就是做鼠标拣选,得到和光标相交的最近的那个面的点。。这儿相交要做到三角形的深度。。用XXXX算法还可以得到这一点在三角形内的纹理坐标,(名字不记得了,见谅,在realtime rendering 上面的介绍的射线三角形相交算法就是了)。对于大型场景来说,求交是一个层次下降的过程,这样才能大大提高速度,具体细节也不多介绍了。

关于拣选的资料,gameres上面都有的,OGL和DX的都有,DX的示例里也有。。怎么把屏幕坐标变成三维空间的坐标。。。
好了,这个简单的介绍完了。:)

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-6-24 19:15:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

我对这个问题也有点兴趣。不过后面有些东西没看懂。
交点坐标究竟是射线与三角形求交得到的,还是用unproject这样的投影反变换得到的?
你说的那个算法是直接从交点坐标计算出纹理坐标的呢?还是要先求出相交三角形和三角形平面内的交点,然后再投影到UV坐标计算得到的?

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
 楼主| 发表于 2006-6-25 00:43:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

回楼上的。
交点坐标求法如下:
1。先从屏幕坐标到投影空间坐标。
2。从投影空间坐标得到世界空间的坐标(从近裁剪面原点引出到cursor的点的坐标的射线)
3。求射线到世界上最近物体的交点。这个点才是要帖图的点。
楼上所说的unproject是OGL的那个函数?那个是直接得到世界空间的点,还要求交,而用了《realtime rendering》中介绍的那种算法得到的交点时,已经直接得到UV坐标了(算法名字不记得了,用外国人的名字命名的,记得头痛。。。。)。具体算法在本站上的 “Directx现鼠标拾取”也有介绍,这份代码实际上是MS的示例代码之一,用的就是那种算法,(在DX9。0B和dx9.0a的SDK里有拣选的代码,DX9。0C以后就没看到这份代码了。。)

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-6-25 12:59:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

如果弹痕的矩型贴在墙的平面上楼主又怎么解决z-buffer的失效呢?

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-6-25 19:26:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

楼上理解错了,lz的意思是用子纹理直接覆盖到墙面纹理上。不存在深度问题。

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-6-26 09:53:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

那如果是用子弹纹理直接覆盖到墙面纹理上又怎么解决:1。写入纹理的速度问题2。同一个场景一个墙面纹理被多个墙面使用,如果子弹纹理覆盖墙面纹理将在每个墙上留下弹痕

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-6-26 10:06:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

1.用类似ogl中子纹理实现光照贴图的方法,效率是可以接受的。
2.绘制每个tile墙面纹理的时候都按需要初始化一下子纹理,主纹理不变。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
 楼主| 发表于 2006-6-26 12:57:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

YoungSdikode老兄是不是要真正实现弹痕呢?我在上面的贴子里只是YY一下,不考虑到速度问题......事实上如果真实的要去做,用多重纹理应该更好,当然也可以用multpass来渲染,也可以和地面纹理处理方式一致。了解地形编辑器用纹理来刷路,刷石头等的实现方法就应该知道怎么样把弹痕纹理alpha混合到墙面上去。呵呵

22

主题

274

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2006-6-26 14:23:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

CS1.6里弹痕是新生成的固定大小的贴着墙面的QUAD,子弹打在多个面相邻的区域,会生成多个相接的小的QUAD,百分百的确定,因为我通过自己写的工具看了CS的线框模式.
我也仔细观察了Z值问题,应该做了Z BIAS,做的很好,加上QUAD不大,Z FIGHTING很不明显.
另外CS里中近距离处会有一条模糊/清晰的分界线(很多游戏都有)这个是因为MIPMAP没有使用ANISOTROPIC(各项异性过滤)造成的.

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-6-26 14:35:00 | 显示全部楼层

Re:d小调弹奏一下CS类型游戏弹痕的实现

是的,cs bsp场景显示我已经弄出来了,弹痕我还在考虑如何添加。

或许可以在地图的静态光影的贴图上做点文章,不过光影图普遍分辨率较低,当然了我还没试

过,现在忙考试,只是寻找最好的方法在去做
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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