繁体   English   中英

在Arcore 3D模型中应用动态纹理

[英]Applying Dynamic texture in arcore 3D model

我无法在从Google场景表单插件转换的3D模型上应用纹理。 我只能在“ andy”模型上添加纹理,所有自定义模型都没有任何纹理。

我试图应用我在github上发现的纹理技术,这是我发现https://github.com/google-ar/sceneform-android-sdk/issues/41的链接

    CompletableFuture<Texture> futuretexture= Texture.builder().setSource(this, R.drawable.texture).build();
    ModelRenderable.builder()
            .setSource(this, R.raw.model)
            .build()
            .thenAcceptBoth(futuretexture, (renderable, texture) -> {
                andyRenderable = renderable;
                andyRenderable.getMaterial().setTexture(MaterialFactory.MATERIAL_TEXTURE, texture);
            })
            .exceptionally(
                    throwable -> {
                        Toast toast =
                                Toast.makeText(this, "Unable to load model_node renderable", Toast.LENGTH_LONG);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                        return null;
                    });

我希望有我们在按钮单击时选择的纹理将应用于ar core android中的投影3d模型

并非所有模型都具有预定义的纹理采样器。 因此,如果您尝试为没有任何纹理通道的模型设置纹理,则必须首先为其设置自定义材质。

通过android studio将模型转换为sfb时,您可以指定一个自定义材质文件。 这是可以设置自定义纹理的材质的简单示例:

material {
    name : "Textured material",
    parameters : [
        {
           type : sampler2d,
           name : texture
        }
    ],
    requires : [
        uv0
    ],
    shadingModel : lit,
    blending : opaque
}

fragment {
    void material(inout MaterialInputs material) {
        prepareMaterial(material);
        material.baseColor = texture(materialParams_texture, getUV0());
    }
}

只需将其另存为.mat文件,使用此材料创建sfb,然后您上面的代码就可以工作了。 如果您想在运行时应用材质,那么暂时没有小解决方法是不可能的。 只需创建一个简单的3D模型(例如三角形),然后使用这种材料将其转换为sfb。 然后在运行时加载材料并从中复制材料。 现在,当您加载要显示的模型时,可以使用自定义模型简单地覆盖原始材料。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM