flash制作3D物体上的照明
时间:2013-01-14 14:22来源:卓想动画http://www.zxgzs.com 作者:QQ:610929375 点击: 次
我有一个艰难的时间编码(三角形)面的钻石状物体的三维照明。这并不是说代码给我头痛,但我的数学技能比较生疏的;-)在本教程中我发现的结果。我会告诉你如何编写针尖在球体上移动的光源照明的对象。
没有压力,我会帮你记得的三角学的基础知识和说明的步骤前进的道路上。然而,我将承担一些知识的闪光,喜欢做司仪,功能,在attachMovie脚本(+连锁)等。
首先玩弄我的成绩在数学的冒险来;-)
PS。光源可以被设置为手动,然后它会跟随你的鼠标,而不是路径的三角肌。使用菜单。
下一章中,我将解释如何以可视化的点,你会希望你的光芒是最激烈的,然后我们会去数学。之后,我将讨论的代码块,我们将结束整个脚本。
伪3D
正如你可以看到,我们的工作在顶视图中的图形。为了更清楚地表明我们所要完成的,这里是一个对象在不同的角度:
我的绝招到伪造3D的重新计算对象的各个方面,为2个角度:Z轴和XY轴的角度。光移动更远的距离投射在球体上这些坐标,调光器的照明得到。这是其中的trigonometrics派上用场。有ALSE是一种使用各坐标矩阵,这样做更准确的,但我的数学知识,更是生锈的!在本教程中跳跃的矩阵也将这样做就好了。
深度:数学
我们将要计算的东西:
上的刻面的z轴的角度
上的刻面的xy轴的角度
的角度,在z-轴方向上的光源 - 光源,有一个固定的距离:球体的半径
的xy-轴方向上的光源的角度
每个小面的白度 - 取决于两个角(50%)和距离(50%)的光源
光源的路径,将在“自动”模式
计算方面的角度
为了救我一些严重的造纸填料计算,我已经建立了一个角度检测器(它的左下角的按钮)。只要拖动点1和点2的平行所需的角度;-)
正面和侧面的的视图可以accesed与右上方按钮。
ATAN讨论的下一个话题。的角度检测线MC的计算公式是:
onClipEvent事件(enterFrame事件){
/ /将MCS点1和点2之间的界线
/ /注意到这条线的宽度和高度是100
this._x = _root.angledetect.point1._x;
this._y = _root.angledetect.point1._y;
this._xscale =(_root.angledetect.point2._x _root.angledetect.point1._x);
this._yscale =(_root.angledetect.point2._y _root.angledetect.point1._y);
/ / Math.atan角
XA = this._width;
YA = this._height;
_parent.angle =(Math.atan(YA / XA))/(一下,Math.PI/180);
/ / -------------------------------
/ /做那么多的小数计算angle2
_parent.angle =((_parent.angle * 100))/ 100
_parent.point1.angle = _parent.angle
_parent.point2.angle = 90 - _parent.angle
/ / -------------------------------
}
光源在xy轴角
我们将使用Math.atan计算这个角度看,我们知道A和B(距离基地光源的x和对y):
XT = XM - XB;
YT = YM - YB;
Xb和Yb的基准坐标,xm和ym的光源的坐标。
_root.DgrMouseX = INT(Math.atan(YT / XT)/ _root.convrad);
•convrad一下,Math.PI/180
此功能提供了一个闪光角度,进一步,我们将重新计算这个角度在0度和360度之间的角度。
的z轴方向上的光源角
固定光源的距离,让我们计算的角度。我们知道的那一面(C)将是半径的球体,在这种情况下,180。我们计算由使用毕达哥拉斯上XT及YT A(DELTAX)。
_root.DeltaX = Math.sqrt(XT XT + YT YT);
然后,我们使用A和C的Math.acos计算的z角:
_root.DgrMouseZ =(Math.acos(_root.DeltaX/180))/ _root.convrad);
Flash和角度
Flash会将度有点不同,我们已经习惯了,所以我们将重新计算他们更多的东西handable:
如果(XT <0 && YT> 0){
_root.DgrMouseX + = 270;
的} else if(XT <0 && YT <= 0){
_root.DgrMouseX + = 270;
的} else if(XT> = 0 && YT <= 0){
_root.DgrMouseX + = 90;
的} else if(XT> = 0 && YT> = 0){
_root.DgrMouseX + = 90;
}
这将返回一个介于0度和360度,从0开始计数,在顺时针方向转动到第360的顶部的任何角度。
上的白度!
各个方面的计算出它自己的白度。的白度是通过设置一个白色小面的_alpha MC在背景上的对象。
每个方面有2个变量:FacetX(XY角)和FacetZ(z轴的角度)。
我们将使用Math.cos函数,从而使该对象的一个侧的点亮上(cos(x)的= 1)和另一侧上(cos(x)的= -1)。
:功能SinMouseX(AngleX){
返回Math.cos(一下,Math.PI/180(_root.DgrMouseX - AngleX));
}
•AngleX FacetX
此功能设置最猛点在FacetX和少猛点(FacetX - 180)度。
然后我们设置_alpha。的比例是50%,所以z轴角度和xy角度有一个同样强烈的影响:
函数AlphaMouseX(Z,X){
返回((_root.DgrMouseZ / Z)* _root.ratio + X *(100 - _root.ratio));
}
•Z = FacetZ
•X = FacetX的
没有压力,我会帮你记得的三角学的基础知识和说明的步骤前进的道路上。然而,我将承担一些知识的闪光,喜欢做司仪,功能,在attachMovie脚本(+连锁)等。
首先玩弄我的成绩在数学的冒险来;-)
PS。光源可以被设置为手动,然后它会跟随你的鼠标,而不是路径的三角肌。使用菜单。
下一章中,我将解释如何以可视化的点,你会希望你的光芒是最激烈的,然后我们会去数学。之后,我将讨论的代码块,我们将结束整个脚本。
伪3D
正如你可以看到,我们的工作在顶视图中的图形。为了更清楚地表明我们所要完成的,这里是一个对象在不同的角度:
我的绝招到伪造3D的重新计算对象的各个方面,为2个角度:Z轴和XY轴的角度。光移动更远的距离投射在球体上这些坐标,调光器的照明得到。这是其中的trigonometrics派上用场。有ALSE是一种使用各坐标矩阵,这样做更准确的,但我的数学知识,更是生锈的!在本教程中跳跃的矩阵也将这样做就好了。
深度:数学
我们将要计算的东西:
上的刻面的z轴的角度
上的刻面的xy轴的角度
的角度,在z-轴方向上的光源 - 光源,有一个固定的距离:球体的半径
的xy-轴方向上的光源的角度
每个小面的白度 - 取决于两个角(50%)和距离(50%)的光源
光源的路径,将在“自动”模式
计算方面的角度
为了救我一些严重的造纸填料计算,我已经建立了一个角度检测器(它的左下角的按钮)。只要拖动点1和点2的平行所需的角度;-)
正面和侧面的的视图可以accesed与右上方按钮。
ATAN讨论的下一个话题。的角度检测线MC的计算公式是:
onClipEvent事件(enterFrame事件){
/ /将MCS点1和点2之间的界线
/ /注意到这条线的宽度和高度是100
this._x = _root.angledetect.point1._x;
this._y = _root.angledetect.point1._y;
this._xscale =(_root.angledetect.point2._x _root.angledetect.point1._x);
this._yscale =(_root.angledetect.point2._y _root.angledetect.point1._y);
/ / Math.atan角
XA = this._width;
YA = this._height;
_parent.angle =(Math.atan(YA / XA))/(一下,Math.PI/180);
/ / -------------------------------
/ /做那么多的小数计算angle2
_parent.angle =((_parent.angle * 100))/ 100
_parent.point1.angle = _parent.angle
_parent.point2.angle = 90 - _parent.angle
/ / -------------------------------
}
光源在xy轴角
我们将使用Math.atan计算这个角度看,我们知道A和B(距离基地光源的x和对y):
XT = XM - XB;
YT = YM - YB;
Xb和Yb的基准坐标,xm和ym的光源的坐标。
_root.DgrMouseX = INT(Math.atan(YT / XT)/ _root.convrad);
•convrad一下,Math.PI/180
此功能提供了一个闪光角度,进一步,我们将重新计算这个角度在0度和360度之间的角度。
的z轴方向上的光源角
固定光源的距离,让我们计算的角度。我们知道的那一面(C)将是半径的球体,在这种情况下,180。我们计算由使用毕达哥拉斯上XT及YT A(DELTAX)。
_root.DeltaX = Math.sqrt(XT XT + YT YT);
然后,我们使用A和C的Math.acos计算的z角:
_root.DgrMouseZ =(Math.acos(_root.DeltaX/180))/ _root.convrad);
Flash和角度
Flash会将度有点不同,我们已经习惯了,所以我们将重新计算他们更多的东西handable:
如果(XT <0 && YT> 0){
_root.DgrMouseX + = 270;
的} else if(XT <0 && YT <= 0){
_root.DgrMouseX + = 270;
的} else if(XT> = 0 && YT <= 0){
_root.DgrMouseX + = 90;
的} else if(XT> = 0 && YT> = 0){
_root.DgrMouseX + = 90;
}
这将返回一个介于0度和360度,从0开始计数,在顺时针方向转动到第360的顶部的任何角度。
上的白度!
各个方面的计算出它自己的白度。的白度是通过设置一个白色小面的_alpha MC在背景上的对象。
每个方面有2个变量:FacetX(XY角)和FacetZ(z轴的角度)。
我们将使用Math.cos函数,从而使该对象的一个侧的点亮上(cos(x)的= 1)和另一侧上(cos(x)的= -1)。
:功能SinMouseX(AngleX){
返回Math.cos(一下,Math.PI/180(_root.DgrMouseX - AngleX));
}
•AngleX FacetX
此功能设置最猛点在FacetX和少猛点(FacetX - 180)度。
然后我们设置_alpha。的比例是50%,所以z轴角度和xy角度有一个同样强烈的影响:
函数AlphaMouseX(Z,X){
返回((_root.DgrMouseZ / Z)* _root.ratio + X *(100 - _root.ratio));
}
•Z = FacetZ
•X = FacetX的
(责任编辑:卓想动画http://www.zxgzs.com)