Miten partikkelit kannattaisi piirtää niin, että ne näkyisivät aina suoraan kameraan päin? En usko, että kannattaa itse laskea kulmia kameran sijainnin avulla ja sitten käännellä kohti kameraa.
Partikkelilla on kaiketi sijainti ja yksi pyörimiskulma, siis se voi pyöriä ympäri partikkelista kameraan menevän suoran suhteen eikä muuten – muutenhan se ei näy aina suoraan kameralle päin. Voit siis varmaankin tehdä jotenkin näin (kunhan pikaisesti hutaisin):
glTranslate(-kamera.x, -kamera.y, -kamera.z); // on varmaan ennestään jo (ja pyöritys myös) // Joka partikkelille vektori akseli = kamera - partikkelin_paikka; glTranslate(-akseli.x, -akseli.y, -akseli.z); glRotate(partikkeli.pyoritys, akseli.x, akseli.y, akseli.z); // Ja piirrossa kelvannee z = 0
Tarkoitus oli kysyä, onko OpenGL:ssä jotain systeemiä, jonka avulla voisi piirtää avaruuteen partikkeleita niin, että ne kohdistuisivat aina kameraan päin. Eli jos piirtäisin näin:
//Joku OpenGL:n komento? glTranslatef(x, y, z); glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glEnd();
niin se kohdistuisi suoraan kameraan missä tahansa kamera sitten on.
lainaus:
Tarkoitus oli kysyä, onko OpenGL:ssä jotain systeemiä, jonka avulla voisi piirtää avaruuteen partikkeleita niin, että ne kohdistuisivat aina kameraan päin.
Sinulla on kolme mahdollisuutta:
1. Käytä teksturoituja pisteitä (eli ns. point spritejä). Tässä on kuitenkin se haitta, että pisteillä on tietty maksimikoko.
2. Lue modelview-matriisi ja käytä sen akseleita kasaaksesi partikkelien geometria niin, että ne osoittavat aina kohti kameraa.
3. Kumoa kameran kierto ennen partikkelien piirtämistä kertomalla modelview matriisi kameran matriisin käänteismatriisilla.
Muistaakseni billboarding on tollasen tekniikan nimi. Tossa on joku tutoriaalikin http://www.lighthouse3d.com/opengl/billboarding/
Aihe on jo aika vanha, joten et voi enää vastata siihen.