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

参考资料:threejs中文网

threejs qq交流群:814702116

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

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

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

1. 建模软件设置好UV

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

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

2. video元素加载纹理

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

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

3. 视频创建纹理VideoTexture

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

js 复制代码
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会获取视频当前时间对应的一帧图像作为纹理。

js 复制代码
video.play();

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

js 复制代码
addEventListener('mousedown', () => {
    video.play();
});

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

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

js 复制代码
texture.flipY = false;

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

js 复制代码
texture.colorSpace  = THREE.SRGBColorSpace;//新版本
js 复制代码
texture.encoding = THREE.sRGBEncoding;//旧版本
相关推荐
@大迁世界22 分钟前
43.HTML 事件处理和 React 事件处理有什么区别?
前端·javascript·react.js·html·ecmascript
CloneCello22 分钟前
AI时代程序员认知调整指南
前端
ZC跨境爬虫1 小时前
跟着 MDN 学 HTML day_38:(DocumentFragment 文档片段接口详解)
前端·javascript·ui·html·音视频
@大迁世界2 小时前
41.ShadCN 是什么?它如何和 Tailwind CSS 集成,从而更容易构建可访问且可自定义的 React 组件?
前端·javascript·css·react.js·前端框架
千叶风行2 小时前
Text-to-SQL 技术设计与注意事项
前端·人工智能·后端
软件开发技术深度爱好者3 小时前
HTML5+JavaScript读取DOCX 文档完整内容
前端·html5
幽络源小助理3 小时前
苹果CMS V10 MXPro V4.5模版下载, 自适应视频主题源码, 幽络源源码
前端·开源·源码·php源码
kyriewen3 小时前
坏了,黑客学会用AI写外挂了
前端·程序员·ai编程
xiangxiongfly9154 小时前
Vue3 根据角色权限动态加载路由
前端·javascript·vue.js·动态加载路由
达达尼昂4 小时前
Claude 多 Agent 系统:从零搭建一个 4 Agent 团队
前端·架构·ai编程