Rajawali 3d:围绕枢轴点旋转
Rajawali 3d: Rotate around a pivot point
我一直在使用 StreamingTexture 在屏幕上显示带有 alpha 通道的视频。视频的上半部分包含实际内容,下半部分包含 Alpha 通道。
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,裁剪视频的下半部分,也没有办法。
请建议我可以选择哪些其他选项,或者是否有使用上述选项的解决方案。
我使用第二个平面实现了这个,它与第一个平面完全一样,但不旋转。然后我使用第二个平面的坐标计算出旋转后的正确位置值。
private void setPlanePosition() {
double radius = (0.5 * plane2.getScaleY());
double circleCenterX = plane2.getX();
double circleCenterY = plane2.getY() - radius;
double xNewValue = (plane2.getX()) - radius * Math.sin(Math.toRadians(angle));
double yNewValue = plane2.getY() - radius * Math.cos(Math.toRadians(angle)) + radius;
plane.setPosition(xNewValue, yNewValue, -10);
}
我一直在使用 StreamingTexture 在屏幕上显示带有 alpha 通道的视频。视频的上半部分包含实际内容,下半部分包含 Alpha 通道。
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,裁剪视频的下半部分,也没有办法。
请建议我可以选择哪些其他选项,或者是否有使用上述选项的解决方案。
我使用第二个平面实现了这个,它与第一个平面完全一样,但不旋转。然后我使用第二个平面的坐标计算出旋转后的正确位置值。
private void setPlanePosition() {
double radius = (0.5 * plane2.getScaleY());
double circleCenterX = plane2.getX();
double circleCenterY = plane2.getY() - radius;
double xNewValue = (plane2.getX()) - radius * Math.sin(Math.toRadians(angle));
double yNewValue = plane2.getY() - radius * Math.cos(Math.toRadians(angle)) + radius;
plane.setPosition(xNewValue, yNewValue, -10);
}