webgl+three.js,学习笔记,调用摄像头,做成纹理

Three.js + Vite 实战:5分钟搞定摄像头视频流在3D模型上的实时播放 本文详细介绍了如何使用Three.js和Vite在5分钟内实现摄像头视频流在3D模型上的实时播放。通过简洁的代码示例和步骤讲解,帮助开发者快速掌握视频与三维场景的融合技术,适用于AR原型开发、交互式展示等场景。 阅读详情

1、谷歌浏览器
(1)错误信息:Only secure origins are allowed (see: https://goo.gl/Y0ZkNV).(仅支持https访问)
(2)如果用localhost访问,没有这种错误

2、ie/edge浏览器支持

3、只注解了主体部分,其他的再第一篇文章里有

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three框架</title>
        <script src="js/three.js"></script>
        <style type="text/css">
            div#canvas-frame {
                border: none;
                cursor: pointer;
                width: 100%;
                height: 600px;
                background-color: #EEEEEE;
            }
            .booth {
                position: absolute;
            }
        </style>
        <script>
            var renderer;
            function initThree() {
                width = document.getElementById('canvas-frame').clientWidth;
                height = document.getElementById('canvas-frame').clientHeight;

                renderer = new THREE.WebGLRenderer({antialias : true});
                renderer.setSize(width, height);
                document.getElementById('canvas-frame').appendChild(renderer.domElement);
                renderer.setClearColor(0xFFFFFF, 1.0);
            }

            var camera;
            function initCamera() {
                camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                camera.position.z = 100;
            }

            var scene;
            function initScene() {
                scene = new THREE.Scene();
            }

            var light;
            function initLight() {
                // 环境光
                light = new THREE.AmbientLight(0xffffff);
                light.position.set(100, 100, 200);
                scene.add(light);
            }


            var mesh;
            var geometry;
            var material;

            function initObject() {
                scene = new THREE.Scene();
                geometry = new THREE.PlaneGeometry( 80, 50);

                var video = document.getElementById('video');
                var vendorUrl = window.URL || window.webkitURL;
                var texture;


                navigator.getMedia = navigator.getUserMedia ||
                                     navagator.webkitGetUserMedia ||
                                     navigator.mozGetUserMedia ||
                                     navigator.msGetUserMedia ||
                                     (navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
                navigator.getMedia({
                    video: true,  // 摄像头
                    audio: false  // 音频
                }, function(strem){
                    //console.log(">>>>>>>>>>>"+strem); // 获取到视频流
                    video.src = vendorUrl.createObjectURL(strem); // 绑定到video标签,输出  
                    video.play(); // 向PeerConnection中加入需要发送的流

                }, function(error) {
                    console.log(error);
                });


                texture = new THREE.VideoTexture( video );//可以直接把视频设为材质
                texture.minFilter = THREE.LinearFilter;
                texture.magFilter = THREE.LinearFilter;
                texture.format = THREE.RGBFormat;

                material = new THREE.MeshPhongMaterial( { map: texture , side: THREE.DoubleSide} );
                mesh = new THREE.Mesh(geometry,  material);
                scene.add(mesh);

            }



            function threeStart() {
                initObject();
                initThree();
                initCamera();
                initLight();
                animation();
            }

            function animation() {
                requestAnimationFrame(animation);
                renderer.render(scene, camera);
            }


        </script>
    </head>

    <body onload="threeStart();">
        <div id="canvas-frame">
            <div class="booth">
                <video id="video" width="400" height="300"></video>
                <!-- <canvas id='canvas' width='400' height='300'></canvas> -->
            </div>
        </div>

    </body>
</html>
用摄像头实时视频当贴图,让3D立方体动起来(Three.js免服务端示例) 直接调用浏览器摄像头,把实时画面变成3D立方体表面的动态纹理。打开index.html就能看到旋转立方体上实时显示你的脸或周围环境,整个过程不依赖服务器、不用安装任何插件,Chrome/Firefox/Edge等主流浏览器开箱即用。项目里已经配好了Three.js核心库(three.min.js)、渲染逻辑(main.js)、页面结构(index.html)和基础样式(style.css),还附带一张金属质感的备用贴图(metal003.png/gif)方便对比调试。代码里关键步骤都有中文注释,比如如何获取 阅读详情

相关推荐

构建Three.js跨平台Web VR应用:成本效益与实战

虚拟现实(Virtual Reality, 简称VR)和增强现实(Augmented Reality, 简称AR)是近年来科技领域内发展迅速的两个分支。VR通过计算机生成的模拟环境让人们感受到身临其境的体验,而AR则是将数字信息叠加到真实世界的视图之中,创造一种交互式体验。这两种技术都致力于打破传统信息获取和体验的界限,为用户提供全新的互动方式。Three.js 是一个基于 WebGL 的 JavaScript 3D 库,它提供了一系列方便开发者使用的 API,从而简化了复杂 3D 图形的渲染过程。

weixin_42497762的博客 1026

three.js调用自己电脑的摄像头

three.js调用自己电脑的摄像头

weixin_56381842的博客 709

threejs video演示,从笔记本摄像头获取媒体流,将场景渲染在立方体上

threejs video演示,从笔记本摄像头获取媒体流,将场景渲染在立方体上

基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型

前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用。 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问题:海量视频分散、孤立、视角不完整、位置不明确等问题,始终围绕着使用者。因此,如何更直观、更明确的管理摄像机和掌控视频动态,已成为提升视频应用价值的重要话题。所以当前项目正是从解决此现状问题的角度,应...

weixin_34366546的博客 1190

西门子1500T插补控制实战:从硬件组态到轨迹规划

本文详细解析了西门子1500T插补控制的完整实战流程。从硬件组态中正确选择带T的CPU和配置报文105,到创建同步轴与插补器工艺对象,再到使用MC_Interpolator功能块编程实现直线与圆弧插补,并分享了调试技巧与常见问题解决方案,为工程师实现高精度复杂轨迹规划提供清晰指导。

weixin_29228781的博客 423

基于多时间尺度的电动汽车光伏充电站联合分层优化调度(Matlab代码实现)

该研究提出了一种电动汽车光伏充电站的分层优化调度方法,采用日前-日内两阶段协同优化框架。日前阶段通过混合整数规划对多充电站进行全局优化,以平抑电网波动和降低购电成本为目标;日内阶段基于实时数据,采用NSGA-II等算法动态分配充电功率。该方法实现了光伏高效消纳、成本节约和电网负荷平衡的有效统一。

zhangxd212489的博客 518

Geolocation error:Only secure origins are allowed (see:https://goo.gl/Y0ZkNV)..

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33895475的博客 6006

轴承故障诊断——领域知识

幅域分析、频域分析及轴承方面的领域知识

qq_58516607的博客 3532

WebGL实时视频(2) 视频播放

1.用UniversalMediaPlayer插件,打包到bs里面, 可以播放mp4文件,不能播放hls(m3u8),不能播放rtsp,不能播放rtmp(flv), 2.结合H5Stream测试。 在打包的里面 在ie中打开:http://localhost/flv.html flv.html内容 <head> <link href="http://vjs....

llhswwha的专栏 2909

C# CAD2016 多边形顶点按方向重新排序

这样,通过以上步骤,我们找到了一个多边形的一个候选起始顶点(可能位于西北方向),并且已经获取了该多边形的边界框信息,这些信息对于后续判断顶点排列顺序及处理其他相关问题具有重要意义。完整地处理八个方向(东北、东南、西南、西北、北、南、东、西),我们可以创建一个方法来获取多边形相对于给定点的最近顶点及其对应的方向。对象(或类似的多边形表示方式),其中包含了多边形的顶点。//附送AI 图片无版权 随意用 龙年大吉大利。

转眼之间 一路有你 1355

基于聚类特征工程的水果销量预测:聚类算法对比与多模型评估

水果销量预测研究:聚类分群与多模型对比 摘要 本研究提出了一种融合聚类分析与机器学习的水果销量预测方法。基于包含12个维度的销售数据集,首先采用K-Means、BIRCH和DBSCAN三种聚类算法对水果品类进行分群,通过轮廓系数等指标评估显示BIRCH算法表现最优(0.387)。随后针对不同群组构建差异化特征工程,并比较XGBoost、LightGBM和LSTM三种预测模型性能。实验结果表明:基于聚类特征工程的LightGBM模型预测效果最佳(RMSE=2.34,R²=0.87).

huanghm88的专栏 137

webgl渲染Yuv420P图像

Yuv420P格式在安防视频中非常常见,因为H264或者H265解码之后,就是这种格式。YUV定义了三个分量:“Y”表示明亮度(Luminance或Luma)也就是灰度值。U和V表示色度。...

1798

生物量预测:基于Swin-Unet模型的生物量模型预测

本文提出了一种基于Swin-Unet架构的多源遥感地上生物量(AGB)预测方法。该方法整合了光学影像、SAR雷达影像、气候环境参数以及地形数据(坡度和坡向)等多源信息,通过24个输入通道(13+2+7+1+1)构建预测模型。研究采用Min-Max归一化预处理数据,并使用80%训练集、16%验证集和20%测试集的划分策略。模型基于Swin-Unet 2D架构,设置64个初始滤波器、4层深度、4×4堆叠数和2×2补丁大小。该方法通过整合多源遥感数据和先进深度学习架构,为AGB反演提供了新的解决方案。

此星光明博客 61

把摄像头画面变成3D材质:Three.js-TypeScript-Boilerplate网页摄像头纹理实战教程

Three.js-TypeScript-Boilerplate 是一个开箱即用的 **Three.js + TypeScript** 全栈 3D 开发模板,自带 webpack 构建、热更新与 Express 生产部署。本文将带你快速上手这个模板,把**摄像头画面变成实时 3D 材质**(Webcam 纹理),几分钟就能在浏览器中做出一个跟随摄像头实时变化的交互式 3D 场景 🎥。 [![Th

gitblog_00943的博客 687

Linux | Ubuntu18.04安装WIFI6 AX201驱动完整教程

本节介绍了如何在Ubuntu18下安装AX201驱动的教程。

九七的博客 8880

《MySQL 入门教程》第 03 篇 管理数据库

本篇主要介绍 MySQL 数据库的创建、查看、选择和删除操作,包括使用 mysql 命令行和 MySQL Workbench 图形工具两种方式。

Tony.Dong的专栏 3522

微信小游戏开发之四:使用three.js引擎

一、前言微信小游戏中最魔性的‘跳一跳’就是基于three.js 引擎开发的看这里!!!!不要再让我发邮箱了!源码放到github上了:GitHub地址   请自行下载。二、下载three.min.js 打开页面,复制代码到本地三、引用使用如下方式在小游戏中引用threelet THREE = require('three.min.js的路径')四、开始创建3dgame.js文件需要注意的是,在微信...

哎!小本本上八卦羞答答,人生太复杂... 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Three.js--》实现3d水晶小熊模型搭建

今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目中才能灵活将所学知识运用起来,话不多说直接开始。

ztK63LrD的博客 2638

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Three.js的DEM建模【数字高程模型】

在这个教程中,我们将学习如何使用three.js渲染土耳其最高的Ağrı山脉的数字高程模型(DEM)数据,使用的工具包括Three.js、geotiff、webpack和QGIS。 我们将要使用的数据是由USGS (美国地质调查局)免费提供的。使用USGS Earth Explorer我下载了Ağrı山脉的DEM(数字高程模型)和卫星图像,这是一个休眠的火山,也是土耳其境内最高的山。 我使用USGS应用程序下载了一些卫星影像,然后尝试着找出云层覆盖率小于10%的图像: 1、Landsat????️ - 用

新缸中之脑 5142

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Three.js-TypeScript-Boilerplate完全概览:为什么它是WebGL三维开发最佳起点模板?7大功能分支一文讲透

对于刚接触 WebGL 三维开发的新手来说,**Three.js-TypeScript-Boilerplate** 是一个开箱即用的 WebGL 三维开发起点模板。它用 TypeScript 编写,内置 webpack 开发服务器和 Node.js 生产服务器,运行后直接呈现一个可鼠标旋转的绿色线框立方体,并附带 OrbitControls 轨道控制器。更棒的是,它提供了多个功能分支,涵盖物理引擎

gitblog_00921的博客 464

Three.js学习笔记 – “我和小伙伴都惊呆了”的特效和Three.js初探

什么是Three.js three.js是JavaScript编写的WebGL第三方库。提供了非常多的3D显示功能。Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精采的演示。不过,这款引擎目前还处在比较不成熟的开发阶段,其不够丰富的 API 以及匮乏的文档增加了初学者的学习难度(尤其是文档的匮乏)t...

雨林 556

[webGL学习]基于three.js构建WebGL实例第三讲

大多程序员在刚开始理解3D(webGL)的知识时,通常对三维空间可能理解的比较困难,你也可能有困难理解不同的光线是如何工作的,或轴甚至如何位于空间。 今天,我会帮你处理这些问题。three.js所拥有一切必要的手段来为这个 - 帮手。在今天的例子中,我已经准备好为你工作的所有现有佣工示范:ArrowHelper,AxisHelper,BoundingBoxHelper,CameraHelp

图解AI 9263

Three.js构建web3d模型

什么是Three.js three.js是JavaScript编写的WebGL第三方库。提供了非常多的3D显示功能。Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精采的演示。不过,这款引擎目前还处在比较不成熟的开发阶段,其不够丰富的 API 以及匮乏的文档增加了初学者的学习难度(尤其是文档的匮乏)t...

我笔记 1057

[webGL学习]基于three.js构建WebGL实例第二讲

我们来继续来学习 WebGL 的 three.js 库。 今天做些不一样的东西(如 MeshBasicMaterial,MeshLambertMaterial 和 MeshPhongMaterial),尽量使用各种参数(color,opacity,ambient,emissive,specular),讲解如何制作纹理和凹凸映射的使用。 HTML代码<!DOCTYPE html> <html la

图解AI 6290
上一篇: webgl+three.js,学习笔记,画一个立方体+解析
下一篇: 在windows系统中安装Emscripten SDK
黎明初时
博客等级 码龄13年 47粉丝 53原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值