如何在Unity3d中unity实现裸眼3d效果战争迷雾效果

&&&&unity3d战争迷雾插件
unity3d战争迷雾插件
Unity3D引擎下专门实现战争迷雾的插件
若举报审核通过,可奖励20下载分
被举报人:
objectivess
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行谁知道战争迷雾那个效果怎么弄?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:61,446贴子:
谁知道战争迷雾那个效果怎么弄?收藏
就是lol洞察技能那个效果,在玩家周围形成一个圈可视,其他地方为黑的
火星时代作为专业unity3d研发培训机构,依靠多年游戏教学实力,让您快速成为u3d工程师.毕业月薪&12000起&.详情请点击&&&
上次不是有人发过插件?~~~
那个不是在render setting里面有一个fog么? 好像是这个吧 不然另外还有一个是image effect里面有一个。。具体记不得
上次听人说过
Fog Of War shader这个名字自己搜一下。没电脑在手头。。只能帮你说出个名字了
投影不能实现?
unity圣典里有
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或鏈?被鏂囩珷鎬绘帓琛岀増
鏈?被鏂囩珷鏈?湀鎺掕?
鏈?被鏂囩珷鏈?懆鎺掕?
鐩稿叧鏂囩珷1975人阅读
技术相关(41)
在OpenGL中绘制的时候,有时候想使新画的颜色和已经有的颜色按照一定的方式进行混合,比如想使物体拥有半透明的效果,或者绘制叠加光亮的效果,这时候就要用到glBlendFunc()函数。
看名字就知道,用它的原因就是,我们需要把几种颜色通过混合来达到半透明或其它我们需要的效果。
拿半透明效果来说,已经画了红色和白色两个长方形,想在上面画一个半透明的绿色方形,则画在红色上的绿色其实就是绿色和红色混合了之后的颜色:
transparent Green1 = (%a*RED+(1-%a)GREEN);
画在白色上面的绿色是绿色和白色混合了之后的效果:
transparent Green2 = (%a*WHITE+(1-%a)GREEN);
这里详细的解释一下glBlendFunc()的函数原型,各种参数的意义,以及用法。
1. 混合函数的函数原型是:
void&glBlendFunc(GLenum srcfactor, GLenum destfactor);&
它的功能就控制了新画上来的颜色(source values, RGBA),和已经在帧缓冲区的颜色(destination values, RGBA)怎么来混合。
src是源的简写,dest是目标的简写。
参数&srcfactor:&
指定了新来的颜色(source values)如何被运算。九个枚举型被接受使用:&
GL_ZERO,&&
GL_DST_COLOR,&
GL_ONE_MINUS_DST_COLOR,&
GL_SRC_ALPHA,&&
GL_ONE_MINUS_SRC_ALPHA,&&
GL_DST_ALPHA,&&
GL_ONE_MINUS_DST_ALPHA,&&
GL_SRC_ALPHA_SATURATE.
参数 destfactor:&
指定帧缓冲区的颜色(destination values)如何被运算。八个枚举型被接受使用:&
GL_ZERO,&&
GL_SRC_COLOR,&&
GL_ONE_MINUS_SRC_COLOR,&&
GL_SRC_ALPHA,&&
GL_ONE_MINUS_SRC_ALPHA,&&
GL_DST_ALPHA,&
GL_ONE_MINUS_DST_ALPHA
下表表示了每个枚举变量代表的意思:
(Rs, Gs,&Bs, As) 和 (Rd, Gd, Bd, Ad) 分别表示&源颜色(src) 和 目标颜色(dest)
颜色的各个通道R, G, B, A的最大值是(kR, kG, kB, kA)
i&= min (As,&kA,&Ad) /&/kA
_________________________________________________________________________
GL_ZERO & & & & & & & & & & & & & & & & & & & & & & & | & & &&(0,0,0,0)
GL_ONE & & & & & & & & & & & & & & & & & & & & & & & & | & & &(1,1,1,1)
GL_SRC_COLOR & & & & & & & & & & & & & & & & &&|& & & &(Rs/kR,Gs/kG,Bb/kB,As/kA)
GL_ONE_MINUS_SRC_COLOR & & & & & &| & & & (1,1,1,1) -&(Rs/kR,Gs/kG,Bs/kB,As/kA)
GL_DST_COLOR & & & & & & & & & & & & & & &&& & | & & &&(Rd/kR,Gd/kG,Bd/kB,Ad/kA)
GL_ONE_MINUS_DST_COLOR & & & & & &| & & & (1,1,1,1)
GL_SRC_ALPHA & & & & & & & & & & & & & & & & & &| & & &(As/kA,As/kA,As/kA,As/kA)
GL_ONE_MINUS_SRC_ALPHA & & & & & & |& & & (1,1,1,1) -&(As/kA,As/kA,As/kA,As/kA)
GL_DST_ALPHA & & & & & & & & & & & & & & & & & &| & & &(Ad/kA,Ad/kA,Ad/kA,Ad/kA)
GL_ONE_MINUS_DST_ALPHA & & & & & & |& & & (1,1,1,1) -&(Ad/kA,Ad/kA,Ad/kA,Ad/kA)
GL_SRC_ALPHA_SATURATE & & & & & & & |& & & (i,i,i,1) & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
---------------------------------------------------------------------------------------------------------------------
在RGB模式中,Opengl按照下面的方程来计算最后得到的颜色:(srcfactor: Sr, Sg, Sb, Sa; destfactor: Dr, Dg, Db, Da)
R (d) = min(kR,RsSr+RdDr)
G (d) = min(kG,GsSg+GdDg)
B (d) = min(kB,BsSb+BdDb)
A (d) = min(kA,AsSa+AdDa)
实现透明效果的时候,最佳参数是将不同物体从远到近依次画出(有时候顺序很重要),并设置混合方程为:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)&;
void display(void)
&& &////dr
&& &//glColor4f(1.0, 1.0, 1.0,&0.3);
&& &glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//设置混合方式
&& &glEnable(GL_BLEND);//启用混合
&& &////draw transparent&
&& &glDisable(GL_BLEND);//禁止混合
以上内容引用自:/zhujianzhai/blog/item/8feb9e35f3d7dfa2d1a2d37f.html
在cocos2d中, 可以用以上方法改写一下. 实现遮罩效果 ( 模拟战争迷雾效果&):
//--------------------------------------------------------------------------文件:MaskLayer.h:
#import&&Foundation/Foundation.h&
#import&&cocos2d.h&
@interface&MaskLayer : CCLayer {
CCSprite*&m_maskS
CCRenderTexture*&m_renderT
@property&CGPoint m_
-(void) setRadius:(&int&) p_iR
-(void)& reDrawMaskB
//-----------------------------------------------------------------------文件MaskLayer.m
//& MaskLayer.m
//& Butterfly
//& Created by chongtao rao on 11/12/11.
//& Copyright 2011 AStepGame. All rights reserved.
#import&&MaskLayer.h&
#import&&Constants.h&
@implementation&MaskLayer
-(&id&) init{
self&= [superinit];
if(&self&){
-(void) setM_position:(CGPoint) p_position{
m_maskSprite.position&= p_
-(CGPoint) m_position{
returnm_maskSprite.
-(&void&) setRadius:(&int&) p_iRadius{
CGSize&size = [CCDirectorsharedDirector].winS
m_iRadius&= p_iR
int&l_iWidth =&2*p_iR
int&l_iHeight =&2*p_iR
unsigned&char&*data =&malloc((l_iWidth * l_iHeight *&4));
for(&int&i=0; i&l_iH i++ ){
for(&int&j=0; j&l_iW j++ ){
int&l_distance =&sqrt(pow(i-p_iRadius,&2) +&pow(j-p_iRadius,&2));
int&l_iValue = (p_iRadius - l_distance)*255/p_iR
limit(l_iValue,&0,&255);
for(int&k=0; k&4; k++){
data[4*(i*l_iWidth+j)+k] = l_iV
CCTexture2D* l_texture = [[[CCTexture2Dalloc]&initWithData:datapixelFormat:kCCTexture2DPixelFormat_RGBA8888pixelsWide:l_iWidth&pixelsHigh:l_iHeightcontentSize:CGSizeMake(l_iWidth, l_iHeight)]&autorelease];
m_maskSprite&= [CCSpritespriteWithTexture:l_texture];
[m_maskSprite&setBlendFunc:(ccBlendFunc){GL_ZERO, GL_ONE_MINUS_SRC_COLOR}];
m_renderTexture&= [CCRenderTexturerenderTextureWithWidth:size.widthheight:size.height];
m_renderTexture.position=&ccp(size.width/2, size.height/2);
[selfaddChild:m_renderTexture];
[selfreDrawMaskBuffer];
free(data);
-(void)& reDrawMaskBuffer {
[m_renderTexturebeginWithClear:0g:0b:0a:1];
if(m_maskSprite) {
[m_maskSpritevisit];
[m_renderTextureend];
-(&void&) dealloc{
[superdealloc];
游戏中用到的时候, 就是把这一层, 设置一下半径. 然后加到游戏场景中去就可以了!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:51670次
排名:千里之外
原创:46篇
(1)(1)(1)(1)(3)(1)(1)(2)(1)(2)(2)(1)(2)(3)(3)(6)(21)后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 277|回复: 3
在U3D中实现战争迷雾特效(含源码)
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
  一、简介
  RTS类型的游戏经常用到战争迷雾。一开始整个地形被迷雾遮蔽,只有Viewer的周围一定范围可见,随着Viewer的移动,未探索的区域变成了可见。
  二、实现方法
  本人之前也没有实现过战争迷雾,但是一提到战争迷雾,我的第一反应是用RenderTexture来实现,几乎所有运算都是在屏幕空间中进行,绘制出迷雾Texture后,再用Projecter将迷雾Texture投射到整个场景,有点类似GPGPU的思想。方法的主要步骤如下:
  1、创建一个RenderTexture(称为FogOfWarRTT)用于绘制(刷出)迷雾。
  2、设置当前RenderBuffer为FogOfWarRTT,并且不清除该RenderBuffer,这就使得刷上去的迷雾不会被清除掉。
  3、创建一个Projecter,用于将FogOfWarRTT投射到场景。
  三、实现细节
  知道大致过程后,还有一些细节问题需要讨论,如下:
  1、 创建好FogOfWarRTT后,应该怎么刷上迷雾呢?换句话说,当Viewer在场景中移动时,怎么样才能擦除FogOfWarRTT上黑色的迷雾?我们只是知道Viewer的世界坐标ViewerCenter,而在FogOfWarRTT上刷迷雾时,用的是屏幕空间的UV坐标,也就是说,怎么将ViewerCenter转化为屏幕空间的UV坐标?如下:
0.jpg (121.83 KB, 下载次数: 0)
17:55 上传
1.jpg (29.25 KB, 下载次数: 0)
17:55 上传
  其中m_projMatrix是投影矩阵,m_viewMatrix是视图矩阵。这两个矩阵是怎么来的,下面再讨论。
  2、 创建Projecter的视图矩阵ViewMatrix
  创建视图矩阵的代码如下:
2.jpg (119.91 KB, 下载次数: 0)
17:55 上传
3.jpg (59.68 KB, 下载次数: 0)
17:55 上传
  其中 look、up、right和pos都是世界坐标系下的。
  3、 创建正交投影矩阵ProjMatrix。
  Projecter投射FogOfWarRTT用的是正交投影矩阵。看到这里读者可能会有疑问,Projecter不是已经有投影矩阵了吗,直接用它的就好了呀,干嘛还这么费劲再自己编写呢? Projecter的正交投影空间是方形的,对于一些在XZ平面是比较狭长的场景,Projecter的正交投影空间包裹得就不是很严密,这就会造成FogOfWarRTT大量的像素浪费,也就是说FogOfWarRTT有相当大的一部分像素是没有用的,下面这图描述了用Projecter的投影矩阵在FogOfWarRTT上刷迷雾的缺陷。
4.jpg (135.34 KB, 下载次数: 0)
17:55 上传
  创建正交投影矩阵的代码如下:
5.jpg (70.89 KB, 下载次数: 0)
17:55 上传
  其中v3MaxInViewSpace、v3MinInViewSpace分别是场景区域在Projecter的视图空间中的最大坐标点和最小坐标点。
  四、绘制迷雾。
  有了Projecter的ViewMatrix和ProjMatrix后,最后一步就是绘制迷雾,下面是绘制迷雾的PixelShader的代码:
6.jpg (43.42 KB, 下载次数: 0)
17:55 上传
  half4 _ViewC //x,y是Viewer的世界坐标转换成的屏幕空间UV坐标,z刷子的半径,w刷子边缘柔和程度
  half _BufferA //场景矩形区域的横纵比
  half _FogD //迷雾浓度
  sampler2D _NoiseT //Perlin噪音,对圆形的刷子进行抖动,使之变得不太规则。
  图片:例子.jpg
7.jpg (34.9 KB, 下载次数: 0)
17:55 上传
  源码链接:
  游客,本付费内容需要支付 5张CG券 才能下载
  首发地址: 在U3D中实现战争迷雾_U3D,_丝路教程网
  资源地址: /unity/582.html(分享请保留)
如何勾引别人关注你?
啥也不说了,楼主就是给力!
本楼回复(<span id="dp_count_)
如何勾引别人关注你?
本楼回复(<span id="dp_count_)
如何勾引别人关注你?
虚幻UE4魔法技能效果FTMagicPack01
多谢大侠分享!~
本楼回复(<span id="dp_count_)
如何勾引别人关注你?
Powered by}

我要回帖

更多关于 unity实现裸眼3d效果 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信