android - 类似于 HelloAR 示例的 Sceneform 平面渲染
问题描述
我试图用纹理覆盖检测到的平面的整个表面。使用 OpenGL(就像在HelloAr示例中一样)使我能够像这个屏幕截图一样执行此操作。但是我想切换到 Sceneform,我只能通过在 Github 中关注其他问题来获得类似的东西。这些是我目前用于纹理渲染的代码。总而言之,我不希望飞机上有这种聚光灯纹理。我想像我的第一个屏幕截图一样覆盖整个检测到的平面。你能提供一些关于我如何实现这一目标的信息吗?谢谢!
Texture.Sampler sampler =
Texture.Sampler.builder()
.setMagFilter(Texture.Sampler.MagFilter.LINEAR)
.setMinFilter(Texture.Sampler.MinFilter.LINEAR)
.setWrapMode(Texture.Sampler.WrapMode.REPEAT)
.build();
CompletableFuture<Texture> trigrid = Texture.builder()
.setSource(this, R.drawable.gray)
.setSampler(sampler).build();
PlaneRenderer planeRenderer = arSceneView.getPlaneRenderer();
planeRenderer.getMaterial().thenAcceptBoth(trigrid, (material, texture) -> {
material.setTexture(PlaneRenderer.MATERIAL_TEXTURE, texture);
});`
解决方案
我找到了使用其他答案并将它们结合起来的解决方案。正确的平面渲染可以像下面这样完成。重要的一点是应该在每一帧都调用这个可渲染对象,否则 ARCore 会覆盖它并且您看不到您想要的效果。这是解决我的问题的代码。
arSceneView.getScene().addOnUpdateListener(frameTime -> {
PlaneRenderer planeRenderer = arSceneView.getPlaneRenderer();
planeRenderer.getMaterial().thenAcceptBoth(trigrid, (material, texture) -> {
material.setTexture(PlaneRenderer.MATERIAL_TEXTURE, texture);
material.setFloat(PlaneRenderer.MATERIAL_SPOTLIGHT_RADIUS, Float.MAX_VALUE);
});
});
推荐阅读
- wpf - 在使用实时图表的 WPF 中,我可以在多个特定标签上添加强调线吗?
- xidel - 带有 xidel + 垃圾收集功能的负正则表达式
- php - Bit.ly API 调用在创建短 URL 之前/之后命中原始 URL
- python - CircleCi 上的 WebDriverException selenium-python 测试
- python - 美丽的汤 findall 没有返回所有结果
- ios - 无法使用 AVplayer 显示视频数组
- git - InvalidOperation: (sh.exe:String) [Set-ProcessMitigation], InvalidOperationException
- django - Django 运行特定测试
- android - ndk-gdb 中的“无法从 Android.mk 检索应用程序 ABI”错误
- cmake - CMake 的 find_package 找不到使用 add_subdirectory 添加的库