Android Programjaim

Android, Flutter/Dart, Kotlin, Java, Unity, HarmonyOS

.Obj 3d file parser és JNI

2011. november 28. 23:52 - lacas8282

Kezdjünk bele.

Java-ban írtam az .obj file parserem, jelenleg kezel minden elemet benne, nagyon szépen.
Egyedüli hátrányként megemlítem, hogy java-s, tehát egy nagyobb file-al elég sokáig elszórakozik. Értsd: 3 mb-os file esetén kezdetben 55 mperc volt az idő, később pedig maximum 23 mpercre voltam képes redukálni a parse-olást. Nem igazán erre találták ki a mobil telókat, és a javat sem.

Ami most lesz: megpróbálom átrakni NDK-ba. Ehhez írok egy kisebb kis tutorialt az utókornak:

az android proejcten belül kell egy jni mappa, ebbe kell egy Android.mk file és egy akarmi.c file.

android.mk file tartalma

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_LDLIBS := -llog #logolhassunk
include $(BUILD_SHARED_LIBRARY)

Az -llog paraméter azért kell, hogy C-ből írhassunk a Logcat-re.

Nézzünk egy java filet, ami meghív egy c-t.

    public native String stringFromJNI();

    static {
        System.loadLibrary("hello-jni");
    }

Ez esetben a hello-jni libet fogja betölteni a projectből (kell lennie egy .so filenak tehát)
Az .so file generálásához kell egy cygwin, ezt letölthetjük a cygwin.com-ról.

Telepításnál a "devel" mappára toljunk "install-t" (jobb klikk a groupon)
majd telepítsük.

cygwin elindítása, beírjuk: make -v

amennyiben kiír mindenféle make paramot, helpet, akkor eddig okék vagyunk. Ha nem akkor telepítéskor ki kell választani a make-et is.
 

Ez eddig ok.

lássuk a c filet.

    jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject obj) {
        return (*env)->NewStringUTF(env, "Hello from JNI !"); //The following C JNI function converts an array of C characters to a jstring
    }

mint látható ezt a cuccot fogjuk meghívni java-ból.

Ezután elmentünk mindent és:

cygwinben belépünk oda ahol a projectünk van: cd /../../ akármi (unixos parancssor ezért vmiért a perjelek fordítva lesznek)

majd beírjuk: /android_ndk/ndk_build

ezután ha jól csináltuk, akkor kiír dolgokat sharedlibrary: libname.so stb-stb-stb

visszamegyünk Eclipse-be, F5 a projecten. Megjelent pár új mappa: libs és obj, benne a mi kis .so fileunk.

futtassuk a filet, és tádámm, működik!
 

komment

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

2011. november 23. 15:13 - lacas8282

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.

komment

Helyzetjelentés 5.0

2011. október 04. 13:03 - lacas8282

Lássuk mostanság mik vannak napirenden:

Web-fejlesztés
-php oldalak fejlesztése adminisztrációs felületről erősen keresőoptimalizáltan

C# és WinPhone7 fejlesztés
-egyelőre tanulgatom, életem első programját 1-2 óra alatt portoltam át java-ról/androidról
-nemsokára el is érhető az apphub-on

Arduino
-Ez még egy nagyon új hobby, elektronika, szervok vezérlése, robotika, stb. Eléggé szerteágazó, és sok dolgot lehet benne megvalósítani. Jelenleg áramköri elemek (bluetooth panel, és hasonlók) beszerzésére várok, ezután indulhat meg a tényleges áramkör készítés és programozás

Android fejlesztések
Természetesen továbbra is vállalok android fejlesztéseket, mind smartphone, mind pedig TAB verziókra. 2 éves tapasztalatom van benne, de 30+ projecttel rendelkezem, tehát mondhatom azt is, hogy eléggé tapasztalt lettem benne az elmúlt évek alatt.
(napilapok portolása, GPS alkalmazások, web-service hívások, xml, json, stb.)

 Update 10.05: TV Most Update a marketen, v2.0

komment
süti beállítások módosítása