如何用js代码做一个烛光的光晕效果?

JavaScript012

如何用js代码做一个烛光的光晕效果?,第1张

N年前做了一个,你看这个如何?

演示地址:http://test.pc365.net/light.htm

(如打不开,请多刷新几次)

代码如下:

===========================================================

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312">

<title>烛光效果</title>

<STYLE>

.drag

{CURSOR: hand

POSITION: relative

filter:blur(strength=12)

}

</STYLE>

<SCRIPT language=JavaScript>

var dragapproved=false

var z,x,y

function move()

{

if(event.button==1&&dragapproved)

{z.style.pixelLeft=temp1+event.clientX-x

z.style.pixelTop=temp2+event.clientY-y

movelight(z.style.pixelLeft,z.style.pixelTop)

return false

}

}

function drags()

{

if(!document.all) return

if(event.srcElement.className=="drag")

{

dragapproved=truez=event.srcElement

temp1=z.style.pixelLeft

temp2=z.style.pixelTop

x=event.clientXy=event.clientY

document.onmousemove=move

}

}

function setlight(xx,yy)

{

// main.filters.light(0).addambient(235,239,129,110)

main.filters.light(0).addpoint(xx,yy,50,235,239,169,100)

//x坐标,y坐标,扩散范围,颜色,颜色,颜色,强度

//main.filters.light(0).addcone(xx,yy,0,100,100,200,204,200,180,20)

}

//第一个参数:光源的X坐标;第二个参数:光源的Y坐标;第三个参数:光源离开页面的高度;

//第四至第六个参数:光源的颜色;第七个参数:光源光的色相;第八个参数:光源的形状;

//第九个参数:光源的光的强度 ;第十个参数:光源光散开的范围。

function movelight(xx,yy)

{

xx+=400

yy+=50

main.filters.light(0).clear()

setlight(xx,yy)

}

document.onmousedown=drags

document.onmouseup=new Function("dragapproved=false")

</SCRIPT>

</head>

<body bgcolor="#000000" topmargin="0" leftmargin="0">

<div id='Layerw' style='position: absoluteleft: 0top:50width: 100%height: 40z-index: 1' align="center">

<img src="http://test.pc365.net/lz.gif" alt="蜡烛照明 拖动使用" class=drag width="98" height="120">

</div>

<div align="center" >

<center>

<table id="main" border="0" width="780" cellpadding="0" cellspacing="0" height="580" background="images/house.gif" style="filter:light">

<tr >

<td width="100%">

<p align="center"><img id="pt" border="0" src="http://test.pc365.net/123456.jpg" ></p>

</td>

</tr>

</table>

</center>

</div>

</body>

</html>

<script>setlight(400,50)</script>

单挑,级数差别不大,装备,抗性等等都差不多的情况下,很大的概率都是yy赢。

在45级以上,yy和js打,js几乎是不可能打赢yy的。原因:yy可以远距离攻击,充分发挥地利,yy45级的技能可以缚足,并且yy还可以吹,这样就可以让yy一边往后退一边打,而对方被缚足,又是js,就很难打到了,即使打到了,yy一吹就又跑了,而且最主要,yy打一下掉的血是js打yy的几倍,js光打对yy根本不是威胁,除非,js是反弹衣服,再配合心法,这样才有可能赢yy。

平行光本质是一个方向向量,在shader中计算时直接与模型顶点的法线方向进行dot点乘操作。

如果L(平行光)的向量与N(顶点法线方向)一样(N Dot L=1),那么表示模型的这个点正对着光源,应该最亮,相反,如果两个向量呈相反方向(N Dot L=-1),那么则表示这个点背对光源,应该最暗。

基础的兰伯特计算模型的明暗就是NdotL。

与Unity中的平行光不一样的是,Unity中平行光仅使用方向不使用位置来表示平行光方向;而Three.js中是设定一个起点和一个终点(默认为0,0,0),来确定平行光的方向。因此Three.js中通常在创建完成后设定一下光照的位置,如下:

平行光是可以产生阴影的,需要将castShadow打开,如下

也可以设置光源照射的对象target,光的照射终点会跟随着物体移动(默认为上述的0,0,0)。

无论在Unity中还是Three.js中,平行光通常是场景中的主光源,也通常是产生阴影、计算亮暗面的主要光源。