Loading js/ui_init.js +18 −11 Original line number Original line Diff line number Diff line Loading @@ -7,6 +7,7 @@ var Data = { var Scene; var Scene; var Map; var Map; // this var needs to go var INIT_HEADING = 0; var INIT_HEADING = 0; var SETTINGS = { var SETTINGS = { Loading Loading @@ -505,6 +506,7 @@ function leaf_mousemove_nohc(e){ var p0 = new L.LatLng(Data.camera.latitude,Data.camera.longitude); var p0 = new L.LatLng(Data.camera.latitude,Data.camera.longitude); var p1 = new L.LatLng(Camera._latlng.lat,Camera._latlng.lng); var p1 = new L.LatLng(Camera._latlng.lat,Camera._latlng.lng); //update Data Data.camera.latitude = Camera._latlng.lat; Data.camera.latitude = Camera._latlng.lat; Data.camera.longitude = Camera._latlng.lng; Data.camera.longitude = Camera._latlng.lng; Loading @@ -514,15 +516,15 @@ function leaf_mousemove_nohc(e){ Data.camera.heading = Camera._heading*180/Math.PI; Data.camera.heading = Camera._heading*180/Math.PI; var newheading = Data.camera.heading;// - INIT_HEADING; var newheading = Data.camera.heading - INIT_HEADING; if ((p0.lat!=p1.lat)||(p0.lng!=p1.lng)){ if ((p0.lat!=p1.lat)||(p0.lng!=p1.lng)){ console.log("translation"); console.log("translation"); leaf_translation_v1(p0,p1); leaf_translation_v1(p0,p1); } }else{ //leaf_rotation_v1(newheading,dh); //leaf_rotation_v1(newheading,dh); x3dom_rotation(dh); x3dom_rotation(dh); } X3DOMObject.displayViewInfo({}); X3DOMObject.displayViewInfo({}); Loading Loading @@ -586,17 +588,22 @@ function leaf_translation_v1(p0,p1){ dz = -dz; dz = -dz; } } var da = Math.atan2(dz,dx); //transform to camera coordinates var A = Math.PI/180*INIT_HEADING; var A = Math.PI/180*INIT_HEADING; var a = Math.atan2(dx,dz); console.log(A); dx = dl*Math.sin(A-da); dx = -dl*Math.sin(A-a); dz = -dl*Math.cos(A-da); dz = -dl*Math.cos(A-a); console.log("dx="+dx+" dy="+dy+" dz="+dz+" A="+A+" da="+da); console.log("dx="+dx+" dy="+dy+" dz="+dz); // translation over map = xz // translation over map = xz x3dom_translation(dx,dy,dz) x3dom_translation(dx,dy,dz); // if not updated then moving in 3D scene will make it jump Scene.old_view_translation = x3dom_getViewTranslation(Scene.element); } } Loading js/x3dom_functions.js +27 −8 Original line number Original line Diff line number Diff line Loading @@ -249,16 +249,35 @@ function x3dom_rotation(delta_a){ // horizontal? // horizontal? function x3dom_translation(dx,dy,dz){ function x3dom_translation(dx,dy,dz){ var delta = new x3dom.fields.SFVec3f(dx,dy,dz); var mat = Scene.element.runtime.viewMatrix().inverse(); var mat = Scene.element.runtime.viewMatrix().inverse(); var tr = mat.e3(); var tr = mat.e3(); var x = tr.x+dx; var from = mat.e3(); var y = tr.y+dy; var at = from.subtract(mat.e2()); var z = tr.z+dz; console.log(from.toString()); var newfrom = from.add(delta); console.log(newfrom.toString()); var newat = newfrom.subtract(mat.e2()); var up = mat.e1(); var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up); var Q = new x3dom.fields.Quaternion(0,0,1,0); //Q.setValue(newmat.inverse()); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("position",x+" "+y+" "+z); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("centerOfRotation",x+" "+y+" "+z); viewpoint.attr("position",newfrom.toString()); viewpoint.attr("centerOfRotation",newfrom.toString()); } } Loading Loading
js/ui_init.js +18 −11 Original line number Original line Diff line number Diff line Loading @@ -7,6 +7,7 @@ var Data = { var Scene; var Scene; var Map; var Map; // this var needs to go var INIT_HEADING = 0; var INIT_HEADING = 0; var SETTINGS = { var SETTINGS = { Loading Loading @@ -505,6 +506,7 @@ function leaf_mousemove_nohc(e){ var p0 = new L.LatLng(Data.camera.latitude,Data.camera.longitude); var p0 = new L.LatLng(Data.camera.latitude,Data.camera.longitude); var p1 = new L.LatLng(Camera._latlng.lat,Camera._latlng.lng); var p1 = new L.LatLng(Camera._latlng.lat,Camera._latlng.lng); //update Data Data.camera.latitude = Camera._latlng.lat; Data.camera.latitude = Camera._latlng.lat; Data.camera.longitude = Camera._latlng.lng; Data.camera.longitude = Camera._latlng.lng; Loading @@ -514,15 +516,15 @@ function leaf_mousemove_nohc(e){ Data.camera.heading = Camera._heading*180/Math.PI; Data.camera.heading = Camera._heading*180/Math.PI; var newheading = Data.camera.heading;// - INIT_HEADING; var newheading = Data.camera.heading - INIT_HEADING; if ((p0.lat!=p1.lat)||(p0.lng!=p1.lng)){ if ((p0.lat!=p1.lat)||(p0.lng!=p1.lng)){ console.log("translation"); console.log("translation"); leaf_translation_v1(p0,p1); leaf_translation_v1(p0,p1); } }else{ //leaf_rotation_v1(newheading,dh); //leaf_rotation_v1(newheading,dh); x3dom_rotation(dh); x3dom_rotation(dh); } X3DOMObject.displayViewInfo({}); X3DOMObject.displayViewInfo({}); Loading Loading @@ -586,17 +588,22 @@ function leaf_translation_v1(p0,p1){ dz = -dz; dz = -dz; } } var da = Math.atan2(dz,dx); //transform to camera coordinates var A = Math.PI/180*INIT_HEADING; var A = Math.PI/180*INIT_HEADING; var a = Math.atan2(dx,dz); console.log(A); dx = dl*Math.sin(A-da); dx = -dl*Math.sin(A-a); dz = -dl*Math.cos(A-da); dz = -dl*Math.cos(A-a); console.log("dx="+dx+" dy="+dy+" dz="+dz+" A="+A+" da="+da); console.log("dx="+dx+" dy="+dy+" dz="+dz); // translation over map = xz // translation over map = xz x3dom_translation(dx,dy,dz) x3dom_translation(dx,dy,dz); // if not updated then moving in 3D scene will make it jump Scene.old_view_translation = x3dom_getViewTranslation(Scene.element); } } Loading
js/x3dom_functions.js +27 −8 Original line number Original line Diff line number Diff line Loading @@ -249,16 +249,35 @@ function x3dom_rotation(delta_a){ // horizontal? // horizontal? function x3dom_translation(dx,dy,dz){ function x3dom_translation(dx,dy,dz){ var delta = new x3dom.fields.SFVec3f(dx,dy,dz); var mat = Scene.element.runtime.viewMatrix().inverse(); var mat = Scene.element.runtime.viewMatrix().inverse(); var tr = mat.e3(); var tr = mat.e3(); var x = tr.x+dx; var from = mat.e3(); var y = tr.y+dy; var at = from.subtract(mat.e2()); var z = tr.z+dz; console.log(from.toString()); var newfrom = from.add(delta); console.log(newfrom.toString()); var newat = newfrom.subtract(mat.e2()); var up = mat.e1(); var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up); var Q = new x3dom.fields.Quaternion(0,0,1,0); //Q.setValue(newmat.inverse()); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("position",x+" "+y+" "+z); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("centerOfRotation",x+" "+y+" "+z); viewpoint.attr("position",newfrom.toString()); viewpoint.attr("centerOfRotation",newfrom.toString()); } } Loading