加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash 伪3D

发布时间:2020-12-15 06:42:47 所属栏目:百科 来源:网络整理
导读:? ?虚拟一个3D 场景 ? var scene = new Sprite; ?scene.x = stage.stageWidth/2; scene.y = stage.stageHeight/2; addChild(scene); 虚拟一个焦距 var focus = 300; 虚拟一个3D物体 (链接到库里面 ,起个class 名字比如HongLv) var _honglv = new HongLv; _h
?

?虚拟一个3D 场景

? var scene = new Sprite;

?scene.x = stage.stageWidth/2;

scene.y = stage.stageHeight/2;

addChild(scene);

虚拟一个焦距

var focus = 300;

虚拟一个3D物体 (链接到库里面 ,起个class 名字比如HongLv)

var _honglv = new HongLv;

_honglv._3dx = 200;

_honglv._3dy = 100;

_honglv._3dz? = 50;

scene.addChild(_honglv);

?

计算这个虚拟3D物体,投影到scene的x,y坐标

var scale = focus/(focus+_honglv._3dz);

_honglv.x = _honglv._3dx*scale;

_honglv.y = _honglv._3dy*scale;

_honglv.scaleX = _honglv.scaleY = scale;

////////////////////////////////////////////////////////////////////////////////////

虚拟一个摄像机camera

camera 其实就一个object 一个点或者一个坐标

var camera = new Object;

camera.x = 0;

camera.y = 0;

camera.z = 0;

移动摄像机(其实就是一个相对坐标的关系),专门为camera 设置个移动速度

camera.speed_z = 300;

当然摄像机还有个方向(direction)

camera.direction = 1;

比如移动camera.z++或者--

addEventListener(Event.ENTER_FRAME,move);

function move(e:Event){

camera.z += camera.speed_z*camera.direction;

你可以控制运动距离改变方向

然后再计算_honglv与camera的对应关系

var scale = focus/(focus+_honglv._3dz-camera.z);

_honglv.x = (_honglv._3dx-camera.x)*scale;

_honglv.y = (_honglv._3dy-camera.y)*scale;

_honglv.scaleX = _honglv.scaleY = scale;

}

旋转也是一样的,旋转那就是对应角度啦////////////////////////////////-------------只是旋转,那么物体的坐标可以有radius 跟角度 控制位置

旋转有俩个属性 一个是角度 一个就是半径啦

_honglv.angle = 30;

_honglv.radius = 300;

//-------------------比如绕Y周旋转

_honglv._3dx = Math.cos(_honglv.angle)*_honglv.radius;

_honglv._3dz = Math.sin(_honglv.angle)*_honglv.radius;

_honglv._3dy = 200;

添加个属性camera.angle = 30;

那么就有

var angle = _honglv.angle-camera.angle;

var x_pos = Math.cos(angle)*_honglv.radius-camera.x;

var z_pos = Math.sin(angle)*_honglv.radius-camera.z;

var y_pos = _honglv._3dy-camera.y;

var scale = focus/(focus+z_pos);

_honglv.x = x_pos*scale;

_honglv.y = y_pos*scale;

_honglv.scaleX = _honglv.scaleY = scale;

?

这时候只需要修改camera.angle 就可以啦

?

上面简单的介绍了? 摄像机的移动跟旋转(根据摄像机的z改变scale达到3D的效果和控制摄像机的角度,间接的修改物体的x,y,z)

如果是移动加旋转呢?

同样的道理

移动我们知道 跟摄像机的坐标有关系

旋转跟角度 半径有关系 但是都是相对的

那就先求出相对位置 根据位置求出角度,半径那么就有

var x_pos =_honglv._3dx-camera.x;

var y_pos = _honglv._3dy-camera.y;

var z_pos = _honglv._3dz-camera.z;

角度

var angle = Math.atan2(z_pos,x_pos);

var radius = Math.sqrt(z_pos*z_pos+x_pos*x_pos);

根据摄像机的角度重新计算出x_pos z_pos

x_pos = Math.cos(angle+camera.angle)*radius;

z_pos = Math.sin(angle+camera.angle)*radius;

然后缩放

var scale = focus/(focus+z_pos);

_honglv.x = x_pos*scale;

_honglv.y = y_pos*scale;

_honglv.scaleX = _honglv.scaleY = scale;

可以很据计算 做出很多效果

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读