首页 > 其他分享 >threejs相机动画

threejs相机动画

时间:2023-05-05 12:23:40浏览次数:31  
标签:动画 threejs obj endTarget gui 相机 endPos const

threejs相机动画

import * as dat from "dat.gui";
import { GUI } from "../../utils/lil-gui.module.min.js";
import TWEEN from "@tweenjs/tween.js";



    const gui = new GUI();
    gui.domElement.style.right = "0px";
    gui.domElement.style.width = "300px";
    const cameratween = {
      camerachange: () => {
        const endPos = new THREE.Vector3(0, 160, 40);
        const endTarget = new THREE.Vector3(0, 160, 0);
        this.createCameraTween(endPos, endTarget);
      },
      camerareturnchange: () => {
        const endPos = new THREE.Vector3(0, 120, 300);
        let obj = this.scene.getObjectByName("mergeBones");
        const endTarget = obj;
        this.createCameraTween(endPos, endTarget);
      },
    };
    gui.add(cameratween, "camerachange").name("贴近");
    gui.add(cameratween, "camerareturnchange").name("返回");

  

    /**
     *相机动画函数,从A点飞行到B点,A点表示相机当前所处状态
     * @param {三维向量,表示动画结束相机位置} endPos
     * @param {三维向量,表示相机动画结束lookAt指向的目标观察点} endTarget
     */
    createCameraTween(endPos, endTarget) {
      const cameradata = this.camera;
      const orbitControlsdata = this.orbitControls;
      new TWEEN.Tween({
        // 不管相机此刻处于什么状态,直接读取当前的位置和目标观察点
        x: this.camera.position.x,
        y: this.camera.position.y,
        z: this.camera.position.z,
        tx: this.orbitControls.target.x,
        ty: this.orbitControls.target.y,
        tz: this.orbitControls.target.z,
      })
        .to(
          {
            // 动画结束相机位置坐标
            x: endPos.x,
            y: endPos.y,
            z: endPos.z,
            // 动画结束相机指向的目标观察点
            tx: endTarget.x,
            ty: endTarget.y,
            tz: endTarget.z,
          },
          2000
        )
        .delay(500)
        .easing(TWEEN.Easing.Quartic.InOut)
        .start() // define delay, easing
        .onUpdate(function (obj) {
          console.log(cameradata);
          // 动态改变相机位置
          cameradata.position.set(obj.x, obj.y, obj.z);
          // 动态计算相机视线
          // camera.lookAt(obj.tx, obj.ty, obj.tz);
          orbitControlsdata.target.set(obj.tx, obj.ty, obj.tz);
          orbitControlsdata.update(); //内部会执行.lookAt()
        });
      //.start();
    },

  最后

 

标签:动画,threejs,obj,endTarget,gui,相机,endPos,const
From: https://www.cnblogs.com/yaosusu/p/17373764.html

相关文章

  • # vue 使用 threejs 实现实景看房效果 demo
    vue使用threejs实现实景看房效果demo关于这个threejs实现VR看房效果也超级简单,只需要提供一个思路的话就可以了其实,首先需要一个房间结构的贴图,这个贴图网上有,当然找个合适的也不好找,我找了一上午在别人的demo里面扣了一张出来,代码都是一样的,稍微说一下思路。一张全景......
  • 自动驾驶多传感器联合标定系列之激光雷达到相机图像坐标系的标定工程 , 本商品提供两个
    自动驾驶多传感器联合标定系列之激光雷达到相机图像坐标系的标定工程,本商品提供两个工程:基于雷达点云的镂空标定板镂空圆圆心的检测工程、基于镂空标定板的激光雷达到相机图像坐标系的标定工程。其中镂空圆圆心的检测是进行lidar2camera标定的前提。lidar2camera标定工程中带有......
  • svg元素动画
    <sectionstyle="line-height:0;font-size:0px;transform:scale(1);"><svgstyle="pointer-events:none;display:inline-block;width:100%;vertical-align:top;background-repeat:repeat;background-size:100%100%;bac......
  • OSG 使用整理(3):自定义漫游器动画
    自定义漫游器动画1相机视图矩阵1.1  坐标系统 (1)局部坐标系:以三维物体中的某个原点建立顶点比较方便,事实上一个复杂物体可能有多个局部坐标系,每个局部坐标系用于其某个部位。通过一组平移、旋转和缩放变换的组合,可以将局部坐标系变换到世界坐标系。(2)世界坐标系:为了定义所......
  • 世界坐标系、相机坐标系和图像坐标系的转换
    本文转载于:https://blog.csdn.net/weixin_38842821/article/details/125933604?spm=1001.2014.3001.55061.世界坐标世界坐标系是一个特殊坐标系,它建立了描述其他坐标系需要的参考框架。能够用世界坐标系描述其他坐标系的位置,而不能用更大的、外部的坐标系描述世界坐标系。从非......
  • 自定义PopupWindow动画效果
    publicclassRollActivityextendsActivity{ privateViewview; privateButtonbtn; privatePopupWindowmPopupWindow; privateView[]btns;/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstan......
  • 简单位移动画TranslateAnimation
    已不再推荐补间动画,请使用属性动画;动画中的View的点击判断Android动画框架详解http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt1/index.html每次点击往前100或往后100.packagecom.ql.app;importandroid.app.Activity;importa......
  • Activity切换动画效果的修改
    Activity的动画效果在\android\frameworks\base\core\res\res\values下的stlyes.xml,themes.xml两个文件中有定义。但是有时这些效果未必能满足你的要求,需要自己定义styles.xml来实现这个功能。Activity去掉默认的动画效果方法:1.重写Activity的Them中的......
  • Android Activity界面切换添加动画特效
    在Android2.0之后有了overridePendingTransition(),其中里面两个参数,一个是前一个activity的退出两一个activity的进入。@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentVi......
  • Android播放GIF动画
    "quality="high"type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer">1.<ImageViewandroid:id="@+id/gifpicture"2.android:layout_width="fill_parent&quo......