2016年4月7日 星期四

Android Rajawali 3D 基礎設定與練習


一、在專案中的 gradle 中加入 Rajawali SDK 

  1. 在 build.gradle (Module : app) 內的 dependencies {...} 或在 Project Structure - Dependencies 中加入:
    compile 'org.rajawali3d:rajawali:1.0.186-SNAPSHOT@aar'

  2. 在 build.gradle (Project: yourProjectName) 內的 allprojects {repositories {...}} 中加入:
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }

二、建立 RajawaliRenderer 渲染器



  1. 在專案中加入繼承 RajawaliRenderer 的 Class
     public class mRender extends RajawaliRenderer {
        public mRender(Context context) {
            super(context);
        }
        @Override
        protected void initScene() {
        }
        @Override
        public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
        }
        @Override
        public void onTouchEvent(MotionEvent event) {
        }
    }
  2. mRender() 結構涵式中設定 FrameRate

    public Renderer(Context context) {
            super(context);
            this.context = context;
            setFrameRate(60);
     }
  3. 在 initScene() 中加入之後想要建立的物件 :
    Sphere - 球體物件、
    DirectionalLight - 定向光、
    DebugVisualizer - debug 隔線、
    Object3D - 3D 物件,可透過 LoaderOBJ、LoaderAWD、Loader3DSMax 等 Loader 來讀取模型資源檔、
    Camera 相機、
    ...

    而在 earthSphere 範例中所使用:

            /** 設定燈光 */
            directionalLight = new DirectionalLight(1f, .2f, -1.0f);
            directionalLight.setColor(1.0f, 1.0f, 1.0f);
            directionalLight.setPower(2);
            getCurrentScene().addLight(directionalLight);

            /** 設定材質 */
            Material material = new Material();
            material.enableLighting(true);
            material.setDiffuseMethod(new DiffuseMethod.Lambert());
            material.setColor(0);

            Texture earthTexture = new Texture("Earth", R.drawable.earthtruecolor_nasa_big);
            try{
                material.addTexture(earthTexture);

            } catch (ATexture.TextureException error){
                Log.d("DEBUG", "TEXTURE ERROR");
            }
           /** 設定地球球體 */
            earthSphere = new Sphere(1, 24, 24);
            earthSphere.setMaterial(material);
            getCurrentScene().addChild(earthSphere);

            getCurrentCamera().setZ(4.2f);

  4. 透過 Override - onRender() 方法,來更新渲染的物件。
    在 earthSphere 範例中所使用:
        @Override
        public void onRender(final long elapsedTime, final double deltaTime) {
            super.onRender(elapsedTime, deltaTime);
            earthSphere.rotate(Vector3.Axis.Y, 1.0);

        }



三、在 MainActivity 的 onCreate() 中加載 RajawaliSurfaceView 和設定 Surface 的 Render


在 earthSphere 範例中所使用:

    mRender renderer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final RajawaliSurfaceView surface = new RajawaliSurfaceView(this);
        surface.setFrameRate(60.0);
        surface.setRenderMode(IRajawaliSurface.RENDERMODE_WHEN_DIRTY);

        // Add mSurface to your root view
        addContentView(surface,
                               new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT));

        renderer = new mRender(this);
        surface.setSurfaceRenderer(renderer);
    }

完成後 Build And Run 在手機裝置上:

GitHub : NewSetRajawali

參考網址:


四、參考 RajawaliExamples 側選 General - ArcballCamera 範例建立 seekbar 控制練習

GitHub:MyRajawaliOpenGL




Android Vuforia AR 更換辨識物與顯示模型 (1)


既前篇 Android Vuforia AR 範例:Core Features 的開啟範例後,
我們要開始嘗試替換辨識物和顯示模型進行練習.

一、辨識物的設定

  1. 官網新增 Target,並下載檔案
    • 解壓縮得到 DemoDatabase.dat、DemoDatabase.xml 兩個檔案
  2. Assets 內放置檔案

  3. 修改至程式中(以 Core Features 項目中的 ImageTargets 進行)
    • 在 VuforiaSamples.ImageTargets 中修改程式部分:
      • -------------------------------------------------------------
      • 在 ImageTargets.java 中,修改和新增辨識物的 Database: DemoDatabase.xml
      • -------------------------------------------------------------
      • -------------------------------------------------------------
      • 在 ImageTargetRenderer.java 中,修改和新增辨識物資料庫的內容項目:TestTarget (可參考官網 TargetManager 或 DemoDatabase.xml)
      • -------------------------------------------------------------
      • DemoDatabase.xml 內容:
      • 在 ImageTargetRenderer.java 找到 renderFrame() 方法,並修改和新增 textureIndex 的判斷:
      •  renderFrame() 負責處理 AR 辨識結果和模型矩陣運算,之後將用於第三方模型套件應用.
    • 測試結果: