Kategória: Programozás




2017. Július 09.

Durba-tó interaktív adatok

írta: Xaint

Teszt jelleggel beépítettem a highcharts-ot, ami egy JavaScript alapú, interaktív grafikonok rajzolására használható kis függvénykönyvtár.

 

Created with Highstock 5.0.12DátumVízmélységHőmérsékletDurba-tó vízmélység és hőmérséklet adatokVízmélység (cm)VízhőmérsékletLéghőmérséklet22. Máj24. Máj26. Máj28. Máj30. Máj1. Jún3. Jún5. Jún7. Jún9. Jún11. Jún13. Jún15. Jún17. Jún19. Jún21. Jún23. Jún25. Jún27. Jún29. Jún1. Júl3. Júl5. Júl7. Júl9. Júl17017518018519019520020521021522022523010203040Highcharts.com


A fenti grafikonon ki-be kapcsolhatjuk a megjeleníteni kívánt adatsorokat, vagy ránagyíthatunk a grafikon bármelyik részére. A grafikonba kattintva pedig teljes képernyőssé tehetjük azt (ezt a Highslide API-nak köszönhetjük smiley).

Címkék:


2017. Június 26.

Város koordináta és térkép letöltés

írta: Xaint

Ma, a távirányító-vevő páros programozása közben arra gondoltam, milyen király lenne, ha a távirányítón a szimpla GPS hosszúsági és szélességi koordinátákon kívül a legközelebbi város neve is megjelenne.

Mivel SD kártya olvasó van a távirányítóban és a hajóban is, így az adatok tárolása megoldott. Már csak Magyarország városainak listájára volt szükségem, azok GPS koordinátáival együtt.

Miután olyan letölthető csv / txt fájlt, ami készen tartalmazná a szükséges információt, néhány perc keresgélés után sem találtam, arra gondoltam más utat választok. Ekkor találtam rá a latitudelongitude.org/hu nevű oldalra. Ez tartalmazza ugyan a városok neveit (nem mindet) és azok hosszúsági és szélességi fokait, ám ezt több oldalra tördelve.

Így gondoltam nem keresgélek tovább, hanem inkább összedobok egy kis alkalmazást C#-ben, ami bejárja az oldalt és lementi a szükséges információkat egy txt-be:
 


Persze amíg a programozással szöszöltem, az egész ötletet továbbgondoltam. Mi lenne, ha a kijelzőn az adott helység kis térképét is meg tudnánk nézni. Persze semmi "multiple zoom level" meg ilyesmi, ahhoz az Atmega644P már kevés lenne... (Bár annyit talán még bele lehetne erőszakolni a mikrovezérlőbe, hogy ha pl. egy adott településen, az adott tóról van közeli műholdképünk, akkor a hajó pozícióját a műholdképen is meg lehetne jeleníteni. Talán.. angel)

Mindenesetre statikus térképeket van lehetőségünk lekérni a Google-től, a Google Static Maps API használatával, ami egy alap felhasználónak 640x640 pixeles maximum képfelbontást és 25.000 térképletöltést engedélyez 24 óránként, ingyen. Nekünk egy 2"-os 160x128-as felbontású kijelzőnk van, és a latitudelongitude.org adatbázisa szerint pedig 276 városunk. Az előírt kvóta betartásával nem lenne gond...

Miután a latitudelongitude.org oldalról sikerült bekebelezni a szükséges adatokat, a térképrészletek letöltése sem volt annyira nehéz. laugh

A kis képek letöltését az alábbi kóddal oldottam meg:

foreach (ListViewItem i in listView1.Items)
	{
	string outFile = System.IO.Path.Combine("images/hybrid", i.SubItems[4].Text + "_hybrid" + ".png");
	System.IO.Directory.CreateDirectory("images/hybrid");

	// Download file
	var request = (HttpWebRequest)WebRequest.Create("https://maps.googleapis.com/maps/api/staticmap?center=Hungary," + i.SubItems[1].Text + "," + i.SubItems[0].Text + "&zoom=11&size=160x128&maptype=hybrid&key=YOURKEY");
	request.Proxy = null;
	request.UserAgent = @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36";
	using (var response = await request.GetResponseAsync())
	{
	    using (var reader = new BinaryReader(response.GetResponseStream()))
	    {
	        // Read file 
	        byte[] bytes = await reader.ReadAllBytes();

	        // Write to folder 
	        using (var fs = new FileStream(outFile, FileMode.Create))
	        {
	            await fs.WriteAsync(bytes, 0, bytes.Length);
	        }
	    }
	}
	this.Invoke(new Action(() => progressBar2.PerformStep()));
	}

 

A hibrid, vagyis a műholdképek letöltése mellett még az egyszerű térkép (roadmap) verziót is lekaptam, ha már ott jártam:


 

Update: Közben úgy tűnik, egy problémát mindenképpen orvosolnom kell majd a későbbiekben. A távirányítóban ugyanis a kijelző, az nrf24l01 rádió modul, és az SD kártya olvasó is SPI buszon keresztül kommunikál a mikrovezérlővel. Mivel eddig az SD kártyával nem nagyon foglalkoztam (leszámítva a bekapcsoláskor egy egyszerű írás/olvasás tesztet txt-be), így semmi problémát nem vettem észre. Ám, a kijelző inicializálása után, és a rádiómodul használata közben történő SD kártya műveletek kifagyasztják a mikrovezérlőt surprise. Valószínűleg a kijelzőhöz használt, agyonoptimalizált függvénykönyvtár lesz a ludas. Ennek sajnos még utána kell járjak. (Az eredeti terv, mármint az adott GPS koordinátához tartozó városnév megjelenítése persze megoldható, hisz a hajón is van SD kártya (ott működik is), és az onnan beolvasott városnevet egyszerűen átküldhetjük rádión a távirányítóra, amikor az szükséges.)



2017. Március 03.

Screen space reflections

írta: Xaint

Nemrég játszottam a Battlefield 1-el, és feltűnt, hogy a fejlesztők milyen jól használják a Frostbite motorban a screen space reflection effektet, és, hogy az milyen sokat dob a vizuális élményen. Annyira megtetszett, hogy gondoltam adok neki egy esélyt az én saját gyártású Sponza színteremen - azaz a szoba modellemen! laugh





De előbb jöjjön a Battlefield 1-ből néhány példa, hogy miről is beszélek:
 

        
 

         


Itt pedig egy a teszteléshez használt, sebtiben összedobott teszt színtér: cheeky
 

 

És íme az effekt a szoba modellemen, működés közben (a frissen felmosott padló effekt): broken heart
 

        
 

        

 

Természetesen, képtér alapú effektus lévén az algoritmusnak szüksége van arra, hogy a tükröződő objektum szerepeljen a képen ahhoz, hogy a tükröződést ki lehessen számítani (képtér alapú sugárkövetés). Ha egy adott objektum kikerül a képernyőről, annak tükröződését már nem tudjuk tovább valós időben megjeleníteni, ami miatt az eltűnő, majd az objektum újbóli megjelenése után megint előkerülő tükröződést sokan inkább idegesítőnek találják. Ám ha nem visszük túlzásba, igenis sokat dobhat a valósághű ábrázoláson, ami miatt a legtöbb nagy játékfejlesztő cég egyszerűen nem hagyhatja ki a legújabb játékaikból ezt az egyébként igen erőforrásigényes effektet.

Update (2017.07.20.): crying R.I.P. Chester Bennington.
 



2017. Január 21.

Alerion Engine Update

írta: Xaint

Hosszú idő után (~6 év smiley) belepiszkáltam kicsit a szakdogának szánt játékmotoromba. Először is javítottam jó néhány ismert bugot, közben felfedeztem kb. kétszer annyi újat.

Bekerült a motorba az animált karakterek támogatása, amit jelenleg az MD2 fájlformátum képvisel (Pl:  Quake 2,  Max Payne stb.), de tervezem az MD3 és MD5 modellformátum beépítését is.

A pályaformátumot illetően még mindig (a jól bejáratott) bináris térparticionáló fa adatstruktúra áll rendelkezésre. Az animált karakterek ütközhetnek a BSP fával, illetve egymással. A játék egyéb entitásaival (pl. töltények, rakéták vagy egyéb felvehető tárgyak) való ütköztetés még csak részben megoldott.
 


 

Szegény "ellenséges" karakterek még elég butuskák. Mindössze egy néhány perc alatt összetákolt, bedrótozott mesterséges intelligenciát kaptak, amiben az útkeresés abból áll, hogy szembe fordulnak velem és addig közelednek amíg egy bizonyos távolságon belülre nem érnek.

Legalább elmondhatjuk, hogy hűségesen követnek cheeky :

 

 

 

 



2013. Július 06.

CSGO SteamID Legit-proof

írta: Xaint

A Counter-Strike: Global Offensive nagyon népszerű kis lövölde lett (de már a béta idején is az volt).  Az ilyen felkapott játékoknál a csalók / csalások száma is igen magas. A Valve Anti Cheat sajnos elég butuska és könnyen kijátszható, aminek orvoslására természetesen több third-party megoldás is elérhető (EAC, ESEA, stb) illetve rengeteg közösségi adatbázis is folyamatosan épül és kvázi szabadon hozzáférhető, amelyeken egy adott Steam azonosítóról kaphatunk információkat, pl.: godmin.de.

A probléma csak az, hogy játék közben, legyen az akár sima match-making, vagy akár valamilyen verseny, eléggé nehéz 9 másik játékosnak utánanézni és közben a játékra is figyelni.

Arra gondoltam, ha már a VAC működésén nem változtathatok, sem a Valve üzletpolitikáján (ez utóbbit inkább hagyjuk broken heart), akkor összerakok egy olyan, a tisztességesen játszani szándékozó játékost támogató kis applikációt, ami a háttérben futva elvégzi ezt a kutatómunkát helyettünk.

A program alapesetben a tálcán, pontosabban mondva az értesítési területen csücsül, és várja, hogy a játékosok Steam azonosítója a vágólapra kerüljön. Ezt legegyszerűbben a játék konzoljába írt status paranccsal kérdezhetjük le.

 

 

A parancs által visszaadott szöveget ezután egyszerűen másoljuk a vágólapra.

A program ezután szépen kimazsolázza a számára szükséges SteamID-ket, majd a hozzákapcsolt szolgáltatásokon keresztül megkezdi a keresgélést. Utánanéz a delikvensnek magán a Steam-en, betölti a felhasználó profilképét (a könnyebb beazonosíthatóság érdekében), ellenőrzi a korábbi VAC kitiltásokat.

Emellett 4 különböző szolgáltatástól gyűjt be adatokat (új szolgáltatásokat könnyen hozzá lehet adni), ezek a következők:

  • SteamRep
  • Godmin
  • EAC
  • ESEA

Az adatok lekérdezésének végeztével  készít egy jelentést, HTML formátumban, amit (jelenleg) egy FTP szerverre továbbít, és a hozzá tartozó linket pedig beteszi a vágólapra. Így a többi játékossal könnyen meg lehet osztani, elég a chat ablakban Ctrl+V billentyűkombinációt nyomni, és máris bárki megnézheti a jelentést.

A programnak van egy másik érdekes funkciója is. Azon játékosok esetében, akik még nem állították be a Steam profiljukat, vagy egyszerűen csak privát profilt használnak, azoknál nem lehet látni a regisztráció dátumát sem. Ez pedig nem elhanyagolható adat. Az elv valami olyasmi, hogy ha egyszer semmit nem tudunk egy adott játékosról, mert semmit nem hajlandó megosztani másokkal, akkor legalább azt jó lenne tudni, hogy mikor regisztrálta az adott Steam accountot. Ez is több, mint a semmi. Ha például valaki feltűnően ügyesen játszik, de 3 napja regisztrált, már lehet gyanakodni.

A privát profil regisztrációjának dátumát a program nagyon egyszerűen úgy közelíti meg, hogy elindul a kérdéses steam kulcstól lefelé és felfelé is (párhuzamosan), olyan publikus steam profilokat keresve, ahol ismert a regisztráció napja. Így egy elég pontos becslést lehet kapni. A HTML jelentésben ezt a Join Date után egy zárójelbe tett E jelzi (estimated).

Egy HTML jelentés valahogy így néz ki (a képre kattintva az aktuális HTML fájl nyílik meg):

 

 

És ha ezeket az alapvető információkat mindenki megismeri már a játék elején, akkor ott csak az adott kis közösségen múlik, hogy azt hogyan kezeli.

Vélemény? Ötlet? smiley

 

Címkék: , , ,


2013. Június 19.

Asztrofotós modul Canon DSLR-hez

írta: Xaint

Ez egy Canon DSLR-ekhez készített asztrofotózást segítő kis modul. A Magic Lantern nyílt forráskódú API-ját használja, amiről ha eddig nem hallottál, pedig egy Canon EOS kamera boldog tulajdonosa vagy, akkor jobb ha gyorsan utánaolvasol, ugyanis elképesztően hasznos funkciókkal ruházza fel kedvenc kamerádat!

 



Két olyan funkciója is van, amivel segíthet az asztrofotózás megkezdésekor:

Az ötletet ebből a videóból kölcsönöztem, ahol egy laptopot és a BackyardEOS nevű programot használva oldják meg a fenti két feladatot. A Magic Lantern segítségével azonban mi magunk is írhatunk olyan programokat amelyek elérik (és kiegészítik) a kamera egyes funkcióit.

 

A pontos pólusra állítás folyamata (azimuth) képekben:


 

(A lépések balról-jobbra, fentről-lefelé)

 

Követve a képernyőn megjelenő utasításokat, a program a folyamat végén jelzi, hogy milyen korrekcióra van szükség (ha van).

A fenti példánál maradva, a negyedik képen láthatjuk, hogy a kalibrációhoz használt csillagunk a kiindulópontjához képest fentebb érkezett vissza, így korrekcióra van szükség.

Az tény, hogy a fenti videóban bemutatott, BackyardEOS-t használó módszer pontosabb lehet, hiszen ott a csillag képét hosszú záridővel égetjük a képre (amin így akár a szél okozta berázások is láthatóak), viszont az általam készített program nem használja a kamera zárszerkezetét.
 

A csillagokra való pontos fókuszálást segítő funkció pedig a gyakorlatban így néz ki:




(minél pontosabb a fókusz a csillagon a HFD érték annál kisebb, a Max pixel értéke pedig annál magasabb lesz)



A forráskódja megtalálható Bitbucket -en.



2010. Február 21.

Alerion Game Engine

írta: Xaint

Főiskolai szakdolgozatom játékmotor fejlesztése volt, C++ és OpenGL segítségével. A motor képességeinek bemutatására egy FPS stílusú játékot készítettem, melyhez időszűke miatt a modelleket és textúrákat a Quake 3-ból vettem kölcsön. A tesztpálya egyedi tervezésű, sajnos annak kivitelezésére sem jutott elég idő.

A motorról címszavakban:

  • BSP alapú pályaformátum
  • Nézetigúla-vágás
  • 3D hanghatások

Az alábbi videón sajnos látszik, hogy a programom összeakadt a videofelvevővel (fraps), különben a játék folyamatos. Később talán majd teszek fel egy jobb videót is. Ha elfelejteném, csak szóljatok rám! smiley

 

A játék letöltéséhez és kipróbálásához kattints: Ide.



2009. December 04.

Bouncing Ball

írta: Xaint

Programozási nyelvek II. -re készített beadandóm, egy labdával dekázós program, mely megjegyzi az aktuális rekordot. A rajzoláshoz OpenGL-t használ.

 

 

Ha ki szeretnéd próbálni, kattints: ide.

Címkék: , , ,


2009. Október 13.

TheCLa

írta: Xaint

TheCLa azaz The Call of Duty Launcher.

A CoD játékok szervereire segít csatlakozni ez a kis program, mely ha a vágólapon felismer egy IP-címet, automatikusan felugrik, megjeleníti a szerver adatait és egy kattintással csatlakozhatunk is.

A szervereket hozzáadhatjuk a kedvencekhez, így azok később bármikor elérhetőek. A szerverhez tartozó jelszót is megjegyzi.

 

 

A programot az alábbi linken tölthetitek le: Letöltés

Címkék: , ,


2009. Május 03.

Alerion Vision Project

írta: Xaint

Szakdolgozati témának eredetileg egy önvezető RC autót szerettem volna készíteni, mely a rászerelt 2db kamera képéből valós időben állítja elő a mélységtérképet, amelyen a közeledő akadályok már viszonylag könnyedén felismerhetőek. Mivel anyagi szempontból drága mulatság lett volna, így később egy másik téma után néztem (3d játékmotor).

Ami a projektből elkészült az a mélységtérképet valós időben előállító GLSL árnyaló volt: