Demokoodaus Linuxilla, tapaus Eternity

Samankaltaiset tiedostot
JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

4. Lausekielinen ohjelmointi 4.1

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointiharjoituksia Arduino-ympäristössä

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus 3 -- Ratkaisut

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet, kurssikoe

Java-kielen perusteita

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Loppukurssin järjestelyt C:n edistyneet piirteet

TAMPEREEN TEKNILLINEN YLIOPISTO

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Tietotyypit ja operaattorit

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Rajapinta (interface)

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Kon Konepajojen tuotannonohjaus: ILOG CPLEX Studion käyttö

JUnit ja EasyMock (TilaustenKäsittely)

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Zeon PDF Driver Trial

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

4. Lausekielinen ohjelmointi 4.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Luento 5. Timo Savola. 28. huhtikuuta 2006

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Ohjelmoinnin perusteet Y Python

LP-levyn digitointi Audacity-ohjelmalla

ELOKUVATYÖKALUN KÄYTTÖ ANIMAATION LEIKKAAMISESSA. Kun aloitetaan uusi projekti, on se ensimmäisenä syytä tallentaa.

Java ja grafiikka. Ville Sundberg

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmoinnin perusteet Y Python

5 Näppäimistö. 5.1 Näppäimistön eventit

12. Näppäimistöltä lukeminen 12.1

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Poikkeustenkäsittely

ITKP102 Ohjelmointi 1 (6 op)

4. Luokan testaus ja käyttö olion kautta 4.1

ASM-kaavio: reset. b c d e f g. 00 abcdef. naytto1. clk. 01 bc. reset. 10 a2. abdeg. 11 a3. abcdg

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Olio-ohjelmointi Javalla

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. 15. Lohkot. Lohkot. Lohkot

Pörisevä tietokone. morsetusta äänikortilla ja mikrofonilla

Flash ActionScript osa 4

5. HelloWorld-ohjelma 5.1

Muita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager

Ohjelmointi 2 / 2010 Välikoe / 26.3

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Periytyminen (inheritance)

Tietotekniikan valintakoe

ASCII-taidetta. Intro: Python

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla (Opettajan ohje)

Olioiden yhteistyön mallintaminen

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Monipuolinen esimerkki

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

Luokan sisällä on lista

Loppukurssin järjestelyt

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Ohjelmointi 1. Kumppanit

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Kieliteknologian ATK-ympäristö Kuudes luento

Ohjelmoinnin peruskurssi Y1

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Ohjelmoinnin peruskurssi Y1

Ensikosketus ohjelmointiin

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

T Tietokonegrafiikan perusteet. OpenGL-ohjelmointi

ITKP102 Ohjelmointi 1 (6 op)

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

public static void main (String [] args)

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

OpenJUMP ja OpenStreetMap-reititys

TAMPEREEN TEKNILLINEN YLIOPISTO

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

P e d a c o d e ohjelmointikoulutus verkossa

5. HelloWorld-ohjelma 5.1

Ohjelmoinnin perusteet Y Python

17. Javan omat luokat 17.1

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Luokka näytön käyttäminen opetuksessa.

Transkriptio:

Demokoodaus Linuxilla, tapaus Eternity Tuomo Sipola tuomo.sipola@iki.fi Linkin lanit 9.4.2010 Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 1 / 17

Sisältö 1 Johdanto 2 Kääntäminen 3 Koodista 4 Yhteenveto Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 2 / 17

Mikä Eternity? Linux-demo Tavoitteena pieni koko Linkin Lanit II 19. 21.10.2007 Koodattu viikonlopun aikana laneilla Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 3 / 17

Kuvia Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 4 / 17

Kuvia Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 4 / 17

Kuvia Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 4 / 17

Mistä demo koostuu Alusta: Ohjelmointikieli: Graikka: Musiikki: Säveltäminen: Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 5 / 17

Mistä demo koostuu Alusta: Linux Ohjelmointikieli: Graikka: Musiikki: Säveltäminen: Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 5 / 17

Mistä demo koostuu Alusta: Linux Ohjelmointikieli: C Graikka: Musiikki: Säveltäminen: Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 5 / 17

Mistä demo koostuu Alusta: Linux Ohjelmointikieli: C Graikka: SDL & OpenGL Musiikki: Säveltäminen: Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 5 / 17

Mistä demo koostuu Alusta: Linux Ohjelmointikieli: C Graikka: SDL & OpenGL Musiikki: SDL & wav-tiedosto Säveltäminen: Seq24, ZynAddSubFX, Specimen, Jack Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 5 / 17

Kääntäminen gcc $(CFLAGS) tiedosto.c Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 6 / 17

Kääntäminen CFLAGS = -ffast-math -fomit-frame-pointer -fshort-double -fno-inline -fno-strict-aliasing -fpeephole2 -fexpensive-optimizations -Os gcc $(CFLAGS) tiedosto.c Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 6 / 17

Linkitys ld $(LDFLAGS) tiedosto.o $(LDLIBS) -o eternity Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 7 / 17

Linkitys LDFLAGS = -dynamic-linker /lib/ld-linux.so.2 LDLIBS = /usr/lib/libsdl.so /usr/lib/libgl.so /usr/lib/libsdl_mixer.so ld $(LDFLAGS) tiedosto.o $(LDLIBS) -o eternity Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 7 / 17

Kutistaminen Poistetaan turhat otsakkeet strip -s -R.comment -R.gnu.version eternity sstrip eternity Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 8 / 17

Kutistaminen Poistetaan turhat otsakkeet strip -s -R.comment -R.gnu.version eternity sstrip eternity Pakataan ohjelma ja laitetaan purkukäsky ohjelman alkuun gzip best -n -f eternity cat unpack.header eternity.gz > eternity Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 8 / 17

Yksinkertaistettu pääohjelma Alustetaan graikka, äänet ja demoon liittyvät asiat Laitetaan kello kuntoon Toistetaan graikanlaskentaa, kunnes nappia painetaan tai on kulunut tarpeeksi kauan aikaa Siivotaan jäljet Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 9 / 17

Yksinkertaistettu pääohjelma Alustetaan graikka, äänet ja demoon liittyvät asiat Laitetaan kello kuntoon Toistetaan graikanlaskentaa, kunnes nappia painetaan tai on kulunut tarpeeksi kauan aikaa Siivotaan jäljet _start ja mystinen assembly-koodi säästävät tilaa Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 9 / 17

int gfx(int t) Saa ajan pääohjelmasta parametrina Sekvensseri, joka käskee efektien piirtää ajallaan Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 10 / 17

int gfx(int t) Saa ajan pääohjelmasta parametrina Sekvensseri, joka käskee efektien piirtää ajallaan if (0 <= t && t < BEGIN_FLASH) { intro(t); } if (BEGIN_FLASH <= t && t < BEGIN_ZAP) { flash(); } Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 10 / 17

int gfx(int t) Joka kerta suoritetaan seuraava glclearcolor(0, 0, 0, 1); glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); // kutsu efektien piirto tässä välissä SDL_GL_SwapBuffers(); Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 11 / 17

Efektin runko Kutsuttava efekti koostuu piirtämisestä ja pyörittelystä glbegin(gl_line_strip); glvertex3f(zaps[i][j][0], zaps[i][j][1], zaps[i][j][2]); glend(); Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 12 / 17

Efektin runko Kutsuttava efekti koostuu piirtämisestä ja pyörittelystä glbegin(gl_line_strip); glvertex3f(zaps[i][j][0], zaps[i][j][1], zaps[i][j][2]); glend(); glmatrixmode(gl_modelview); glloadidentity(); glrotatef((t/30)%360, 0.2, 0.2, 0.1); Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 12 / 17

Efektin data Tieto viivoista generoidaan alussa ja tallennetaan taulukkoon static float zaps[zap_lines][zap_continue][3]; Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 13 / 17

Efektin data Tieto viivoista generoidaan alussa ja tallennetaan taulukkoon Pisteellä tietenkin kolme ulottuvuutta static float zaps[zap_lines][zap_continue][3]; Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 13 / 17

Efektin data Tieto viivoista generoidaan alussa ja tallennetaan taulukkoon Pisteellä tietenkin kolme ulottuvuutta Montako viivaa lähtee keskeltä static float zaps[zap_lines][zap_continue][3]; Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 13 / 17

Efektin data Tieto viivoista generoidaan alussa ja tallennetaan taulukkoon Pisteellä tietenkin kolme ulottuvuutta Montako viivaa lähtee keskeltä Kuinka monesta osasta viiva koostuu static float zaps[zap_lines][zap_continue][3]; Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 13 / 17

Efekteistä Tuosta datasta piirretään OpenGL-käskyillä viivat Ajastettua pyörittelyn muutosta Sama data myös toisessa efektissä, viivojen sijaan kolmioita! Myös tähtitaivasefekti Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 14 / 17

Yhteenveto Pieneen tilaan on mahdollista koodata Linuxilla Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 15 / 17

Yhteenveto Pieneen tilaan on mahdollista koodata Linuxilla Ei se niin vaikeaa ollut Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 15 / 17

Yhteenveto Pieneen tilaan on mahdollista koodata Linuxilla Ei se niin vaikeaa ollut Hauska koodata välillä likaisesti Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 15 / 17

Yhteenveto Pieneen tilaan on mahdollista koodata Linuxilla Ei se niin vaikeaa ollut Hauska koodata välillä likaisesti Tulevaisuudessa äänisynteesi, assembly? Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 15 / 17

Kiitos! Lähdekoodi löytyy osoitteesta http://www.iki.fi/tuomo.sipola/demoscene/eternity/ Kiitokset: Markku "marq" Reunanen Linux-taika Tommi "Teistiz" Teistelä OpenGL Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 16 / 17

Bonus Miten Gnomessa saa otettua kuvakaappauksia OpenGL-ohjelmasta? while sleep 15; do gnome-screenshot -w -B -e shadow -d 5; done Tuomo Sipola tuomo.sipola@iki.fi () Demokoodaus Linuxilla, tapaus Eternity Linkin lanit 9.4.2010 17 / 17