threejs纹理加载三(视频加载)

threejs中除了能把图片作为纹理进行几何体贴图以外,还可以把视频作为纹理进行贴图设置。纹理的类型有很多,我们可以用不同的加载器来加载,而对于视频作为纹理,我们需要用到今天的主角:VideoTexture。我们先看效果:

我们直接看代码:

复制代码
<template>
    <div>
    </div>
</template>
<script  setup>
import { ref } from "vue";

import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import * as Dat from "dat.gui";
const gui = new Dat.GUI();
const scene = new THREE.Scene();
const camara = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);
camara.position.set(0, 0, 10);

const Gemertry = new THREE.BoxGeometry(5, 5, 5);

//视频加载器
let video = document.createElement("video");
video.src = "/src/assets/819.mp4";
video.load();
video.crossOrigin = "anonymous";

document.addEventListener("click", () => {
  video
    .play()
    .then(() => {
      render();
    })
    .catch(err => {
      console.log("err:", err);
    });
});
// video.play();
let texture = new THREE.VideoTexture(video);
texture.minFilter = THREE.LinearFilter;
texture.magFilter = THREE.LinearFilter;
const materials = [
  new THREE.MeshBasicMaterial({ color: "#f90" }),
  new THREE.MeshBasicMaterial({ map: texture }),
  new THREE.MeshBasicMaterial({ color: "#63a" }),
  new THREE.MeshBasicMaterial({ color: "#e2d" }),
  new THREE.MeshBasicMaterial({ color: "#c57" }),
  new THREE.MeshBasicMaterial({ color: "#f00" })
];

const cube = new THREE.Mesh(Gemertry, materials);
scene.add(cube);

// 将网格对象添加到场景中

const renderer = new THREE.WebGLRenderer();
document.body.appendChild(renderer.domElement);
renderer.setSize(window.innerWidth, window.innerHeight);

const control = new OrbitControls(camara, renderer.domElement);

const render = () => {
  renderer.render(scene, camara);
  requestAnimationFrame(render);
  if (video.readyState === video.HAVE_ENOUGH_DATA) {
    texture.needsUpdate = true;
  }
};
render();
</script>
<style scoped>
</style>

这里特别要注意:对于视频而言。很多浏览器禁止了默认播放,所以这里我们通过给文档对象添加点击事件来实现,然后在加载成功的回调中我们要重新调用我们的render()函数。

相关推荐
晨非辰19 小时前
Makefile构建哲学:从依赖推导到自动化编译,掌握大型项目的构建逻辑,告别手动编译焦虑
linux·运维·服务器·c++·人工智能·后端·自动化
有个人神神叨叨19 小时前
langchain-ai/deepagents
人工智能·langchain
物联网软硬件开发-轨物科技19 小时前
【轨物洞见】电力运维的“减法”革命:轨物科技如何定义智能开关柜“一键顺控”新范式
运维·人工智能·科技
沪漂阿龙19 小时前
大模型持续预训练全解析:如何注入领域知识而不“遗忘”通用能力?
人工智能·深度学习·机器学习
geneculture19 小时前
协同智能视域AI大模型的文明跃迁价值:普惠HI跃升的契机
大数据·人工智能·机器学习·数据挖掘·融智学的重要应用·哲学与科学统一性·融智时代(杂志)
qyresearch_19 小时前
无菌食品包装:保障食品安全的科技防线与市
大数据·人工智能·科技
l1t19 小时前
利用omnicoder-9b模型编写把扫描版pdf转成文字版pdf的程序
人工智能·python·pdf
面汤放盐19 小时前
CoPaw是什么?-- 2026年开源的国产个人AI助手
人工智能
Light6019 小时前
SAP协议系列(上):AI时代的“DOS命令行“——重新定义智能体对话方式
人工智能·microsoft
xinxiangwangzhi_19 小时前
RAFT光流论文总结
人工智能·计算机视觉