5

私はAndroid開発にまったく慣れていません.基本的なアクティビティ、マップ、sqliteなどを知っています.3Dオブジェクトを実装して、アプリ内でやり取りできるようにしたいと考えています. 少し検索した後、rajawali が最良の方法であることがわかりました。あなたと同じように、最初のチュートリアルから始めて、サンプル ドキュメントからソース コードを読みました。私が迷子になったのは、チュートリアルを一言一句従ったのに、スクリプトのエラーのためにアプリケーションを実行できないことです。誰かが Rajawali を以前に使用したことがある場合は、どこが間違っているかについていくつかの指針を示していただければ幸いです。(チュートリアルは 2 か月前に最後に更新されたので、かなり最近のものです)。チュートリアル

ここに私のソースコードがあります

主な活動:

package rajawali.tutorials;

import rajawali.RajawaliActivity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends RajawaliActivity {
    private Renderer mRenderer;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRenderer = new Renderer(this);
        mRenderer.setSurfaceView(mSurfaceView);
        super.setRenderer(mRenderer);
    }   
}

レンダラー:

package rajawali.tutorials;

import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import rajawali.lights.DirectionalLight;
import rajawali.materials.textures.ATexture.TextureException;
import rajawali.materials.textures.Texture;
import rajawali.primitives.Sphere;
import rajawali.renderer.RajawaliRenderer;

public class Renderer extends RajawaliRenderer {

    private DirectionalLight mLight;
    Sphere mSphere;

    public Renderer(Context context) {
        super(context);
        setFrameRate(60);
    }
    public void initScene() {
        mLight = new DirectionalLight(1f, 0.2f, -1.0f);
        mLight.setColor(1.0f, 1.0f, 1.0f);
        mLight.setPower(2);

        try {
            *DiffuseMaterial* material = new *DiffuseMaterial*(); //there is an error here (DiffuseMaterial cannot be rsolved as a type)
            material.addTexture(new *Texture(R.drawable.earthtruecolor_nasa_big)*);  //here (constructor Texture(int) cannot be defined)
            mSphere = new Sphere(1, 24, 24);
            mSphere.setMaterial(material);
            mSphere.*addLight(mLight)*;  //and here (The method addLight(DirectionalLight) is undefined for the type Sphere)
            addChild(mSphere);
        } catch (TextureException e) {
            e.printStackTrace();
        }
        getCurrentCamera().setZ(4.2f);
    }

    @Override 
    public void onDrawFrame(GL10 glUnused) {
        super.onDrawFrame(glUnused);
        mSphere.setRotY(mSphere.getRotY() + 1);
    }

}

できればスプーンフィードコードになりたくないのですが、エラーは「DiffuseMaterial」にあるようです。これはなぜですか、または min3D または Rajawali を使用する以外に 3D オブジェクトを操作するより良い方法はありますか?

4

3 に答える 3

7

また、次のコードを使用してこの rajawali チュートリアルを実行しようとしています。

クラスRajawaliTutorialActivity

package rajawali.tutorials;

import rajawali.RajawaliActivity;
import android.os.Bundle;

public class RajawaliTutorialActivity extends RajawaliActivity {

    public RajawaliTutorialRenderer mRenderer; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mRenderer = new RajawaliTutorialRenderer(this);
        mRenderer.setSurfaceView(mSurfaceView);
        super.setRenderer(mRenderer);
    }
}



クラスRajawaliTutorialRenderer

package rajawali.tutorials;

import javax.microedition.khronos.opengles.GL10;

import android.content.Context;

import rajawali.Camera;
import rajawali.Object3D;
import rajawali.lights.DirectionalLight;
import rajawali.materials.Material;
import rajawali.materials.textures.ATexture.TextureException;
import rajawali.materials.textures.Texture;
import rajawali.primitives.Sphere;
import rajawali.renderer.RajawaliRenderer;

public class RajawaliTutorialRenderer extends RajawaliRenderer {

    public DirectionalLight light;
    public Object3D sphere;
    public Context context;
    public Camera camera;

    public RajawaliTutorialRenderer(Context context) {
        super(context);
        this.context = context;
        setFrameRate(60);
    }

    public void initScene() {
        light = new DirectionalLight(1f, 0.2f, -1.0f); // set the direction
        light.setColor(1.0f, 1.0f, 1.0f);
        light.setPower(2);

        try{
            Material material = new Material();
            material.addTexture(new Texture("earthColors", R.drawable.earthtruecolor_nasa_big));
            material.setColorInfluence(0);
            sphere = new Sphere(1, 24, 24);
            sphere.setMaterial(material);
            getCurrentScene().addLight(light);
            super.addChild(sphere);
        } catch (TextureException e){
            e.printStackTrace();
        }

        getCurrentCamera().setZ(4.2f);
    }

    @Override
    public void onDrawFrame(GL10 glUnused) {
        super.onDrawFrame(glUnused);
        sphere.setRotY(sphere.getRotY() + 1);
    }
}

変更点は次のとおりです。

  1. sphereobject をObject3D代わりに宣言しますSphere
  2. 材料宣言のために変更DiffuseMaterialしてください。Material
  3. パラメータを get に変更しますTexture。最初のパラメーターはカスタム識別子で、2 番目のパラメーターはリソース ID です。
  4. テクスチャをロードした後に行を追加しmaterial.setColorInfluence(0);ます。この行が追加されていない場合、「ハート」が赤くなります(理由はわかりません)。
  5. sphereオブジェクトをシーン オブジェクトに置き換えて (メソッドでアクセスgetCurrentScene)、メソッドを呼び出しますaddLight
  6. material.addTexture()このメソッドが TextureException をスローするようになったため、行に try/catch を追加します。
  7. getCurrentCamera().setZ(4.2f);initScene の最後に追加
于 2013-10-05T02:16:08.733 に答える
2

のバージョンが関係しているようですRajawali

このページmasterでは、ブランチを使用しないように言っています:

クローンを作成するかダウンロードするかにかかわらず、リリース タグのいずれかを使用することをお勧めします。ライブラリとサンプルの両方のマスター ブランチは開発に使用され、製品コードでは不安定であると見なされます。安定版をリリースすると、タグが付けられます。クローンを作成している場合は、タグをチェックアウトするだけです。

Rajawaliを使用して複製しgitた場合は、タグからチェックアウトする必要があります。タグを一覧表示するには:

$ git tag
v0.9

執筆時点でv0.9は、 が唯一の選択肢です。

$ git checkout v0.9

これで利用可能にDiffuseMaterialなります。ただし、他のクラスのいくつかはまだ不足しています。

編集:

このチュートリアルv0.9は最新の master ブランチにも適用されないようです。ここにリンクされているチュートリアル 1 の作業バージョンを作成しました。

于 2014-02-21T02:56:59.077 に答える
1

master ブランチの使用方法のデモンストレーションとして、私が作成した RajawaliExamples アプリケーション (提供されたサンプルで構成される) を使用することもできます。

https://github.com/MasDennis/RajawaliExamples

また、Deans の引用を明確にするために、そこに作成された声明は、API が変更されたときに人々が動揺するのを思いとどまらせます。その作業の大部分が完了し、他の主要な項目がすでに完了しているため、API は現在の状態から大幅に変更される可能性があります。このようなアイテムは、アニメーション、追加の解析オプション、柔軟なレンダリングなどの要素です。

于 2015-01-28T03:44:26.163 に答える