Darksword 发表于 2014-12-9 22:06:56

Dx中曲线激光的实现方法

暑假的时候想做曲线激光,当时搜了半天找不到适合的解决办法来着,
看到了一些讨论的思路,例如求角平分线什么的,计算量感觉有点大,不太好
于是一时脑洞想到可以利用速度来确定运动方向!(咦这真的不是废话嘛?)

首先是类声明,我的思路是实际物体的属性/物体间的联系为一类,
绘制用到的方法(比如精灵,动画)为另一类,实际物体作为宿主。。
这里是曲线形精灵类~


核心的实现方法在这里~注释我想应该够的吧~


初始化的时候记得把index调好,纹理位置什么的设置对~


最后这里是新人~平时在学校找不到什么人讨论游戏制作,还请各位多多指教~!

krh 发表于 2014-12-9 23:13:56

我认为曲线激光的本质和《妖精大战争》中魔理沙的“彗星”符卡是一样的:

先定义一个能在任意形状上判定的方法,
然后定义一个头,就像lz做的那样
然后用头的移动轨道生成一个尾巴区域(unity里叫trailer)
最后把判定方法加到这个尾巴区域上

这样就是真正无缝的啦

Darksword 发表于 2014-12-9 23:33:38

本帖最后由 Darksword 于 2014-12-9 23:36 编辑

krh 发表于 2014-12-9 23:13 static/image/common/back.gif
我认为曲线激光的本质和《妖精大战争》中魔理沙的“彗星”符卡是一样的:

先定义一个能在任意形状上判定 ...
感谢回复和分享经验~!
不了解unity,只是在用c++和dx。。不过你的确提供了一个我不敢想的思路呢!
“首先找到任意形状判定的方法”,这点直接把我吓到了。。
应该是要拟合吧,用圆或矩形,或者直接去学习借鉴3D碰撞的方法?无论哪种效率都不敢想诶诶
trail的原理不太清楚,是不是类似粒子效果呢?
之前试过用离散的粒子/精灵,也许是我设计不到位,感觉不连续不好看噗。。
我这个试过,90度以上的直接拐弯会有失真(是直着拐,没有缓冲),
其他的看起来还好。。当然还需要修正。。。

诶诶刚刚查了一下,trail好酷炫的样子,又找到研究方向了!大感谢!

krh 发表于 2014-12-10 00:47:36

本帖最后由 krh 于 2014-12-9 12:57 编辑

trail 不是粒子,而是拖在后面的类似于痕迹的东西

关于那种方法……应该不是用拟合,至于到底用什么方法我也很好奇不过我认为dx里肯定有类似的方法的,用于判定自定义区域碰撞的方法
虽然我不确定按这条路找下去会不会有结果,但我似乎听说过一种判定“像素重叠”的方法

至于效率,肯定很低,不过神主的游戏中曲线激光也出现得不是很密集




phantomz 发表于 2014-12-10 13:30:42


矢量(x,y)的垂直矢量是(-y,x)和(y,-x),不必旋转90度

够密集应该也能像激光,至少我知道有些激光特效是密集粒子做的,只是第一个方法应该比较适合

musouKazagami 发表于 2014-12-10 13:39:39

虽然不是太懂……
可以当成好多个短的直激光连在一起来做吧?

HHui 发表于 2014-12-10 13:45:20

为一个激光束定义一个mesh,或者vertex点集,同时直接将激光的贴图映射到这些区域上,然后在vertex shader里面进行滤镜变换(比如类似PS的扭曲滤镜等效果),甚至还可以穿到pixel shader里面进行其它变换(比如傅立叶快速像素变换等)。

drzzm32 发表于 2014-12-10 14:06:34

首先,考虑你的素材是什么。
一个长椭圆弹?好。

OpenGL的纹理绑定是可以拉伸的。DX应该也可以。。。

虽然对一个激光弹使用三角网格感觉不现实。。。也可以吧。。。

激光轨迹已知,那么就可以生成这么一个网格,以顶点数目控制激光长度。激光轨迹就是激光中心线。

对了我这全部都是参数方程即时计算坐标。

控制参数就可以控制长度了(或者说内部循环。

至于判定,可以对轨迹距离进行判定,或者对顶点进行判定。

实际最好就是去看看神主怎么处理的,看看擦弹计数器的变化。。。

漆黑之翼 发表于 2014-12-10 14:27:47

我自己写的时候也是这么想的。碰撞的话,或许可以每个节点做一个圆形碰撞

Darksword 发表于 2014-12-10 17:26:38

HHui 发表于 2014-12-10 13:45 static/image/common/back.gif
为一个激光束定义一个mesh,或者vertex点集,同时直接将激光的贴图映射到这些区域上,然后在vertex shader里 ...

信号处理相关专业的Baka在这里看到FFT莫名感动QwQ 原来还能做滤波以外的事!
用shader来解决平滑扭曲的想法好棒!不过还请允许我再请教一下,
像这样的shader,大概是经过特化,只适合某种情况吧?
那么如何组织这些不同的内容呢?是写到一个.fx里,用不同的technique名呢,还是每个都是独立的fx呢0.0
然后,既然shader和对象紧密相关了,那么是不是它的存在和纹理等价了,也就是一个可绘制对象对应一个effect这样,而不应该用“effect影响全局"这样的观念理解了0.0?
页: [1] 2
查看完整版本: Dx中曲线激光的实现方法