游戏开发论坛

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

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

[复制链接]

18

主题

971

帖子

982

积分

高级会员

Rank: 4

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

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

从上面分析和几位达人的回贴中可以看到
实现上可以用N种不同的方法实现弹痕,在效果、效率等方面可能会不尽相同,应该说不同精度和速度要求,可以用不同的算法实现。

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

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

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

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

CS1.6里弹痕是新生成的固定大小的贴着墙面的QUAD,子弹打在多个面相邻的区域,会生成多个相接的小的QUAD,百分...

请问Z-BIAS是什么??

18

主题

971

帖子

982

积分

高级会员

Rank: 4

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

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

Z-BIAS翻译成中文就是 z偏移,是9.0版以前的dx所支持的一种处理策略。用来对付那些在同一平面内的不同物体,就是解决楼上在第四楼时所说的“z-buffer”失效,这种失效术语叫做“z-fighting".事实上z-bias不是一种优秀的解决方案,它依赖于硬件,在不同硬件上可能会出现不同的结果。所以ms在dx9以后放弃了z-bias,转而使用名叫"depth-bias"的方案来解决。
     以下部分是ms的dx文档对使用depth-bias的解释:
An application can help ensure that coplanar polygons are rendered properly by adding a bias to the z-values that the system uses when rendering the sets of coplanar polygons. To add a z-bias to a set of polygons, call the SetRenderState method just before rendering them, setting the State parameter to D3DRS_DEPTHBIAS, and the Value parameter to a value between 0-16 inclusive. A higher z-bias value increases the likelihood that the polygons you render will be visible when displayed with other coplanar polygons.

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

where m is the maximum depth slope of the triangle being rendered.

m = max(abs(delta z / delta x), abs(delta z / delta y))

The units for the D3DRS_DEPTHBIAS and D3DRS_SLOPESCALEDEPTHBIAS render states depend on whether z-buffering or w-buffering is enabled. The application must provide suitable values.

The bias is not applied to any line and point primitive. However, this bias needs to be applied to triangles drawn in wireframe mode.

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero

// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS

18

主题

971

帖子

982

积分

高级会员

Rank: 4

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

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

另外,本人也觉得没必要z-bias来做...因为这种渲染方式并不为ogl所支持.可以自己在平面的法向上向前移动极小的一个单位(0比如.0001个单位,调一个满意的就行了),这样大概谁也看不出来z有差别......

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

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

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

如果单纯用QUAD实现弹孔,那么在击中面是曲率较大的曲面的情况下,该怎么办呢?
不知道cs1.6里面能不能做这件事情。

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

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

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

谢谢whb9633的解惑!! [em13]

cs的face都是平面来的,没有曲面,

而且如果你开枪打的物体是所谓的实体,例如路灯,门 是没有弹痕的

22

主题

274

帖子

274

积分

中级会员

Rank: 3Rank: 3

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

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

Z-BIAS在OPENGL里有支持的,单纯的常量偏移值(通过PROJ MATRIX的)不能保证任何平面都合适,要根据多边形的SLOPE程度来设置.
在OPENGL里做这个的叫 GLPOLYGONOFFSET( XXXX );
D3D里等价的有2个RENDER STATE支持,一个是DEPTH-SLOPE,一个是DEPTH-BIAS.

另外在现在的图形硬件里只有平面,所谓的曲面在进行光栅化前都会离散取值,用平面近似.

其实一个避免Z-FIGHTING问题的最好办法就是"用相同的多边形"进行渲染,因为精确相等的浮点数,经过精确相同的矩阵变换,得到的Z值也是精确相等的,此时Z-TEST是LESS-EQUAL,所以完全吻合.很多游戏都利用了这个性质(WOW里所有贴着地表的影子,光标,特效等).
但CS不适合,因为CS的场景三角形高度优化,很多墙面就2个大三角形,为了渲染一个小子弹痕迹,就把这个大三角形渲染一边,开销会增加很多,所以选择生成子弹QUAD是很自然的.

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2006-6-27 03:57:00 | 显示全部楼层

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

很多游戏都利用了这个性质(WOW里所有贴着地表的影子,光标,特效等).
---
地表有关于xz平面单值映射的特性,容易找到击中面的邻接面。但是对于场景中一般物体(特别是严重凹凸,也就是我前面所说的曲率较大的曲面),如何找到击中面和它的邻接面来绘制"相同的多边形"呢?是不是还是要先离线处理计算邻接列表才行?

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
 楼主| 发表于 2006-6-27 07:47:00 | 显示全部楼层

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

其实一个避免Z-FIGHTING问题的最好办法就是"用相同的多边形"进行渲染,因为精确相等的浮点数,经过精确相同的矩阵变换,得到的Z值也是精确相等的,此时Z-TEST是LESS-EQUAL,所以完全吻合.很多游戏都利用了这个性质(WOW里所有贴着地表的影子,光标,特效等).
=======================================================
如果采用相同多边形进行渲染的话,就要严格地先渲染墙等被贴的多边形,然后渲染处理弹痕、海报等多边形,尽管用了LESS-EQUAL这种方式进行z-test,这样做具有明显的渲染顺序依赖。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
 楼主| 发表于 2006-6-27 07:50:00 | 显示全部楼层

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

另外,wow的影子指的是角色的影子么?场景中的所有的影子都是用的静态贴图,是在游戏开发完成前就预生成好了的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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