三.js:纹理到数据纹理

2024-02-14

我正在尝试在 JavaScript 中实现延迟网络摄像头查看器,使用 Three.js 实现 WebGL 功能。

我需要存储从网络摄像头抓取的帧,以便在一段时间(几毫秒到几秒)后显示它们。我可以在没有 Three.js 的情况下使用canvas and getImageData()。你可以找到jsfiddle 中的示例 http://jsfiddle.net/alessandro_pezzato/fZCJ3/embedded/result/.

我正在尝试找到一种无需画布但使用 Three.js 来完成此操作的方法Texture or DataTexture目的。这是我正在尝试的一个例子 http://jsfiddle.net/alessandro_pezzato/mJEVg/。问题是我找不到如何从Texture (image属于类型HTMLVideoElement)到另一个。

In rotateFrames()旧的帧应该丢失,新的帧应该替换,就像在 FIFO 中一样。但线

frames[i].image = frames[i + 1].image;

只是复制参考,而不是纹理数据。我猜DataTexture应该这样做,但我无法得到DataTexture出于一个Texture or HTMLVideoElement.

任何想法?

Warning:您必须有一个摄像头并允许浏览器使用它才能使示例正常工作。显然,您必须拥有更新的浏览器。


这是你要找的吗?

http://fiddle.jshell.net/m4Bh7/10/ http://fiddle.jshell.net/m4Bh7/10/

Edit:

function onFrame(dt) {
    if (video.readyState === video.HAVE_ENOUGH_DATA) { /* new frame available from webcam */
        context.drawImage(video, 0, 0,videoWidth,videoHeight);
        frames[framesNum - 1].image.data = new Uint8Array(context.getImageData(0,0,videoWidth, videoHeight).data.buffer);
        frames[framesNum - 1].needsUpdate = true;
    }
}

这是最重要的部分:它复制框架并将其作为数据保存在 dataTexture 中。

function rotateFrames() {
    for (var i = 0; i != framesNum - 1; ++i) {
/*
         * FIXME: this does not work!
         */
        frames[i].image.data = frames[i + 1].image.data;
        frames[i].needsUpdate = true;
    }
}

然后,这会将帧中的数据从一个纹理复制到另一个纹理。

新版本:http://fiddle.jshell.net/hWL2E/4/

function onFrame(dt) {
    if (video.readyState === video.HAVE_ENOUGH_DATA) { /* new frame available from webcam */
        context.drawImage(video, 0, 0,videoWidth,videoHeight);
         var frame = new THREE.DataTexture(new Uint8Array(context.getImageData(0,0,videoWidth, videoHeight).data.buffer) ,videoWidth,videoHeight);
        frames[framesNum - 1] = frame;
        frames[framesNum - 1].needsUpdate = true;
        sprites[framesNum - 1].map = frames[framesNum - 1];
    }
}

它为视频图像的每一帧生成一个新的纹理。

function rotateFrames() {
    for (var i = 0; i != framesNum - 1; ++i) {
/*
         * FIXME: this does not work!
         */
        frames[i] = frames[i + 1];
        sprites[i].map = frames[i];

    }
}

这就是让它变得更好的原因。因为它使用已使用过的纹理,所以不需要将其重新发送到 GPU。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三.js:纹理到数据纹理 的相关文章

随机推荐

  • 如何使带有cache_path的caches_action过期?

    我正在使用以下内容缓存索引操作 caches action index cache path gt Proc new c c params expire action action gt index expire action 似乎只使索引
  • ADO.NET 实体框架或 ADO.NET

    我正在开始一个新项目ASP NET 和 Windows 服务器 该应用程序预计会非常大并且服务大量客户 高频次拉取和更新 改变数据 我之前创建过项目Linq To Sql 或使用 Ado Net 我对该项目的计划是使用VS2010和新的EF
  • 在 Laravel 8 中使用 Tailwind 安装 Font Awesome

    我尝试使用 Inertia 将 Font Awesome 添加到新安装的 Laravel 8 Jetstream 但收到以下错误 PostCSS 插件出现未知错误 您当前的 PostCSS 版本是 8 2 4 但 postcss impor
  • 让 Wildfly 监听端口 443 而不是 8443

    所以我添加了一个SSL给我的证书wildfly 9它正在工作 但我想配置我的standalone xml听https on port 443 not on port 8443作为默认配置 所以当我更新值时 jboss https port
  • 在 Scala 中将 val 与 Hashtable 一起使用是否可以解决并发问题?

    我尽量避免在代码中使用变量 以便更轻松地进行多线程处理 然而有一行代码开头 val positions Hashtable String String 我想知道 val 是否使事情自动线程安全 或者是否还有我需要担心的更多细节 通过前缀po
  • MongoDB Java 驱动程序创建数据库和集合

    我正在测试如何创建数据库和集合 mongo java 驱动程序 MongoClient client new MongoClient localhost 27017 DB db client getDB ow DBCollection co
  • 为什么我在 java 中使用 SimpleDateFormat 无法获得正确的年份?

    我试图解析 a 中的数据MySql格式 我遇到过SimpleDateFormat 我可以获得正确的日期和月份 但今年我得到了一个奇怪的结果 date 2009 06 22 SimpleDateFormat sdf new SimpleDat
  • 使用 mysql_set_charset('utf8') 函数后用 UTF-8 替换字符

    我将所有 mysql 表转换为 utf 8 unicode 并开始使用mysql set charset utf8 功能 但在此之后 一些字符如 开始看起来像 我怎样才能用UTF 8格式替换mysql中的这种字母 很快 我能找到所有这些字符
  • 如何仅使用单个 bean 并使用包含的resilience4j注释来运行SpringBootTest

    我想在 Spring Boot 应用程序中运行带有resilience4j 注释方法的单个 bean 的集成测试 我的目的是在不加载完整的 spring 上下文的情况下测试 bean 方法调用的弹性 设置如下 依赖项包括以下内容 io gi
  • std::set::equal_range 的用途是什么?

    Since std set不能包含重复元素并且始终已排序 std set equal range将始终返回没有元素或没有 1 个元素的范围 从技术上讲 是的 这仍然是range 但是这个算法的目的是什么 为了std set这似乎很没有必要
  • PKCS 11 中的 CKA_SENSITIVE 属性意味着什么?

    我正在阅读 PKCS 11 文档 但我无法清楚地理解密钥的 CKA SENSITIVE 属性意味着什么 更常见的是 我在哪里可以阅读属性描述 引用自PKCS 11 规范 v2 20 ftp ftp rsasecurity com pub p
  • 该类型和函数是否有现有名称?

    计算机科学中有两个难题 缓存失效 命名和差一错误 这是关于第二个问题 命名事物 我正在寻找这种技术或类型是否已经在其他地方使用过并且有一个名称 dichotomy是一个不错的名字 但是bools at compile time是一个可怕的
  • Curl 设置 Content-Type 不正确

    我正在命令行上运行curl 操作 但在强制将标头设置为XML 时遇到问题 我使用 H 选项强制 Content Type 为 xml 但是 一旦运行命令 我可以看到标头以 urlencoded 形式发送 这污染了我发送的数据值之一 有人可以
  • 交叉编译 GDB 时出现 Python 丢失或不可用错误

    我在尝试交叉编译 GDB 时收到此错误 使用 with python flag checking for python usr bin python checking for python2 7 no configure error pyt
  • 字节码是否被视为 JVM 的指令集?

    我正在读关于instruction set in wiki http en wikipedia org wiki Instruction set我看到了这一段 一些支持字节码作为 ISA 的虚拟机 例如 Smalltalk Java 虚拟机
  • ChannelOption.SO_BACKLOG 的作用是什么?

    option ChannelOption SO BACKLOG 100 Netty 4 升级文档中显示 你能解释一下它的作用吗 Thanks 它是一个传递的套接字选项 用于确定排队的连接数 http docs oracle com java
  • 在 C# 中去除 wav 标头

    我希望能够从 wav 文件中去掉标题 在 C 中有什么办法可以做到这一点吗 WAV 文件使用标准 RIFF 标头格式 看例子在这里 http www codeproject com KB files riffparser aspx 您可以使
  • CoreData 查询帮助

    我正在寻找在 CoreData 中编写一些基本查询的方法 但文档中没有示例 以下是我的查询 我有一个费用对象 它有一个费用金额字段 费用可以链接到 ExpenseCategory 对象 ExpenseCategory 可能仅定义费用类别 例
  • 我们可以使用 nlmrt 包中的 nlxb 进行预测吗?

    我问这个问题是因为我不明白为什么nlxb拟合函数不能与 Predict 函数一起使用 我一直在寻找解决这个问题的方法 但到目前为止还没有运气 I use dplyr对数据进行分组并使用do适合每个组使用nlxb from nlmrt包裹 这
  • 三.js:纹理到数据纹理

    我正在尝试在 JavaScript 中实现延迟网络摄像头查看器 使用 Three js 实现 WebGL 功能 我需要存储从网络摄像头抓取的帧 以便在一段时间 几毫秒到几秒 后显示它们 我可以在没有 Three js 的情况下使用canva