1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ARCoreで3Dオブジェクト2

Last updated at Posted at 2020-02-21

#3Dオブジェクトの配置、大きさ、向きを調整する。

##ユーザーの前0.5メートルの位置を見つけます。
カメラの位置に対してアンカーの位置を設定します。
SceneView sceneView = arFragment.getArSceneView();
Vector3 cameraPos = sceneView.getScene().getCamera().getWorldPosition();
Vector3 cameraForward = sceneView.getScene().getCamera().getForward();
Vector3 position = Vector3.add(cameraPos, cameraForward.scaled(0.5f));
##大きさを調整
model.getScaleController().setMinScale(0.01f);
model.getScaleController().setMaxScale(2.0f);
model.setLocalScale(new Vector3(0.5f,0f,0.5f));
##向きを調整
y軸(縦軸) を中心に180度回転
model.setLocalRotation(Quaternion.axisAngle(new Vector3(0,1,0),-120));

public class MainActivity extends AppCompatActivity {
    private static final int CAMERA_PERMISSION_CODE = 0;
    private static final String CAMERA_PERMISSION = Manifest.permission.CAMERA;
    private ModelRenderable modelRenderable;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArFragment arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ar_fragment);
        ModelRenderable.builder()
                .setSource(this, R.raw.ball)
                .build()
                .thenAccept(renderable -> modelRenderable = renderable)
                .exceptionally(
                        throwable -> {
                            Toast toast =
                                    Toast.makeText(this, "読み込み失敗", Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                            return null;
                        });
         if(arFragment != null ) {

            arFragment.setOnTapArPlaneListener(
                    (HitResult hitResult, Plane plane, MotionEvent motionEvent) -> {

                        if (modelRenderable == null) {
                            return;
                        }
                        //ユーザーの前0.5メートルの位置を見つけます。
                        Session session = arFragment.getArSceneView().getSession();
                        SceneView sceneView = arFragment.getArSceneView();
                        Vector3 cameraPos = sceneView.getScene().getCamera().getWorldPosition();
                        Vector3 cameraForward = sceneView.getScene().getCamera().getForward();
                        Vector3 position = Vector3.add(cameraPos, cameraForward.scaled(0.5f));
                        Pose pose = Pose.makeTranslation(position.x, position.y, position.z);
                        Anchor anchor = session.createAnchor(pose);

                        AnchorNode anchorNode = new AnchorNode(anchor);
                        anchorNode.setParent(arFragment.getArSceneView().getScene());
                        TransformableNode model = new TransformableNode(arFragment.getTransformationSystem());
                        model.setRenderable(modelRenderable);

                        //大きさを指定します。
                        model.getScaleController().setMinScale(0.01f);
                        model.getScaleController().setMaxScale(2.0f);
                        //v:width v1:? v2:height
                        model.setLocalScale(new Vector3(0.5f,0f,0.5f));
                        //y軸 縦軸 を中心に180度回転
                        model.setLocalRotation(Quaternion.axisAngle(new Vector3(0,1,0),-120));
                        model.setParent(anchorNode);
                        model.select();
                        
                    });
        }
    }
    @Override
    protected void onResume() {
        super.onResume();

        if (ContextCompat.checkSelfPermission(this, CAMERA_PERMISSION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[] {CAMERA_PERMISSION}, CAMERA_PERMISSION_CODE);
        }
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?