Я использую StreamingTexture для показа видео на экране с альфа-каналом. Верхняя половина видео имеет фактический контент, а нижняя половина содержит альфа-канал.
plane = new Plane(1, 2, 1, 1);//Plane height is 2 times the plane width due to the video size.
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setLooping(true);
Uri videoUrl = Uri.parse("android.resource://" + getContext().getPackageName() + "/"
+ R.raw.angel);
mMediaPlayer.setDataSource(getContext(), Uri.parse(videoUrl.toString()));
mMediaPlayer.prepareAsync(); //prepare the player (asynchronous)
mMediaPlayer.setOnPreparedListener(mp -> {
mp.start(); //start the player only when it is prepared
});
} catch (IOException e) {
e.printStackTrace();
}
// create texture from media player video
mVideoTexture = new StreamingTexture("video", mMediaPlayer);
// set material with video texture
Material material =
new Material(new VertexShader(R.raw.custom_vertix_shader),
new FragmentShader(R.raw.custom_fragment_shader));
material.setColorInfluence(0f);
try {
material.addTexture(mVideoTexture);
} catch (ATexture.TextureException e) {
e.printStackTrace();
}
plane.setMaterial(material);
getCurrentScene().addChild(plane);
Теперь, когда я поворачиваю эту плоскость, используя
plane.setRotation(Vector3.Axis.Z, angle);
Размер плоскости прямоугольника (1, 2) вращается от центра (0,5, 1), как и предполагалось, но поскольку видео отображается только в верхней половине, это выглядит странно. Похоже, видео вращается с нижней половины.
Варианты решения:
Поверните его от (0,5, 0,5) вместо (0,5, 1), но нет способа сделать это.
Установите размер плоскости на 1,1 и обрежьте нижнюю половину видео, для этого также нет способа.
Пожалуйста, предложите, какие другие варианты я могу использовать или есть ли решение, использующее вышеуказанные параметры.