Rajawaliで簡単な3Dシーンを作ってみる


Android向けOpenGL 3DライブラリRajawaliを使って、最小限のシーンをセットアップしてみました。
まず、app/build.gradleにRajawaliを追加します。

build.gradle
dependencies {
    compile 'org.rajawali3d:rajawali:1.1.970'
}

MainActivityを以下のように書き換えます。

MainActivity.java
import android.app.Activity;
import android.os.Bundle;

import org.rajawali3d.view.SurfaceView; // これ重要!! android.view.SurfaceView ではない!!

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SurfaceView surfaceView = new SurfaceView(this);
        surfaceView.setSurfaceRenderer(new MyRenderer(this)); // setRenderer() ではなく setSurfaceRenderer()
        setContentView(surfaceView);
    }
}

MyRendererクラスも作成します。

MyRenderer.java
import android.content.Context;
import android.graphics.Color;
import android.view.MotionEvent;

import org.rajawali3d.Object3D;
import org.rajawali3d.materials.Material;
import org.rajawali3d.primitives.Sphere;
import org.rajawali3d.renderer.Renderer;
import org.rajawali3d.scene.Scene;

class MyRenderer extends Renderer {

    MyRenderer(Context context) {
        super(context);
    }

    @Override
    protected void initScene() {

        Scene scene = getCurrentScene();

        // 球を作る
        Object3D obj = new Sphere(1, 16, 16); // 半径1の球。16,16は頂点の分割数で、数を大きくするほど球に近づく。
        obj.setPosition(0, 0, -5);            // 視点は0,0,0で0,0,-1の方向を向いている。0,0,-5は画面の奥の方になる
        scene.addChild(obj);

        // 球の見た目を定義する
        Material material = new Material();
        material.setColor(Color.CYAN);
        obj.setMaterial(material);
    }

    @Override
    public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
    }

    @Override
    public void onTouchEvent(MotionEvent event) {
    }
}

実行結果

球が見えます!よくわかんないけど!