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

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



解决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

green flickering and laggy camera stream in android #5498

解决方式

一句话,就是采用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.mrgr.cn/news/30928.html

相关文章:

  • 深入理解接口测试:实用指南与最佳实践5.0(一)
  • LeetCode题练习与总结:判断子序列--392
  • 如何搭建自动化测试框架
  • 静态C语言函数调用关系生成工具-cflow
  • 【LeetCode】【算法】581. 最短无序连续子数组
  • 数据重塑:长宽数据转换【基于tidyr】
  • 力扣150题——多维动态规划
  • 【高阶用法】uniapp的i18n多语言模块修复与增强(Typescript)
  • numpy之随机抽样函数np.random.choice()
  • 阿里云大模型,这次云栖大会又“卷”出了新高度!
  • 【PostgreSQL教程】PostgreSQL详细介绍
  • Bayes networks可视化工具-Netica
  • 【C++】——多态详解
  • STM32cubeMX + VScode开发GD32移植(HAL库通用),保姆级!!!!!!!
  • 住宅代理IP如何提高 IP声誉?
  • BMW宝马品牌各车系车轮轮毂螺栓扭矩参数
  • AirTest 基本操作范例和参数解释(一)
  • 浏览网站记录怎么查?(如何查看浏览历史记录)三分钟学会五种方法!
  • 算法.图论-并查集上
  • 使用 Go 语言实现简单聊天系统
  • 【AI视频】Runway Gen-2:图文生视频与运动模式详解
  • 微信小程序. tarojs webView的 onload 事件不触发
  • 解决哈希冲突的方法
  • 1--SpringBoot外卖项目介绍及环境搭建 详解
  • 集采良药:从“天价神药”到低价良药,伊马替尼的真实世界研究!
  • 使用Python进行图像处理的11个基本操作