Как заставить Раджавали работать (урок 1 по git)
Я довольно новичок в разработке для Android, я знаю основы, карты, sqlite и т. Д. Я хотел бы иметь возможность реализовывать некоторые 3D-объекты, чтобы иметь возможность взаимодействовать с моими приложениями. После небольшого поиска я обнаружил, что раджавали, кажется, лучший метод. Как и вы, я начал с первого урока и прочитал исходный код из примера документации. Там, где я заблудился, я дословно следовал руководству и не могу запустить приложение из-за ошибок в скрипте. Если бы кто-то использовал Раджавали раньше, я бы оценил некоторые указания относительно того, где я ошибся. (учебник последний раз обновлялся 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);
}
}
Renderer:
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?
3 ответа
Я также пытался запустить этот учебник Раджавали, используя следующий код.
Класс 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);
}
}
Смотрите, что изменения:
- объявлять
sphere
объект какObject3D
вместоSphere
, - менять
DiffuseMaterial
отMaterial
для материального декларирования. - изменить параметры, чтобы получить
Texture
, Первый параметр - это пользовательский идентификатор, а второй параметр - идентификатор ресурса. - добавить строку
material.setColorInfluence(0);
после загрузки текстуры, если эта строка не добавлена, "сердце" становится красным (я не знаю почему). - замещать
sphere
объект за объектом сцены (доступ с помощьюgetCurrentScene
метод) позвонитьaddLight
метод. - Добавить try/catch для строки
material.addTexture()
так как этот метод теперь выдает исключение TextureException - добавлять
getCurrentCamera().setZ(4.2f);
до конца initScene
Похоже, это связано с версией Rajawali
,
На этой странице написано не использовать master
ветка:
Независимо от того, выберете ли вы клонирование или загрузку, вы, вероятно, захотите использовать один из тегов выпуска. Основная ветвь библиотеки и примеров используется для разработки и должна рассматриваться как нестабильная для производственного кода. Когда мы выпустим стабильную версию, она будет помечена. Если вы клонируете, вы можете просто проверить тег.
Если вы клонировали Rajawali
с помощью git
, вы хотите оформить заказ из тега. Чтобы перечислить теги:
$ git tag
v0.9
На момент написания v0.9
твой единственный выбор.
$ git checkout v0.9
Теперь у вас будет DiffuseMaterial
имеется в наличии. Тем не менее, некоторые другие классы все еще отсутствуют.
РЕДАКТИРОВАТЬ:
Похоже, что этот учебник не относится к v0.9
ни последний мастер ветки. Я сделал рабочую версию урока 1, которую вы можете найти по ссылке здесь.
Вы также можете использовать написанное мной приложение RajawaliExamples, которое состоит из представленных примеров, в качестве демонстрации использования основной ветви.
https://github.com/MasDennis/RajawaliExamples
Также, чтобы прояснить цитату Дина, сделанное там заявление отговаривает людей от волнения, когда API меняется под ними, что было особенно актуально, когда jwoolston вносил большие изменения для поддержки графов сцены. Большая часть этой работы выполнена, и, если она когда-либо будет завершена, API, скорее всего, значительно изменится по сравнению с текущим состоянием, так как другие основные элементы уже выполнены. Такими элементами являются такие элементы, как анимация, дополнительные параметры синтаксического анализа, гибкий рендеринг и т. Д.