2017-06-19 19 views
0

私はStreamingTextureを使って、アルファチャンネル付きのビデオを表示しています。動画の上半分には実際のコンテンツが、下半分にはアルファチャンネルが含まれています。Rajawali 3d:ピボットポイントを中心に回転

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); 

Iは

plane.setRotation(Vector3.Axis.Z, angle); 

矩形の平面サイズ(1、2)ビデオのみに示しているので、それが想定されるが(1、0.5)の中心から回転を使用してこの面を回転させますそれは奇妙に見えるので、上半分。動画が下半分から回転しているようです。

ソリューションオプション:

  1. 代わりに(0.5、1)から(0.5、0.5)からそれを回しが、そうする方法はありません。

  2. プレーンのサイズを1,1に設定し、ビデオの下半分をクリップします。その方法もありません。

上記のオプションを使用して解決策があるかどうかをお尋ねください。

答えて

0

これは、第1のプレーンとまったく同じですが回転しない第2のプレーンを使用して実装しました。次に、回転後に正しい位置の値を計算するために、2番目の平面の座標を使用しました。

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); 
} 
関連する問題