当前位置: 首页 > news >正文

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()函数。

http://www.lryc.cn/news/142239.html

相关文章:

  • VUE笔记(三)vue的语法
  • 探讨uniapp的路由与页面生命周期问题
  • 咸鱼之王俱乐部网站开发
  • Electron+Vue3+TS 打包exe客户端
  • vue3范围选择组件封装
  • 能被整除的数(容斥原理)
  • Modbus转Profinet网关与流量变送器兼容转ModbusTCP协议博图配置
  • HLS实现CORDIC算法计算正余弦并上板验证
  • 高阶数据结构并查集
  • WSL2连接不了外网怎么办?
  • 【C/C++】探索内存对齐的奥秘与优势
  • leetcode分类刷题:滑动窗口(二、重复元素类型)
  • MySQL—buffer pool
  • 《C和指针》笔记8: 枚举类型
  • Python爬虫框架之Selenium库入门:用Python实现网页自动化测试详解
  • docker swarm 部署服务网络问题
  • 1.00001git源码clone后进行编译(带调试)
  • 使用StorageClass动态创建pv
  • 数据结构(Java实现)-ArrayList与顺序表
  • 性能优化维度
  • PMP P-06 Resource Management
  • 【C++】map的奇葩用法:和函数结合
  • 关于JVM的参数类型
  • HTTP协议中的Content-Type及其常见类型
  • android Junit4编写自测用例
  • arcgis:画一幅自己城市的shp地图
  • 采购油封时要考虑的因素
  • 【无标题】科目一笔记
  • java八股文面试[数据结构]——HashMap和HashTable区别
  • 乐趣无限:10款基于Pygame的经典游戏合集