2013-10-01 1 views
5

나는 안드로이드 개발에 익숙합니다. 기본 활동,지도, sqlite 등을 알고 있습니다. 일부 3D 객체를 구현할 수 있기를 바랍니다. 내 애플 리케이션 내에서 상호 작용할 수 있습니다. 탐구의 조금 후에 나는 rajawali가 제일 방법 인 것을 찾아 냈다. 처음 튜토리얼을 시작하고 예제 문서에서 소스 코드를 읽었습니다. 내가 잃어버린 곳은 단어에 대한 튜토리얼 단어를 따라 왔고 스크립트의 오류로 인해 애플리케이션을 실행할 수 없다. 만약 내가 잘못한 부분에 대해 약간의 조언을하기 전에 누군가 Rajawali를 사용했다면. (튜토리얼은 2 개월 전 마지막 업데이트되었습니다.) 여기어떻게하면 rajawali가 작동할까요? (git on tutorial 1)

Tutorial 내 소스 코드

MainActivity입니다 :

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 객체를 조작하는 더 좋은 방법이 있습니까?

답변

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입니다. 첫 번째 매개 변수는 사용자 지정 식별자이고 두 번째 매개 변수는 리소스 ID입니다.
  4. 로드 텍스쳐 후 라인 material.setColorInfluence(0);을 추가하십시오.이 라인이 추가되지 않으면 "하트"가 빨간색이됩니다 (나는 확실하지 않습니다).
  5. 개체를 장면 개체 (getCurrentScene 메서드로 액세스)로 바꾸고 addLight 메서드를 호출하십시오. 이 방법으로 라인 material.addTexture()에 대한
  6. 추가 시도/캐치 지금
  7. 이이 Rajawali의 버전과 관련이있다처럼 보이는 initScene
+0

감사합니다. 튜토리얼이 왜 작동하지 않는지 궁금합니다. 나머지 자습서는 이와 같이 있습니까? –

+0

확실하지는 않지만, 다른 튜토리얼을 시도하지는 않았지만 이전 버전의 rajawali에 대한 튜토리얼이 만들어진 것처럼 보입니다. – doanvelagui

+2

super.addChild가 더 이상 작동하지 않는 것 같습니다. 'getCurrentScene(). addChild'가 작동합니다. – nunespascal

2

의 끝에 getCurrentCamera().setZ(4.2f);을 추가 TextureException가 발생합니다.당신이 복제 또는 다운로드하는 선택하든

, 당신은 아마 릴리스 태그 중 하나를 사용하는 것이 좋습니다 : this page

IT는 master 분기를 사용하지 말한다. 라이브러리와 예제 모두의 마스터 브랜치는 개발에 사용되며 프로덕션 코드에 대해 불안정한 것으로 간주되어야합니다. 안정 버전을 출시하면 태그가 추가됩니다. 복제중인 경우 단순히 태그를 체크 아웃 할 수 있습니다.

Rajawaligit을 사용하여 복제 한 경우 태그에서 체크 아웃해야합니다. 태그를 나열하려면 다음

글을 쓰는 시점에서
$ git tag 
v0.9 

, v0.9이 유일한 선택입니다.

$ git checkout v0.9 

이제 DiffuseMaterial을 사용할 수 있습니다. 그러나 다른 클래스 중 일부는 여전히 누락되었습니다.

편집 :

그것은이 튜토리얼과 같은하지 둘 v0.9도 최신 마스터 브랜치에 적용됩니다. 튜토리얼 1의 작업 버전을 만들었습니다. 어느 것이 you can find linked here입니다.

1

필자가 작성한 RajawaliExamples 애플리케이션을 마스터 분기를 사용하는 데모로 사용할 수도 있습니다.

https://github.com/MasDennis/RajawaliExamples

또한 학장에 명확하게

견적, 문은 API가 jwoolston 장면 그래프를 지원하기 위해 큰 변화를 만들 때 주로 관련 있던 그 아래에 변경 때 놀라 사람들을 설득가했다. 이 작업의 대부분은 완료되며, 완료되면 API는 다른 주요 항목이 이미 완료되면서 현재 상태에서 크게 변경 될 수 있습니다. 이러한 항목은 애니메이션, 파싱 옵션, 유연한 렌더링 등과 같은 요소입니다.