public void initScene() { SimpleMaterial material = new SimpleMaterial(); material.setUseSingleColor(true); // -- "curve1" will be the original curve. Note that we create two curves for // demonstration purposes only. You'd typically create one curve and then // reparametrize it. CatmullRomCurve3D curve1 = new CatmullRomCurve3D(); CatmullRomCurve3D curve2 = new CatmullRomCurve3D(); for (int i = 0; i < 16; i++) { // -- generate a random point within certain limits Vector3 pos = new Vector3(-1 + (Math.random() * 2), -1.2f + (Math.random() * 2.4f), 0); curve1.addPoint(pos); curve2.addPoint(pos); // -- add a wireframe cube so we can see what the original // points were Cube s = new Cube(.06f); s.setMaterial(material); s.setColor(CURVE1_COLOR); s.setPosition(pos); s.setDrawingMode(GLES20.GL_LINES); addChild(s); } // -- draw the first curve drawCurve(curve1, CURVE1_COLOR, new Vector3()); BaseObject3D pathFollowObject = new Sphere(.04f, 16, 16); pathFollowObject.setColor(CURVE1_COLOR); pathFollowObject.setMaterial(material); addChild(pathFollowObject); // -- animate a sphere that follow the first curve. // This shows the non constant speed of a non parametrized curve. TranslateAnimation3D anim = new TranslateAnimation3D(curve1); anim.setDuration(ANIMATION_DURATION); anim.setTransformable3D(pathFollowObject); anim.setRepeatMode(RepeatMode.REVERSE_INFINITE); registerAnimation(anim); anim.play(); // -- reparametrize the curve for uniform distribution curve2.reparametrizeForUniformDistribution(curve2.getPoints().size() * 4); List<Vector3> points = curve2.getPoints(); // -- put spheres on the curve where the new points are for (int i = 0; i < points.size(); i++) { Vector3 pos = points.get(i); Sphere s = new Sphere(.02f, 4, 4); s.setMaterial(material); s.setColor(CURVE2_COLOR); s.setPosition(pos); addChild(s); } // -- draw the second, reparametrized, curve drawCurve(curve2, CURVE2_COLOR, new Vector3()); pathFollowObject = new Sphere(.04f, 16, 16); pathFollowObject.setColor(CURVE2_COLOR); pathFollowObject.setMaterial(material); addChild(pathFollowObject); // -- animate a sphere on the second curve. // This shows a more or less constant speed of a parametrized curve. anim = new TranslateAnimation3D(curve2); anim.setDuration(ANIMATION_DURATION); anim.setTransformable3D(pathFollowObject); anim.setRepeatMode(RepeatMode.REVERSE_INFINITE); registerAnimation(anim); anim.play(); }
public void initScene() { // // -- Pack all textures in the "assets/atlas" folder into an 1024x1024 atlas // -- this should be used to simplify implementation of multiple textures // -- and to reduce texture binding calls to the GPU for increased performance // mAtlas = new TexturePacker(mContext).packTexturesFromAssets(1024, 1024, 0, false, "atlas"); mAtlasMaterial = new Material(); mSphereMaterial = new Material(); mCubeMaterial = new Material(); mPlaneMaterial = new Material(); try { // // -- Add the entire atlas to a material so it can be shown in the example // -- this is not necessary in typical use cases // mAtlasMaterial.addTexture(new Texture("atlasTexture", mAtlas.getPages()[0])); mAtlasMaterial.setColorInfluence(0); // // -- Add each target texture to the material // -- they are pulled from the atlas by their original resource name // mSphereMaterial.addTexture(new Texture("earthtruecolor_nasa_big", mAtlas)); mSphereMaterial.setColorInfluence(0); mCubeMaterial.addTexture(new Texture("camden_town_alpha", mAtlas)); mCubeMaterial.setColorInfluence(0); mPlaneMaterial.addTexture(new Texture("rajawali", mAtlas)); mPlaneMaterial.setColorInfluence(0); } catch (TextureException e) { e.printStackTrace(); } // // -- Show the full atlas for demonstration purposes // mAtlasPlane = new Plane(Axis.Z); mAtlasPlane.setMaterial(mAtlasMaterial); mAtlasPlane.setY(1); addChild(mAtlasPlane); mTileSphere = new Sphere(.35f, 20, 20); mTileSphere.setMaterial(mAtlasMaterial); // // -- The method 'setAtlasTile' is used to scale the UVs of the target object // -- so that the appropriate image within the atlas is displayed // mTileSphere.setAtlasTile("earthtruecolor_nasa_big", mAtlas); mTileSphere.setPosition(0, -.1f, 0); addChild(mTileSphere); mTileCube = new Cube(.5f); mTileCube.setMaterial(mAtlasMaterial); mTileCube.setAtlasTile("camden_town_alpha", mAtlas); mTileCube.setPosition(-.5f, -1f, 0); mTileCube.setRotX(-1); addChild(mTileCube); mTilePlane = new Plane(.6f, .6f, 1, 1); mTilePlane.setMaterial(mAtlasMaterial); mTilePlane.setAtlasTile("rajawali", mAtlas); mTilePlane.setPosition(.5f, -1f, 0); addChild(mTilePlane); }