Android Programjaim

Android fejlesztes, java, kotlin, web.. miegymas:)

Live wallpaperek, és a kis 3d engine-em

2011. november 23. 15:13 - lacas82

Hú de rég voltam itt is... Pár dolgot megint sikerült átírnom az egész live wallpaper/opengl-es 3d motorban. Gyakorlatilag már vagy 200-szor újraírhattam. Ez abból adódik, hogy nagyon sok okos megoldást látok a neten, pl. (min3D a legújabb 3d engine) és egyre jobb dolgokat akarok írni.

Ezért persze teljesen átírtam pl. a live wallpaperemet (package nevek/classok és inner/static classjaik)

Pár dolog lett a 3d motorban is:

Kezel már egyszerűen objektum alapú 2D elemeket, úgy mint, Line2D, Point2D, és lett egy Object interface, amit majd szépen bővítgetek. (ez lesz az alapja az összes 3d/2d-s objektumomnak)

A vertexes osztály átnevezve Meshes-re, és a Meshes-be raktam pár újdonságot,

-addCube
-addVertexes
-addSphere
-addLine2D
-addPoint2D
-addTorus
-...stb

mj. implementálni kell a 3D-s funkciójukat is ezeknek, illetve kiheleyezni az objects package-be (pl. new Sphere(...))

maga az egész opengl-es classom is sokkal többet tud már. Nézzünk pár példát:
Létrehoztam egy Draw classt, amit 1szer kell inicializálni, majd van benne egy draw() metódus.

a példák:

ScaleAnimator asd=new ScaleAnimator(100, 480, 1, true);

init() {
  line    =new Line2D("line1", new Point(0,0), new Point(0,300));
}

draw() {
        opengl.linewidth(10);
        line.setXY((int) asd.next().value(), 400)
            .setColor("00aaffff")
                .setP1(0, 0)
                .setP2(0, (int)asd.value())
            .draw();

}

a ScaleAnimator gyakorlatilag egy ide-oda ugró animációt testesít meg 2 érték közt, amibe megadjuk, hogy 100 a kiindulóérték, 480 az érkezési, és a steps=1, a végén a true azt jelenti, hogy ide-oda menjen. Tehát 480-nál ne fejezze be a mozgást, hanem forduljon vissza. (ezt még régebben írtam, az Angry Airs-hez)

minden objectnek lesz egy setColor, setCoords öröklődő értéke. ez esetben egy line2d soztályról van szó, itt van setP1, setP2 koordináta is, ez azt jelenti, hogy animáljuk a végpontját is. (egyre nagyobb hosszabb lesz a vonal)

a line osztályom gyakorlatilag mindig a Meshes osztályt hívja meg, ezen keresztül pedig a Mesh osztályt. A mesh osztály sok újdonságot tartalmaz. Mik ezek?

Mesh changeCoord
Mesh changeCoords []

Mesh animateTextureCoordsSlide
Mesh animateTextureCoordsTop

...stb...

opengl kapott enable/disable, és environment function-öket. Valamint végre működőképes setCamera() metódus is lett.

az opengl-ben lévő cuccok teljesen beágyazhatóak egymásbe, (lásd: return this), nem kell külön hívogatnunk. alphafunc is prezentálva lett, valamint a blend módokat könnyebben kezelhetjük. Lett egy pathes package, ebbe implenetáltam pár alap ficsőrt, circle, ellipsePath. Majd még esetleg rakok bele dolgokat később.

Az igazság szerint, ahogy fejlesztem a cuccot, egyre jobban látom, hogy mennyi dolog van még, amit implementálni kell/kellene/lehet.
 

És végül még egy kis kód:

 

    void drawCube() {
        opengl.setAlphaBlendEnabled();
       
        float dist=0.8f;
        int countx=6;
        int county=4;
       
        for (int i=0; i<county; i++) {
            for (int j=0; j<countx; j++) {
                Meshes.selectById("cube")
                        .activateTexture()
                                        //top, left
                            .translate(-1.5f+(i*dist), (leftx-1)+(j*dist), -6)
                                .rotate(torusrot, 1, 0, 0)
                                .rotate(torusrot, 0, 1, 0)
                            .scale(0.3f, 0.3f, 0.3f)
                            .colorFromHEX8("00ee00ff")
                        .draw(true);
            }
        }
        opengl.setAlphaBlendDisabled();
    }

 


A következő célpontok:

-glpicking 3D-ben
-maszkolás textúrák között
-végre valami .obj loader, ami gyors is!!!
-animated model file (Model class)

UPDATE: maszkolás, és obj file parser KÉSZ! persze még nem kezel pl animációkat, stb, de ez már valami.