在 ARCore 中渲染平面时自定义纹理 - Android
Custom texture while rendering plane in ARCore - Android
检测到平面后,ArFragment 会在您可以点击和放置 3d 对象的表面上呈现白点。
从 PlaneRenderer class 我们可以隐藏默认纹理。
ArFragment arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
arFragment.getArSceneView().getPlaneRenderer().setVisible(false);
但我不想隐藏,而是想添加我的自定义纹理。我找不到用于设置此 属性.
的任何文档
您可以在平面渲染器使用的 material 上设置纹理。
例如,如果您在资产中有一个 png 用于名为 "trigrid.png":
的纹理
setPlaneTexture("trigrid.png");
/**
* Sets the plane renderer texture.
* @param texturePath - Path to texture to use in the assets directory.
*/
private void setPlaneTexture(String texturePath) {
Texture.Sampler sampler = Texture.Sampler.builder()
.setMinFilter(Texture.Sampler.MinFilter.LINEAR_MIPMAP_LINEAR)
.setMagFilter(Texture.Sampler.MagFilter.LINEAR)
.setWrapModeR(Texture.Sampler.WrapMode.REPEAT)
.setWrapModeS(Texture.Sampler.WrapMode.REPEAT)
.setWrapModeT(Texture.Sampler.WrapMode.REPEAT)
.build();
Texture.builder().setSource(() -> getAssets().open(texturePath))
.setSampler(sampler)
.build().thenAccept((texture) -> {
arSceneView.getPlaneRenderer().getMaterial()
.thenAccept((material) -> {
material.setTexture(MATERIAL_TEXTURE, texture);
material.setFloat(MATERIAL_UV_SCALE,10f);
});
}).exceptionally(ex ->{ Log.e(TAG, "Failed to read an asset file", ex);
return null;} );
}
检测到平面后,ArFragment 会在您可以点击和放置 3d 对象的表面上呈现白点。 从 PlaneRenderer class 我们可以隐藏默认纹理。
ArFragment arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
arFragment.getArSceneView().getPlaneRenderer().setVisible(false);
但我不想隐藏,而是想添加我的自定义纹理。我找不到用于设置此 属性.
的任何文档您可以在平面渲染器使用的 material 上设置纹理。
例如,如果您在资产中有一个 png 用于名为 "trigrid.png":
的纹理setPlaneTexture("trigrid.png");
/**
* Sets the plane renderer texture.
* @param texturePath - Path to texture to use in the assets directory.
*/
private void setPlaneTexture(String texturePath) {
Texture.Sampler sampler = Texture.Sampler.builder()
.setMinFilter(Texture.Sampler.MinFilter.LINEAR_MIPMAP_LINEAR)
.setMagFilter(Texture.Sampler.MagFilter.LINEAR)
.setWrapModeR(Texture.Sampler.WrapMode.REPEAT)
.setWrapModeS(Texture.Sampler.WrapMode.REPEAT)
.setWrapModeT(Texture.Sampler.WrapMode.REPEAT)
.build();
Texture.builder().setSource(() -> getAssets().open(texturePath))
.setSampler(sampler)
.build().thenAccept((texture) -> {
arSceneView.getPlaneRenderer().getMaterial()
.thenAccept((material) -> {
material.setTexture(MATERIAL_TEXTURE, texture);
material.setFloat(MATERIAL_UV_SCALE,10f);
});
}).exceptionally(ex ->{ Log.e(TAG, "Failed to read an asset file", ex);
return null;} );
}