Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[RACANI] 2. laboratorijska vježba - 2021/2022

theimprobableone

Ima li itko da bi se htio mijenjati za termin labosa? Trenutno imam u ponedjeljak u 11 online, odgovaralo bi mi od srijede nadalje.


Vrba

jel netko ovo radio ili planira radit u pythonu?


renren

Charm Mislim da je najlakše implementirat “Promjene boje i veličine čestice” iz podpoglavlja 2.4. Znači imaš neki emiter koji generira nove čestice, tj male poligone/krugove (kojim daš neku vrijednost života) i zatim svaku pomjera u određeni smjer, mijenja im boju i umanjuje vrijednost života. Nakon svakog micanja za svaku česticu provjeriš je li vrijednost života ispod nekog praga i ako jest brišeš je iz liste. I valjda je to dovoljno, nemam pojma, na temi od prošle godine su se isto pitali.

Vrba Jesam ja.

Usput, zna li tko kako učitati teksturu u pythonu? Probala sam na par načina, ali ili nemaju nikakvog efekta ili mi obrišu sve sa zaslona.


Carmichael

jel netko ima ideju kako ovo rijesit?


JoKing

renren Meni radi ovako kako je objašnjeno na ovom linku: https://codeloop.org/python-modern-opengl-texturing-rectangle/ (u kodu je to između 110 i 122 linije)


sheriffHorsey

Jel ima itko ikakve korisne materijale za ovo? Nisam nista uspio napravit s pripremom


ygerg11

Je li netko već odgovarao? Šta pitaju?


theimprobableone

ygerg11 Ja sam imao online, pitala me asistentica da prođem po kodu i objasnim sve dijelove programa. Zatim sto sam implementirao od dodatnih mogucnosti sustava cestica i na kraju jos nesto sitno za tehniku oglasne ploce. Trajalo je cca 5 min.


login

theimprobableone Mogu potvrditi sve od kolege. Treba pokazat da program radi, objasnit kaj se tocno napravilo, malo po kodu di je kaj i isto pitanje za billboard, nis specijalno


plakytugy

Da li itko zna je li obavezno raditi ovu vježbu ako već imamo prag iz labosa?


theimprobableone

plakytugy Ako se ne varam prag je 50% iz svakog labosa. Nek me netko ispravi ako grijesim


sheriffHorsey

Posto sam se i s ovom vjezbom solidno izjebao da mi proradi odlucio sam napisat neke upute u nadi da ce nekom pomoc. Ukratko cu pojasnit kak sam napravio dio 2.3 i iz dijela 2.4 dio s bojom i velicinom cestice.

Kod sam si organizirao u 2 klase i pomocne funkcije.
Prva klasa je Particle klasa. U njoj imate sve sto vam treba za pojedinu tocku: poziciju, brzinu, starost, velicinu cestice, boju i duzinu zivota:

pozicija = [0.0, -10.0, 0.0]
brzina = [0.0, 0.0, 0.0]
starost = 0
velicina = VELICINA  # ovo sam definirao kao neku konstantu koju sam kasnije stimao
boja = [0.0, 0.0, 0.0, 0.0] # prva 3 broja su rgb vrijednosti od 0 do 1, zadnji alpha 
duzina_zivota = max(1, N(100, 40)) # N oznacava normalnu razdiobu

Funkcije koje su mi trebale su bile: funkcija za povecanje starosti, funkcija za promjenu parametara pojedine cestice i funkcija za promjenu boje. U povecanju starosti se samo inkrementira brojac a preostale dvije glase ovako nekako:

promijeni_parametre():
  vektor_pomaka = [N(0, 12), 6, 0]
  normaliziraj vektor_pomaka

  t = (duzina zivota - starost) / duzina_zivota # na ovaj nacin parametar t je izmedu 0 i 1
  brzina = vektor_pomaka * KONSTANTA_BRZINE * t**(-0.5) # funkcija t**(-0.5) se moze mijenjat
  pozicija = pozicija + brzina
  velicina = t * velicina**2
  promijeni_boju(t)

promijeni_boju(t):
  boja[0] = f_za_crvenu(t)
  boja[1] = f_za_zelenu(t)
  boja[2] = f_za_plavu(t)
  boja[3] = f_za_alpha(t)

Funkcije za boje i alpha sam redom definirao ovako:
za crvenu: f(x) = x
za zelenu: f(x) = -\big(\frac{1}{x-2}\big)^7
za plavu: \: \: f(x) = (1-x)^2
za alfu: \: \: \: \: f(x) = -(x + 0.5)^{-15} + 1.2

Druga klasa mi je bila Source klasa koja sadrzava samo listu cestica i 3 funkcije: funkciju koja stvara cestice i stavlja ih u listu, funkciju koja svim cesticama inkrementira starost i funkciju koja svim cesticama mijenja parametre i izbacuje cesticama kojima je starost dosegla duzinu zivota.

Konacno, main dio programa se svodi na sljedece:

napravi prozor i postavi pogled
procitaj teksturu
napravi Source

vrti zauvijek:
  napravi proizvoljan broj novih cestica
  promijeni parametre i boju svih cestica
  iscrtaj cestice
  povecaj starost cesticama

  pricekaj par ms

Preskocio sam funkciju za teksturu:

w, h = 256, 256
image = ucitaj sliku teksture kao intove
texture = glGenTextures(1)
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, w, h, GL_RGB, GL_UNSIGNED_BYTE, image)    
glBlendFunc(GL_SRC_ALPHA,GL_ONE)
glEnable(GL_BLEND)
glEnable(GL_TEXTURE_2D)

Funkcija za crtanje mi je bila slicna kao i funkcija za crtanje tijela u 1. labosu. Jedna napomena kod te funkcije je da treba primijenit teksturu na sljedeci nacin:

# ako imamo cesticu p i donji lijevi kut
glTexCoord2d(0, 0)
glVertex3f(p.pozicija + [-p.velicina, -p.velicina, 0])

# ako imamo cesticu p i donji desni kut
glTexCoord2d(1, 0)
glVertex3f(p.pozicija + [ p.velicina, -p.velicina, 0])

itd. za preostala dva kuta i tu istu cesticu. Ako ste sve napravili kao ja trebali biste dobiti simulaciju vatre.

Imao sam danas u 4, a asistent mi je bio nuic. Prvo sam pokrenuo kod i ukratko objasnio koji dio koda radi sto. Pitao me da promijenim boju cestica u zelenu, sto bi sve morao dodati ako zelim imati iz rotirajuce stapove koji na svojim rubovima imaju te cestice, a izvor se jos dodatno pomice i zasto mi cestice trzaju lijevo ili desno kako stare.