Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Ez a program belepesi pontja.
- */
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- // Itt inicializaljuk a keretrndszert.
- // Az init() feldobja az init ablakot, a beallitasoknak megfeleloen letrehoz egy ogl ablakot, beallitja a
- // rendering contextust, illetve konfigolja a renderert is.
- // A loadPackage() kijeloli, es betolti a csomagfilet, amibol minden filet fog osszeszedni automatikausan.
- // Ez azert elonyos mert egyetlen "W.A.D." fileunk van, es nem tobb mint kilencezer. A csomagfile egy egyszeru
- // zip (ejtsd: cip) file, amit egy zlib alapu 3rd party library kezel.
- init();
- loadPackage("testdata.zip");
- /******************************************
- * DEMO INIT
- ******************************************/
- // Ebben a reszben inicializaljuk azokat az elemeket, amiket renderelni akarunk.
- // Minden NGcommon::item osztalybol szarmazo osztaly peldanya egy olyan elemkent kerul ki, amit kivulrol
- // egy un. value trackerbol lehet kapcsolgatni, hogy az adott elemet kirajzola-e vagy sem.
- // TODO: noexport ficsor, mindent kezzel lehessen beallitani
- // Eloszor a frame buffer objekteket hozzuk letre. Ez arra jo, hogy az adott scene ne a kepernyo framebufferebe
- // keruljon, hanem egy sajat, egyenileg kijelolt bufferbe. Tovabba egy idoben tobb kimenetre is lehet renderelni.
- // Ezekre a post-effekt szamitasoknal illetve arnyek lekepezesekor van szukseg.
- light_deptmap = new FWrender::fbo(0, 1, 0);
- postfx_map = new FWrender::fbo(3, 1, 0);
- //Postfx
- float w = FWrender::getWidth(), h = FWrender::getHeight();
- float sx = h/2048, sy = w/2048;
- postfx_sprite = new FWmodel::sprite();
- postfx_sprite->setPosMode(1);
- postfx_sprite->setSize(w, h);
- postfx_sprite->setTexCoord(sx, 0.0, 0.0, sy);
- postfx_sprite->setTex(0, postfx_map->getColorTexture(0));
- postfx_sprite->setTex(1, postfx_map->getColorTexture(1));
- postfx_sprite->setTex(2, postfx_map->getColorTexture(2));
- postfx_sprite->setTex(3, postfx_map->getDepthTexture());
- postfx_shader = new drawShader("passthrough.vert", "postfx.frag");
- // Itt egy kamerat hozunk letre, amit kidrotozunk a value trackerre. Kesobbiekben legalabb 2-3 kamerat illik hasznalni
- // hogy a kameravaltasok is elkeszithetok legyenek.
- cam0 = new camera("cam0");
- //cam1 = new camera("cam1");
- // Itt letrehozzuk a shadereket. Egy vertex - fragment paros ad ki egy shadert (csak egyik nem lehetseges). Ez arra kepes,
- // hogy kezzel felul lehessen biralni a renderer fixed pipeline egy-egy szakaszat (vertex transzformacio, es raszterizalas)
- // es ezzel latvanyosabb effekteket lehessen letrehozni, illetve poszt-effekteket implementalni.
- phongshader = new drawShader("basic.vert", "phong2.frag");
- minimalshader = new drawShader("passthrough.vert", "passthrough.frag");
- // Itt egy skyboxot hozunk letre. A skybox gyakorlatilag egy doboz a vilag korul, a kamera kozeppontjaba transzformalva,
- // depth- teszt es maszkolas nelkul. Egy skyboxra hat darab textura huzhato fel, minden egyes lapra.
- //sky0 = new skybox("sky0","sky_01_top.jpg\0sky_01_bottom.jpg\0sky_01_left.jpg\0sky_01_right.jpg\0sky_01_front.jpg\0sky_01_back.jpg\0");
- sky0 = new skybox("sky0","yklewu.png\0yklewu.png\0yklewu.png\0yklewu.png\0yklewu.png\0yklewu.png\0");
- // Ez lesz a feny.
- light0 = new light("light0");
- // Betoltunk ket modellt filebol (kesobb lehetoseg lesz majd valahogy model, illetve textura generalasra is)
- // Mivel nincsenek sajat modelek, ezert kiserletezesre egyelore kenytelen vagyok stock modelt hasznalni a MLP:FiM
- // (ejtsd: nem akarod tudni mi) sorozatbol. De remelhetoleg lesz sajat model is egyszer, meg szeptember elott.
- // Forras: http://fav.me/215266264
- model0 = new model3ds("poni", "celestia.3ds");
- padlo = new model3ds("fold", "kockaslap.3ds");
- // Ez pedig egy sprite lesz. A sprite egy melysegtol fuggetlenul elhelyezheto 2d-s lap egy texturaval.
- ujkacsa = new sprite("ujduck", "brandneu.png");
- //ujkacsa = new sprite("ujduck", "testGeneratedTexture");
- /******************************************
- * Setup texture generator
- ******************************************/
- // Kiserleti jelleggel lehetoseg van textura generalasra, azonban az ezt megkonnyito eszkozok meg nem allnak
- // rendelkezezesre. A lenyege, hogy egy listahoz hozza lehet adni, hogy melyik request nevnel hivjon meg egy
- // fuggvenyt, es ne filebol keresse. A textura generator magasabb prioritasu a csomagkezelonel, igy lehetseges
- // egyes fileokat overrideolni. (pl. noise.bmp, checker.png)
- NGloader::textureLoader_pushProcTextureCallback("testGeneratedTexture", _testproc);
- /******************************************/
- // Itt jon a player beallitasa, es a precalc. Az idozites a 3rd party zenelejatszora van bizva, igy remelhetoleg
- // nem jon elo az a hiba, hogy elcsuszik a szinkron (vagy ami megtortent a compon, hogy elobb lepett ki az exe,
- // mielott kellett volna) A value vagy sync trackerben (ami az Excess csapat GNU Rocket nevu toolja) az adat
- // sorokra van osztva, es ezen sorok idejet hozza lehet igazitani a zene utemehez (mivel egy tendes trackerrol van szo)
- // Ezutan egy egyszeru for-ciklus vegigszalad a render elemek listajan, es betolt mindent, amit elore beallitottunk
- // fent. Ekkor szalad vegig az ominozus betoltocsik is.
- setPlayer("epsilon.mp3", 140, 8);
- fetchPrecalc();
- /******************************************
- * SETUP VALUE TRACKER
- ******************************************/
- // Ezen a reszen allitjuk be, hogy a value trackerbe milyen ertekeket lassunk, illetve miket allitunk be globalisan kezzel.
- // Ez szigoruan a precalc utan tortenik, mivel a precalc elott meg nincs kesz a kontextus a value trackerrel, es
- // access voilationt eredmenyez.
- // A modelnezeti matrix harom egysegvektorbol es egy origo pontbol all. Ebbe a koordinata rendszerbe kell transzformalni a
- // vilagot, hogy a kamera szemszogebol lehessen latni. Ez lenyegesen le van egyszerusitve.
- // Az 'eye' a szemkoordinata, ez lesz az origo
- // A 'center' egy referencia pont, amivel a kamera iranyat lehet meghatoarozni.
- // Ezen kivul van meg egy 'up' vektor, ami a fel mutato vektort adja meg. Ez a vektor szigoruan meroleges a eye-center
- // egysegvektorara. Ha ez a vektor nem lenne, akkor nem lehetne a kamerat sem forgatni. Ez utobbit automatikusan felirja
- // az api belso fuggvenye, amit mar tetszolegesen elforgathatunk.
- cam0->exportCenter();
- cam0->exportEye();
- cam0->exportRotation();
- // Ez az a hatterszin, amire torli a kepernyot minden frame elott. Ez automatikusan letezik, es exportalhato.
- NGcomp::exportClearColor();
- // A feny koordinatajat exportalja. Jelenleg omni (pont) fenyunk van.
- light0->exportPosition();
- // Beallitja a sprite meretet, poziciojat exportalja.
- // A sprite rajzolo rendelkezik egy olyan feature-rel, amivel megadhato, hogy a koordinata rendszert a kepernyon hova tolja
- // illetve a spriteon belul a pozicio hol legyen.
- ujkacsa->setSize(.5,.5);
- //ujkacsa->setPosition(0,0);
- ujkacsa->exportPosition();
- ujkacsa->setAlignMode(POS_ALIGN_CENTER_BIT | POS_ALIGN_MIDDLE_BIT | ORIGN_ALIGN_CENTER_BIT | ORIGN_ALIGN_MIDDLE_BIT);
- // mainloop + release
- // Itt jon maga a demo. A Playernek kijelol egy callback fuggvenyt, hogy azt hivja meg minden frame kirajzolasakor a mainloopba
- // maga a mainloop ciklus el van rejtve, mivel par plusz dolgot is csinal, amit folosleges lekodolni ujra es ujra.
- setPlayerCallback(play_callback);
- // Itt indul a mainloop maga, es egeszen a kilepesig fut
- play();
- // Itt mindent megolunk, amit fent letrehoztunk, es benne van a gabage collektorunkba
- release();
- // Ide jonnek azon dolgok felszabaditasa, amik nincsenek benne a garbage kollektorba.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement