Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 元素移动到轨道控件后轴心点丢失_Javascript_Three.js - Fatal编程技术网

Javascript 元素移动到轨道控件后轴心点丢失

Javascript 元素移动到轨道控件后轴心点丢失,javascript,three.js,Javascript,Three.js,我对three.js和OrbitControls.js有一个问题,我有一个球体,从中间到左边有一点中间, 这是小提琴: var场景、渲染器、摄影机、控件; init(); 制作动画(); 函数init() { renderer=new THREE.WebGLRenderer({antialas:true}); 变量宽度=window.innerWidth; var height=window.innerHeight; renderer.setSize(宽度、高度); setClearColo

我对three.js和OrbitControls.js有一个问题,我有一个球体,从中间到左边有一点中间, 这是小提琴:

var场景、渲染器、摄影机、控件;
init();
制作动画();
函数init()
{	
renderer=new THREE.WebGLRenderer({antialas:true});
变量宽度=window.innerWidth;
var height=window.innerHeight;
renderer.setSize(宽度、高度);
setClearColor(0x222244,1);
document.body.appendChild(renderer.doElement);
场景=新的三个。场景();
摄像机=新的三视角摄像机(45,宽/高,11000);
摄像机位置y=16;
摄像机位置z=250;
控件=新的3.0个控件(摄影机、渲染器.doElement);
controls.enableDamping=true;
控制。阻尼系数=0.25;
var gridXZ=new THREE.GridHelper(100,10);
setColors(新的三种颜色(0xff0000),新的三种颜色(0xffffff));
scene.add(gridXZ);
var loader=new THREE.TextureLoader();
loader.crossOrigin=“”;
var earthTexture=加载程序。加载(“http://api.usno.navy.mil/imagery/earth.png?view=full&date=11/24/2015&time=4:45“,回调);
//地球仪
var半径=100;
var sphere=new THREE.Mesh(new THREE.SpheregeMetry(半径,16,16),new THREE.MeshBasicMaterial({map:earthTexture}));
场景。添加(球体);
var纬度=38.43;
var经度=-9.1;
var marker=new THREE.Mesh(new THREE.SphereGeometry(1,16,16),new THREE.MeshBasicMaterial({color:0xFF0000}));
球体。添加(标记);
var verticalOffset=0.1;
函数回调(){
新TWEEN.TWEEN(sphere.position)
。至({x:-30,y:0},2000)
.start();
}
}
函数animate()
{
请求动画帧(动画);
TWEEN.update();
控件更新();
renderer.render(场景、摄影机);
}

/**
*@作者乔/https://github.com/qiao
*@author mrdoob/http://mrdoob.com
*@author alteredq/http://alteredqualia.com/
*@作者韦斯特兰利/http://github.com/WestLangley
*@作者erich666/http://erichaines.com
*/
//这组控件执行动态观察、推拉(缩放)和平移。
//与轨迹球控件不同,它保持“向上”方向object.up(默认情况下为(+Y)。
//
//动态观察-鼠标左键/触摸:单手指移动
//缩放-鼠标中键或鼠标滚轮/触摸:两个手指展开或挤压
//平移-鼠标右键或箭头键/触摸:三点滑动
三.轨道控制=功能(对象、DOMELENT){
this.object=对象;
this.domElement=(domElement!==未定义)?domElement:文档;
//设置为false可禁用此控件
this.enabled=true;
//“目标”设置焦点的位置,即对象围绕其旋转的位置
this.target=new THREE.Vector3();
//您可以移入和移出多远(仅透视照相机)
此值为0.minDistance=0;
这个.maxDistance=无穷大;
//可以放大和缩小的距离(仅正交摄影机)
this.minZoom=0;
this.maxZoom=无穷大;
//垂直环绕的距离、上限和下限。
//范围为0到Math.PI弧度。
this.minPolarAngle=0;//弧度
this.maxPolarAngle=Math.PI;//弧度
//水平环绕的距离,上限和下限。
//如果设置,则必须是区间[-Math.PI,Math.PI]的子区间。
this.minAzimuthAngle=-Infinity;//弧度
this.maxazimutangle=无穷大;//弧度
//设置为true以启用阻尼(惯性)
//如果启用了阻尼,则必须在动画循环中调用controls.update()
this.enablempting=false;
该阻尼系数=0.25;
//此选项实际上启用推拉放大和缩小;左为“缩放”以实现向后兼容性。
//设置为false可禁用缩放
this.enableZoom=true;
this.zoomSpeed=1.0;
//设置为false以禁用旋转
this.enableRotate=true;
这1.rotateSpeed=1.0;
//设置为false以禁用平移
this.enablePan=true;
this.keyPanSpeed=7.0;//每次按箭头键移动像素
//设置为true可围绕目标自动旋转
//如果启用了“自动旋转”,则必须在动画循环中调用controls.update()
this.autoRotate=false;
this.autoRotateSpeed=2.0;//fps为60时每轮30秒
//设置为false以禁用密钥的使用
this.enableKeys=true;
//四个箭头键
this.keys={左:37,上:38,右:39,下:40};
//鼠标按钮
this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT};
//重置
this.target0=this.target.clone();
this.position0=this.object.position.clone();
this.zoom0=this.object.zoom;
//
//公共方法
//
this.getPolarAngle=函数(){
返回phi;
};
this.getAzimuthalAngle=函数(){
返回θ;
};
this.reset=函数(){
scope.target.copy(scope.target0);
scope.object.position.copy(scope.position0);
scope.object.zoom=scope.zoom0;
scope.object.updateProjectMatrix();
范围:dispatchEvent(变更事件);
scope.update();
state=state.NONE;
};
//这个方法是公开的,但如果我们能将它私有化,也许会更好。。。
this.update=函数(){
var offset=新的3.Vector3();
//所以camera.up是轨道轴
var quat=new THREE.Quaternion().setFromUnitVectors(object.up,new THREE.Vector3(0,1,0));
var quatInverse=quat.clone().inverse();
var lastPosition=new THREE.Vector3();
var lastQuaternion=新的三个四元数();
返回函数(){
变量位置=scope.object.position;
偏移量。副本(位置)。子(范围。目标);
//将偏移旋转到“y轴向上”空间
偏移量。应用四元数(quat);
//从z轴到y轴的角度
θ=数学atan2(偏移量x,偏移量z);
//与y轴的角度
phi=数学atan2(数学sqrt(offset.x*offset.x+offset.z*offset.z),offset.y);
if(scope.autoRotate&&state===state.NONE){
rotateLeft(getAutoRotationAngle());
}
θ+=θ德尔塔;
φ+=φδ;
//休息室