Я скомбинировал пример Chromakey и дополненного изображения из Sceneform, чтобы обнаружить изображения и заменить их видео.Это работает довольно хорошо.Теперь я хотел бы сделать то же самое с изображением вместо видео.Как мне это сделать?
Код для замены:
private void handleVideo(AugmentedImage image, ARData data) {
Vector3 localPosition = new Vector3();
setAnchor(image.createAnchor(image.getCenterPose()));
localPosition.set(image.getExtentX(), 0.0f, image.getExtentZ());
ExternalTexture texture = new ExternalTexture();
// #1
mediaPlayer = MediaPlayer.create(myContext, fileUrl );
mediaPlayer.setSurface(texture.getSurface());
mediaPlayer.setLooping(true);
//#2
ModelRenderable.builder()
.setSource(myContext, R.raw.my_chroma_key_video)
.build()
.thenAccept(
renderable -> {
videoRenderable = renderable;
renderable.getMaterial().setExternalTexture("videoTexture", texture);
renderable.getMaterial().setFloat4("keyColor", CHROMA_KEY_COLOR);
renderable.getMaterial().setBoolean("disableChromaKey", false);
})
.exceptionally(
throwable -> {
Toast toast = Toast.makeText(myContext, "Unable to load video renderable", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return null;
});
Anchor anchor = image.createAnchor(image.getCenterPose());
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
Node videoNode = new Node();
videoNode.setParent(anchorNode);
float videoWidth = mediaPlayer.getVideoWidth();
float videoHeight = mediaPlayer.getVideoHeight();
float myWidth = Float.valueOf(String.valueOf(data.width));
float VIDEO_HEIGHT_METERS = (videoHeight/videoWidth)* myWidth;
localPosition.x = 0;
localPosition.y = 0;//VIDEO_HEIGHT_METERS /2;
localPosition.z = VIDEO_HEIGHT_METERS/2;
videoNode.setLocalPosition(localPosition);
videoNode.setLocalScale(
new Vector3(VIDEO_HEIGHT_METERS * (videoWidth / videoHeight), VIDEO_HEIGHT_METERS, 1.0f)
);
Quaternion localRotation = videoNode.getLocalRotation();
localRotation.x -= Math.PI / 4;
videoNode.setLocalRotation(localRotation);
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
texture.getSurfaceTexture()
.setOnFrameAvailableListener(
(SurfaceTexture surfaceTexture) -> {
videoNode.setRenderable(videoRenderable);
texture.getSurfaceTexture().setOnFrameAvailableListener(null);
}
);
} else {
videoNode.setRenderable(videoRenderable);
}
}
Если мое мышление верное, мне нужно будет заменить код между "# 1" и "# 2" на что-топодходит для изображений, но я не могу ничего найти.