OpenGL - základy s vykreslováním

Moderátor: mArtinko5MB

OpenGL - základy s vykreslováním

Příspěvekod frp » úte 08. lis 2016 22:15:09

Ahoj,
potřeboval bych poradit s OpenGL a vykreslováním 2D grafiky. Možná jsou to hloupé otázky, ale s OpenGL teprve začínám a rád bych si ujasnil některé věci.
Zkoušel jsem to podle této knihy:
http://knihy.cpress.cz/programujeme-hry ... oid-4.html

Nejedná se přímo o ten příklad z knížky, ale spíše o OpenGL obecně.
Uvedu zde ještě části, které jsou v knize použity. Je tam třída spritu s nastavením:
Kód: Vybrat vše
    private FloatBuffer vertexBuffer;
    private FloatBuffer textureBuffer;
    private ByteBuffer indexBuffer;

    private float vertices[] = {
            0.0f, 0.0f, 0.0f,
            1.0f, 0.0f, 0.0f,
            1.0f, 1.0f, 0.0f,
            0.0f, 1.0f, 0.0f,
    };

    private float texture[] = {
            0.0f, 0.0f,
            0.25f, 0.0f,
            0.25f, 0.25f,
            0.0f, 0.25f,
    };

    private byte indices[] = {
            0,1,2,
            0,2,3,
    };


A potom je tam druhá třída Renderer, kde jsou metody, ve kterých dochází k vykreslování a je tam:
Kód: Vybrat vše
gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glPushMatrix();
        gl.glScalef(1f, 1f, 1f);
        gl.glTranslatef(0f, 0f, 0f);
        gl.glMatrixMode(GL10.GL_TEXTURE);
        gl.glLoadIdentity();
        gl.glTranslatef(0.0f, scrollElem1, 0.0f);
        mujElement.draw(gl);
        gl.glPopMatrix();
        gl.glLoadIdentity();


A teď bych se k tomu chtěl zeptat:
Parametr vertices[] definuje, jak se má ten sprite roztáhnout po displeji. A je to v procentech (ne v pixelech).

1)
A co když já chci vykreslit obrázek o velikosti 45x30px a chci aby se neroztahoval, ale měl skutečně tento rozměr. Umí to OpenGL nebo já musím spočítat podle rozměrů displeje správné hodnoty pro vertices[] ?
Případně vertices[] nechat, aby se s tím pracovalo jako s obrázkem roztaženým přes celý displej a až v té druhé třídě Rendereru spočítat hodnoty pro gl.glScalef(1f, 1f, 1f);, které to zmenší?

2)
Co když budu chtít, aby aplikace reagovala na dotyk a při stisknutí toho obrázku z toho předchozího bodu (1) něco udělala?
Musím si v tomto případě někde uchovávat pozici těch obrázků a při dotyku zjišťovat, čeho jsem se dotkl nebo mi OpenGL může říct, co je na určitém místě na displeji?

Díky.
  • 0

frp
Nové Androidě
 
Příspěvky: 2
Registrován: ned 26. dub 2015 9:08:23
Reputace: 0
Typ mobilu / ROM: -

Reklama


Re: OpenGL - základy s vykreslováním

Příspěvekod adamdroid » stř 09. lis 2016 23:20:34

Opengl je dost úzkoprofilová specializace, kterou skoro nikdo nedělá. Drtivá většina lidí dnes veme nějaký framework. Já už své 2D vykreslovací jádro mám a dalo to hodně a hodně práce (přitom to je pár řádků). Ale pár věcí ti tu k tomu napíšu:

- knížku neznám, drtivá většina je neaktuálních a i anglické v pdf novější řeší vždy jen jeden často neúčelněj příklad
- zdá se , že jedeš na open gl es 1, to je slepá větěv, už x let tu je 2, respektive 3, která je totálně překopaná

1) vertices urcuje body v prostoru, indices je spojuje do trojuhelniku, texture urcuje bod v texture atlasu ku bodu v prostoru (1.0f je plna sirka te textury cele, takze se neurcuje v px, je to docela nesikovne ale pouzitelne)

v opengl 2+ se gl.scale nepouziva, defakto se nic "gl." nepouziva , takze fakt nevim

2) edit: s tim moc neporadim, tohle jsem jeste resit nemusel, myslim ze tam zadna pripravena cesta neni, jedine co je mozne je uchovavat si informaci o poloze "kamery" a "objektu" a pak si to dopocitavat coz je dost hardcore
  • 0

adamdroid
Stálý androiďák
 
Příspěvky: 57
Registrován: pon 03. úno 2014 14:10:58
Reputace: 0
Typ mobilu / ROM: Nexus 5X
Tablet: Acer Iconia Tab 510

Re: OpenGL - základy s vykreslováním

Příspěvekod frp » čtv 10. lis 2016 16:27:44

Díky za zprávu. Podle té knížky je to opravdu ES 1.0.

A jak jsem tě tak pochopil, asi by bylo lepší knížku odložit a spíše to zkusit přes nějaký framework.
Neměl jsem v plánu zkoušet žádnou 3D hru, ale něco jednoduchého ve 2D. Namalovat si nějaké obrázky a ty potom vykreslovat jako stripes.
Pro takovou blbůstku by bylo nejlehčí malovat to přímo bez požití OpenGL, ale já si chci právě práci s OpenGL vyzkoušet.

Třeba něco na způsob plošinovky:
https://play.google.com/store/apps/deta ... eformarioo

nebo takové to spojování stejných věci (určitě bez těch speciálních výbuchů):
https://play.google.com/store/apps/deta ... aniamatch3

Já jsem zkusil zagooglovat po nějakém frameworku a skončil u libGDX. Myslíš, že by to bylo pro mé účely vhodné nebo mám zkusit raději něco jiného?
https://libgdx.badlogicgames.com/news.html
  • 0

frp
Nové Androidě
 
Příspěvky: 2
Registrován: ned 26. dub 2015 9:08:23
Reputace: 0
Typ mobilu / ROM: -

Re: OpenGL - základy s vykreslováním

Příspěvekod adamdroid » čtv 10. lis 2016 17:32:01

Jasný, prostý canvas by byl do začátku určitě snažší a pochopitelnější, i já si to toto říkám. Ale taky jsem se chtěl opengl naučit. Ohledně frameworku, to neporadím, nikdy se mě nepovedlo žádný začít používat a je fuk zda to byl framework na weby či android aplikace.

Zde ochutnávka toho co jsem udělal. FPS mam loknutý, není potřeba aby to jelo rychleji a žralo více baterie.
https://ulozto.cz/!eo5GrjAK3bh6/hra-mp4
heslo: hra

Jinak frameworky jsou jiste dobrá volba, pokud je človek dokáže pochopit a správně použít.
  • 0

adamdroid
Stálý androiďák
 
Příspěvky: 57
Registrován: pon 03. úno 2014 14:10:58
Reputace: 0
Typ mobilu / ROM: Nexus 5X
Tablet: Acer Iconia Tab 510


Zpět na Obecná diskuze o vývoji

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků
Reputation System ©'