Three.js加载360全景图片/视频

这篇具有很好参考价值的文章主要介绍了Three.js加载360全景图片/视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Three.js加载360全景图片/视频

效果

js 360,three,javascript,音视频,开发语言文章来源地址https://www.toymoban.com/news/detail-767627.html

原理

  • 将全景图片/视频作为texture引入到three.js场景中
  • 将贴图与球形网格模型融合,将球模型当做成环境容器使用
  • 处理视频时需要以dom为载体,加载与控制视频动作
  • 每次渲染时更新当前texture,以达到视频播放效果
  • 全景图片加载有球体与正方体两种模式,区别在于是加载单张图片还是多张图片

核心方法

      // 添加VR全景图
      const addVrPicture = async () => {
        // 创建贴图
        const loader = new THREE.TextureLoader();
        const texture = await loader.load('./img/vr.jpg');
        texture.wrapS = THREE.RepeatWrapping;
        texture.repeat.x = -1;
        // 创建球形载体
        const sphereGeometry = new THREE.SphereGeometry(200, 60, 40);
        const sphereMaterial = new THREE.MeshBasicMaterial({ map: texture, side: THREE.BackSide });
        const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
        scene.add(sphere);
      };

      // 添加VR全景视频
      const addVrVideo = async () => {
        // 通过Dom引入并控制视频源
        const video = document.createElement('video');
        video.src = './video/vr.mp4';
        video.loop = true;
        video.muted = true;
        video.autoplay = true;
        // 创建视频贴图
        const texture = new THREE.VideoTexture(video);
        texture.minFilter = THREE.LinearFilter;
        // 创建球形载体
        const sphereGeometry = new THREE.SphereGeometry(200, 60, 40);
        const sphereMaterial = new THREE.MeshBasicMaterial({ map: texture, side: THREE.BackSide });
        const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
        scene.add(sphere);
        // 添加动画序列
        animationList.push(() => {
          // 更新视频纹理
          // 播放视频
          video.play();
          if (video.readyState === video.HAVE_ENOUGH_DATA) {
            texture.needsUpdate = true;
          }
        });
        // 调整相机视角
        const point = new THREE.Vector3(200, 0, 0);
        camera.lookAt(point);
      };

完整代码

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <script type="module">
      import * as util from './js/util.js';
      import * as THREE from './node_modules/three/build/three.module.js';
      import { creatWallByPath } from './js/effect.js';

      const scene = util.initScene();
      const stats = util.initStats();
      const camera = util.initCamera(-1, 0, 0);
      const renderer = util.initRender();
      const controls = util.initOrbitControls(camera, renderer);
      util.windowReSize(renderer, camera);
      util.addAxisHelper(scene, 100);
      util.addAmbientLight(scene);
      util.addDirectionalLight(scene);
      // 动画序列,每个渲染周期执行
      const animationList = [];

      // 添加VR全景图
      const addVrPicture = async () => {
        // 创建贴图
        const loader = new THREE.TextureLoader();
        const texture = await loader.load('./img/vr.jpg');
        texture.wrapS = THREE.RepeatWrapping;
        texture.repeat.x = -1;
        // 创建球形载体
        const sphereGeometry = new THREE.SphereGeometry(200, 60, 40);
        const sphereMaterial = new THREE.MeshBasicMaterial({ map: texture, side: THREE.BackSide });
        const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
        scene.add(sphere);
      };

      // 添加VR全景视频
      const addVrVideo = async () => {
        // 通过Dom引入并控制视频源
        const video = document.createElement('video');
        video.src = './video/vr.mp4';
        video.loop = true;
        video.muted = true;
        video.autoplay = true;
        // 创建视频贴图
        const texture = new THREE.VideoTexture(video);
        texture.minFilter = THREE.LinearFilter;
        // 创建球形载体
        const sphereGeometry = new THREE.SphereGeometry(200, 60, 40);
        const sphereMaterial = new THREE.MeshBasicMaterial({ map: texture, side: THREE.BackSide });
        const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
        scene.add(sphere);
        // 添加动画序列
        animationList.push(() => {
          // 更新视频纹理
          // 播放视频
          video.play();
          if (video.readyState === video.HAVE_ENOUGH_DATA) {
            texture.needsUpdate = true;
          }
        });
        // 调整相机视角
        const point = new THREE.Vector3(200, 0, 0);
        camera.lookAt(point);
      };

      const main = async () => {
        // 添加VR图像
        await addVrPicture();
        // 添加VR视频
        // await addVrVideo();
      };

      // 渲染函数
      const render = () => {
        renderer.render(scene, camera);
        stats.update();
        animationList.forEach((callback) => callback());
        requestAnimationFrame(render);
      };

      window.onload = () => {
        main();
        render();
      };
    </script>
  </body>
</html>

到了这里,关于Three.js加载360全景图片/视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • three.js实现3D室内全景看房

    首先我们先搭建一个项目,我选择使用vite来进行项目的搭建,执行命令如下: 这样一个基本的项目就搭建成功了,目录如下所示 然后,下载一下three.js工具,执行如下命令 页面中引入 先搭建一个立体图形,并画出辅助线,如下所示  实现代码如下: 接着,给我们的立体图

    2024年02月12日
    浏览(37)
  • 【js&three.js】全景vr看房进阶版

    Scene场景 指包含了所有要渲染和呈现的三维对象、光源、相机以及其他相关元素的环境;场景可以被渲染引擎或图形库加载和处理,以生成最终的图像或动画 常见属性: 常见方法: Geometry  几何体 指的是表示和描述三维对象形状的数据, 描述了对象的形状 常用的Geometry(几

    2024年02月10日
    浏览(32)
  • three.js实现vr全景图(vue)

    方法: 可以利用Threejs中的立方体或者球体实现全景图功能,把立方体或球体当成天空盒子,将无缝衔接的图片贴上,看起来就像在一个场景中,相机一般放置在中央。 three.js中文网 1、立方体实现 立方体6个面要贴上6个方向的图片,这6个图片如下所示: 实现代码如下: 图片

    2024年02月12日
    浏览(31)
  • Three.js 进阶之旅:全景漫游-高阶版在线看房 ?

    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。 专栏上篇文章《Three.js 进阶之旅:全景漫游-初阶移动相机版》中通过创建多个球体全景场景并移动相机和控制器的方式实现了多个场景之间

    2023年04月10日
    浏览(31)
  • 微信小程序集成three.js--VR全景项目源码

    小程序集成Three.js,展示不同贴图材质的运用 实现VR全景效果的部分,主要实现步骤如下: 1 创建一个正方体 2加载6个不同面的图片作为正方体的材质 3设置正方体属性 cube.geometry.scale(1,1,-1),即完成了正方体面的反转 4将camera的位置设置在正方体内部,即实现了从内部观察正

    2024年02月11日
    浏览(36)
  • vue2+three.js实现类似VR、3D全景效果

    效果图: 俩图标是我自己加的前进后退按钮,也是百度了好久,再加上GPT的帮助,才给搞出来。因为需求急,都不看官方文档,百度到一个能跑的demo之后改吧改吧,就先用着了。 下面是代码: 这里 代码有很多用不到的地方和需要优化的地方,我是来不及改了,就先这样吧

    2024年02月15日
    浏览(37)
  • Three.js 模型加载及加载简单动画

    时间过的好快啊~再一次感叹,忙忙碌碌一年又过去了,新年第一帖,新的一年也要加油呀! 简单介绍下Three.js吧,Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。因为使用简单,入门比较容易。 Three.js的具体

    2024年02月12日
    浏览(41)
  • 【three.js / React-three-fiber】加载3D模型性能优化

    无论是大型虚拟世界还是简单的网站,性能优化都是必要的。 特别是在运用三维模型的情况下,我们需要更加深入的优化。因为 三维模型通常包含大量的数据和复杂的几何形状 ,如果不进行性能优化,浏览器可能会因为负载过重而崩溃。 在本文中,我们将探讨如何在 thre

    2024年02月02日
    浏览(37)
  • Three.js之加载外部三维模型

    建模软件绘制3D场景 … 加载.gltf文件(模型加载全流程) 注:基于Three.js v0.155.0 三维建模软件 gltf格式 加载.gltf文件 OrbitControls辅助设置相机参数:相机位置、相机目标对象 gltf不同文件形式(.glb) 模型命名(程序与美术协作): .getObjectByName() 递归遍历层级模型修改材质: .traverse

    2024年02月05日
    浏览(34)
  • Three.js--》建模软件如何加载外部3D模型?

    目录 三维建模软件的介绍 Blender官方文档介绍 Blender软件安装 GLTF格式简介 gltf不同文件形式         看过我之前讲解的three文章的人都知道,我在创建模型的时候都没有使用three.js自带的一些简单模型,而是引入外部的模型并加载到页面上, 简言之 :对于简单的立方体、

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包