Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 谈谈Three.js版本问题
  • 阅读Three.js源码
  • 3D模型gltf下载网站(threejs开发)
  • three.js模拟显示屏模型播放视频
    • vtk.js简单介绍
    • 文章
    郭隆邦
    2024-01-01
    目录

    three.js模拟显示屏模型播放视频

    # three.js模拟显示屏模型播放视频

    需求:在有些Web3D项目中,有一个虚拟屏幕网格模型,你希望屏幕网格模型能模拟播放视频。

    思路非常简单,你可以获取图片创建纹理对象Texture,作为材质.map的纹理贴图。同样方式,你也可以获取视频创建纹理对象,作为.map属性的值。

    # 1. 建模软件设置好UV

    使用三维软件建模的过程中,比如使用Blender时候,要把表示虚拟屏幕的Mesh,UV设置好,这样方便代码中添加纹理贴图。可以让美术在建模软件中,先随机设置一张图片作为纹理,验证UV是否设置好。

    比如咱们这节课中模型,创建显示屏模型的时候,单独一个矩形平面Mesh表示显示屏,用来添加视频纹理。

    # 2. video元素加载纹理

    video是html5的一个元素,可以用来加载播放视频,如果不熟悉,可以去补充下相关的前端知识点。

    const video = document.createElement('video');
    video.src = "./医院宣传.mp4";
    video.loop = true;
    

    # 3. 视频创建纹理VideoTexture

    通过VideoTexture可以把video生成一个纹理,给材质map属性赋值。

    const video = document.createElement('video');
    video.src = "./医院宣传.mp4";
    video.loop = true;
    // 视频生成纹理对象
    const texture = new THREE.VideoTexture(video);
    // 获取矩形平面Mesh(显示屏)设置map
    model.getObjectByName('电视').material = new THREE.MeshBasicMaterial({
        map: texture
    })
    

    # 4. 播放视频video.play()

    视频纹理起作用,非常简单,直接播放视频video即可,视频的每一帧图像数据会在材质.map上更新。整个原理非常简单,就是视频在播放的过程中,threejs会获取视频当前时间对应的一帧图像作为纹理。

    video.play();
    

    现在很多浏览器不允许视频加载的时候,默认播放,这一点要注意。比如你可以在某个鼠标或键盘事件触发视频的播放。

    addEventListener('mousedown', () => {
        video.play();
    });
    
    

    # 注意:gltf加载的模型,纹理.flipY、颜色空间问题

    如果你是给gltf模型里面屏幕Mesh设置纹理贴图,纹理贴图方向错误(注意UV坐标正确的情况下),注意.flipY属性的设置。

    texture.flipY = false;
    

    还有颜色空间的问题,如果颜色空间设置不对,可能会出现纹理颜色与正常颜色不一致的问题。

    texture.colorSpace  = THREE.SRGBColorSpace;//新版本
    
    texture.encoding = THREE.sRGBEncoding;//旧版本
    
    3D模型gltf下载网站(threejs开发)
    vtk.js简单介绍

    ← 3D模型gltf下载网站(threejs开发) vtk.js简单介绍→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式