解决Filament中使用ARCore出现绿色闪屏的问题

news2024/9/19 21:55:24


解决Filament中使用ARCore出现绿色闪屏的问题

问题现象

使用AR的工程中,出现绿屏闪烁。问题帧截图如下:
问题帧

问题定位

问题来源

在filament的1.21.0之前的版本,Stream对象提供了stream(long externalTextureId)方法,允许传递一个纹理ID,之前是通过如下方式实现AR功能。

    // Create the filament stream.
    Stream stream =
        new Stream.Builder()
            .stream(textureId)
                .width(width)
                .height(height)
                .build(engine);
    initialize(stream);

而在1.21.0之后的版本,stream(textureId)方法已过时,官方推荐采用Texture对象的importTexture的方式去加载。故修改成如下内容

    filamentTexture = new Texture.Builder()
            .sampler(Texture.Sampler.SAMPLER_EXTERNAL)
            .importTexture(textureId)
            .build(engine.getFilamentEngine());

实测,也能运行,但是偶现绿屏。

解决方案

Issue链接

解决前,找了下Issues,发现以前有人解决过。
Issue的提出者是ThomasGorisse

ThomasGorisse 是sceneview仓库的贡献者,继20年sceneform存档以后,他先后维护了sceneform、sceneview。

Texture from a GLuint texture ID #5513

解决方式

一句话,就是采用SAMPLER_2D 类型替换SAMPLER_EXTERNAL类型。

具体步骤

1、重新编译材质

为实现AR的功能,此前我们用了一个材质文件,用于关联相机视频流。
此时,我们需要修改材质文件,并重新编译。

将‘samplerExternal’修改为‘sampler2d’

旧材质

material {
    name : flat,
    shadingModel : unlit,
    blending : opaque,
    parameters : [
        {
            type : samplerExternal,
            name : cameraTexture
        },
        {
            type : float4x4,
            name : uvTransform
        }
    ],
    requires : [
        uv0
    ]
}
......

新材质

material {
    name : flat,
    vertexDomain : device,
    shadingModel : unlit,
    blending : opaque,
    culling : none,
    parameters : [
        {
            type : sampler2d,
            name : cameraTexture
        },
        {
            type : float4x4,
            name : uvTransform
        }
    ],
    requires : [
        uv0
    ]
}
...

2、使用SAMPLER_2D类型

  filamentTexture = Texture.Builder()
      .width(resolution.width)
      .height(resolution.height)
      .levels(1)
      .sampler(Texture.Sampler.SAMPLER_2D)
      .format(Texture.InternalFormat.RGBA8)
      .importTexture(externalTextureId.toLong())
      .build(filamentEngine)

更多代码可转至开源项目“Sceneform-EQR”中查看


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘显示未被格式化:深度解析与数据恢复指南

一、现象解析:U盘显示未被格式化之谜 在日常使用U盘的过程中,不少用户可能会遭遇一个令人头疼的问题——插入U盘后,系统提示“U盘未被格式化”,要求用户进行格式化操作以继续访问。这一突如其来的提示不仅打断了正常的工作流程&a…

[邀请函]2024上海工博会,盟通邀您共享盛典!

展会基本情况 9月24-28日,2024年中国国际工业博览会(简称"中国工博会")将在国家会展中心(上海)拉开帷幕。展会设9大专业展,数控机床与金属加工展、工业自动化展、节能与工业配套展、新一代信息技…

数据结构——链表(短小精悍版)

使用链表结构可以克服数组链表需要预先知道数据大小的缺点 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。 单向链表: 一个…

MiniCPM3-4B | 笔记本电脑运行端侧大模型OpenBMB/MiniCPM3-4B-GPTQ-Int4量化版 | PyCharm环境

MiniCPM3-4B,轻松在笔记本电脑上运行大模型? 背景一、选择模型二、模型下载三、模型运行四、总结 背景 2024年9月5日,面壁智能发布了MiniCPM3-4B,面壁的测试结果声称MiniCPM3-4B表现超越 Phi-3.5-mini-instruct 和 GPT-3.5-Turbo-…

MSF的使用学习

一、更新MSF apt update # 更新安装包信息;只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告) apt upgrade # 更新已安装的软件包,不删除旧包; apt full-upgrade # 升级包&#x…

HashMap高频面试知识点

HashMap HashMap是基于hash表的一种数据结构,用于存放键值对,核心就是把hash值映射到数组的索引位,通过数组链表(JDK1.8开始通过数组链表红黑树)解决Hash冲突。 因为当hash冲突较多时,链表中元素增加&#…

C语言进阶【4】---数据在内存中的存储【1】(你不想知道数据是怎样存储的吗?)

本章概述 整数在内存中的存储大小端字节序和字节序判断练习1练习2练习3练习4练习5练习6 彩蛋时刻!!! 整数在内存中的存储 回忆知识:在讲操作符的那章节中,对于整数而言咱们讲过原码,反码和补码。整数分为有…

JAVA同城生活新引擎外卖跑腿团购到店服务多合一高效系统小程序源码

🚀同城生活新风尚!一站式高效系统,让日常更便捷🛍️ 🍽️【开篇:同城生活,一触即发】🍽️ 在这个快节奏的时代,同城生活的便利性与效率成为了我们追求的新风尚。想象一下…

C++ —— 关于vector

目录 链接 1. vector的定义 2. vector的构造 3. vector 的遍历 4. vector 的扩容机制 5. vector 的空间接口 5.1 resize 接口 5.2 push_back 5.3 insert 5.4 erase 5.5 流插入与流提取 vector 并不支持流插入与流提取,但是可以自己设计,更…

[NSSCTF 2022 Spring Recruit]ezgame

打开题目环境是一个游戏: 直接F12开始审计源代码: 这里说拿到65分以后可以得到flag,这里因为游戏太菜选择直接篡改分数: 在控制台输入scorePoin10000就可以改变当次得分,等到游戏结束就能得到flag。

心觉:成功学就像一把刀,有什么作用关键在于使用者(二)

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作174/1000天 上一篇文章讲了成功学到底是个啥 是如何起作用的 为什么有些人觉得没有用? 今天我们再展开来剖析一下这…

链表--(1)链表的概念

前言引入 之前我们学习了数组这一概念,使用数组可以在编程时增加程序的灵活性。但在c语言中不允许定义动态数组的类型也不能随意调整数组的大小,往往会导致内存空间的浪费。由此我们推出链表。链表是动态进行内存分配的一种结构,它可以随时为其结点分配需要的存储空间也方便…

Vscode搭配latex简易教程

1. 找镜像网站下载texlive的iso文件 清华源镜像 下载之后直接打开iso文件,打开install-tl-windows.bat文件,进行安装即可,安装大概30分钟左右 2. VScode端配置 2.1 下载这三个插件 2.2 打开设置 2.3 追加内容到配置json文件当中 // Latex…

《深入理解JAVA虚拟机(第2版)》- 第12章 - 学习笔记

第12章 Java内存模型与线程 12.1 概述 TPS是用来衡量一个服务性能好坏高低的重要指标值。TPS是Transactions Per Second的缩写,用来表示每秒事务处理数,即服务端每秒平均能碰响应的请求数。 12.2 硬件的效率与一致性 处理器与内存的运算效率差了好几…

使用阿里OCR身份证识别

1、开通服务 免费试用 2、获取accesskay AccessKeyId和AccessKeySecret 要同时复制保存下来 因为后面好像看不AccessKeySecret了 3.Api 参考 https://help.aliyun.com/zh/ocr/developer-reference/api-ocr-api-2021-07-07-recognizeidcard?spma2c4g.11186623.0.0.7a9f4b1e5C…

园区网基础组网保姆级(mstp,vrrp,irf,eth-trunk,route-policy,ospf,bgp,rbm,nat,mlag等等)

本文实验使用模拟器:H3C HCL 5.10.2版本 一、园区核心/接入架构1.1.三层架构1.2.二层架构二、园区核心 To 接入实践2.1.MSTP+VRRP派系2.1.1.MSTP+VRRP配置2.1.2.MSTP+VRRP验证2.2.IRF+Eth-Trunk派系2.2.1.IRF+Eth-Trunk配置2.3.两种派系的对比2.4.VXLAN结构三、园区核心/出口架…

观《中国数据库前世今生》有感:从历史中汲取未来的力量

观《中国数据库前世今生》有感:从历史中汲取未来的力量 中国数据库技术的起步与发展 观看了《中国数据库前世今生》后,我对于中国数据库技术的历史变迁有了更深刻的理解。作为一名有一年开发经验的程序员,这部纪录片让我对中国数据库行业从8…

828华为云征文 | 云服务器Flexus X实例,搭建上线前后端项目

828华为云征文 | 云服务器Flexus X实例,搭建上线前后端项目 项目搭建 演示使用华为云服务器Flexus X实例搭建上线前后端项目黑马vue电商后台管理系统 项目GitHub链接:https://github.com/Minori-ty/vue_shop.git 1、购买华为云 Flexus X 实例 Flexus云服…

.Net Core 生成管理员权限的应用程序

创建一个ASP.NET Core Web API项目 给解决方案设置一个名称 选择一个目标框架,这里选择的是 .NET 8.0框架 在Porperties文件夹中添加一个app.manifest文件 设置app.manifest文件属性,生成操作设置为嵌入的资源 双击解决方案名称,编辑WebAppli…

JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)

大家好,今天我要分享的是如何在树形结构的数据中,根据特定条件设置节点及其所有子节点的显示属性。在实际项目中,这种需求非常常见,特别是在需要动态展示和隐藏节点的情况下。下面我将通过一个具体的示例来讲解实现过程。 需求分析…