2013-10-01 4 views
5

私は、Androidの開発には全く新しいです、私は基本的なアクティビティ、マップ、sqliteなどを知っています 私はいくつかの3Dオブジェクトを実装できるようにしたいと思います私のアプリ内でやりとりすることができます。ちょっとした検索の後、私はrajawaliが最良の方法であるように見えた。最初のチュートリアルから始まり、サンプルのドキュメントからソースコードを読み始めました。 私が迷子になったのは、単語のチュートリアルの単語に従っているからです。スクリプトのエラーのためにアプリケーションを実行できません。もし誰かがRajawaliを使ったことがあるのであれば、私が間違っている箇所についていくつかの指摘をするだろう。 (チュートリアルは2ヶ月前に最後に更新されたので、最近のものです)。私は本当に私はそれを助けることができればスプーン改行コードになりたいが、それはありませんrajawaliはどうやって動くのですか(チュートリアル1 on git)

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

} 

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

レンダラ:ここTutorial

は、私のソースコードは、

MainActivityですエラーが 'DiffuseMaterial'にあるように見えます。これはなぜですか、またはmin3DやRajawaliを使用する以外に3Dオブジェクトを操作する良い方法がありますか?

答えて

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. sphereオブジェクトをObject3Dとして代わりにSphereと宣言します。
  2. 変更DiffuseMaterialによってMaterialの材料宣言のために。
  3. Textureを取得するパラメータを変更します。最初のパラメータはカスタム識別子で、2番目のパラメータはリソースIDです。
  4. ロードテクスチャの後にmaterial.setColorInfluence(0);行を追加します。この行が追加されていない場合、「ハート」は赤色になります(なぜそうはわかりません)。
  5. オブジェクトをシーンオブジェクト(getCurrentSceneメソッドでアクセス)に置き換えてaddLightメソッドを呼び出します。この方法としてラインmaterial.addTexture()ため
  6. 追加のtry/catchは今
  7. が、これはRajawaliのバージョンに関係しているように見えますinitScene
+0

ありがとうございます。私はチュートリアルがなぜ機能しないのだろうと思う。残りのチュートリアルはこれですか? –

+0

私は別のチュートリアルをやろうとはしませんでしたが、チュートリアルがrajawaliの以前のバージョン用に作られたようです。 – doanvelagui

+2

super.addChildはもう動作していないようです。 'getCurrentScene()。addChild'は動作します。 – nunespascal

2

の終わりにgetCurrentCamera().setZ(4.2f);を追加TextureExceptionをスローします。this page

それはmasterブランチを使用しないように言う:

クローンを作成またはダウンロードすることを選択したかどうか、あなたはおそらくリリースタグのいずれかを使用したいと思うでしょう。ライブラリとサンプルの両方のマスターブランチは開発に使用され、プロダクションコードでは不安定であると考えられます。安定版をリリースすると、タグが付けられます。クローンを作成する場合は、タグをチェックアウトするだけです。

Rajawaligitでクローンした場合は、タグからチェックアウトしたいと思うでしょう。タグを一覧表示するには:

執筆時点で
$ git tag 
v0.9 

v0.9があなたの唯一の選択肢です。

$ git checkout v0.9 

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

EDIT:

これは、このチュートリアルのように見えるでもないv0.9も最新のmasterブランチに適用されます。私はyou can find linked hereチュートリアル1の作業バージョンを作った。

1

また、マスターブランチを使用してのデモンストレーションとして、貢献した例で構成され、私が書いたRajawaliExamplesアプリケーションを使用することができます。また

https://github.com/MasDennis/RajawaliExamples

ディーンズに明確に引用、ステートメントは、APIがjwoolstonは、シーングラフをサポートするために大規模な変更を行った際に、主に関連したそれらの下に変更したときに怖がらから人々を説得がありました。その作業の大部分は完了し、これまでに終了した場合、他の主要項目が既に完了しているため、apiは現在の状態から大幅に変更される可能性があります。このようなアイテムは、アニメーション、解析オプション、柔軟なレンダリングなどのようなものです。