Autor Wątek: [OpenGL] System cząsteczkowy - triangle stripy obracają się  (Przeczytany 720 razy)

Offline slowbro

  • Użytkownik

# Sierpień 15, 2017, 02:01:33
Cześć

Pracuje nad małym systemem cząsteczkowym, który generuje i porusza po ekranie cząstki. Cząstki uzyskuje nakładając teksturę na triangle_stripa. Wszystko jest ładnie dopóki nie zacznę obracać cząstek wokół osi X, Y, Z za pomocą glRotatef(g_fX, 1.0f, 1.0f, 1.0f); Triangle_stripy, na które jest zbindowana tekstura nie są cały czas skierowane płaszczyzną do patrzącego tylko obracają się, aż w skrajnym przypadku na chwilkę znikają po prostu po czym znowu się pojawiają:

       
        glRotatef(g_fX, 1.0f, 1.0f, 1.0f);
glEnable(GL_BLEND);                                                         
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glBindTexture(GL_TEXTURE_2D, texCircle);

Tx += dTx/3;
if(Tx < -2 || Tx > 2)
dTx = -dTx;

Ty += dTy/3;
if(Ty < -1 || Ty > 1)
dTy = -dTy;

glColor3f (1.0f, 0.0f, 0.0f);

for (x = -1; x <= 1; x += 0.25)
{
for (y = -1; y <= 1; y += 0.25)
{
for (z = -1; z <= 1; z += 0.25)
{
//glVertex3f(x,y,z);

glBegin(GL_TRIANGLE_STRIP); // rysujemy trojkat
glTexCoord2d(1,1); glVertex3f(x+0.5f,y+0.5f,z); // gorny prawy wierzcholek
glTexCoord2d(0,1); glVertex3f(x-0.5f,y+0.5f,z); // gorny lewy wierzcholek
glTexCoord2d(1,0); glVertex3f(x+0.5f,y-0.5f,z); // dolny prawy wierzcholek
glTexCoord2d(0,0); glVertex3f(x-0.5f,y-0.5f,z); // dolny prawy wierzcholek
glEnd();
}
}
}
//glEnd();

glEnable(GL_DEPTH_TEST); 
glDisable(GL_BLEND);   

Co mam zrobić, aby płaszczyzna triansgle-stripów - cząstek była zawsze zwrócona w kierunku patrzącego nie zależnie jak są obracane cząstki wokół osi X, Y, Z?

Pozdro
« Ostatnia zmiana: Sierpień 20, 2017, 01:26:56 wysłana przez slowbro »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline slowbro

  • Użytkownik

# Sierpień 16, 2017, 20:42:47
Próbuję wprowadzić mechanizm billboardingu do wyświetlania cząstek, aby były skierowane cały czas w stronę użytkownika. Jednakże w dalszym ciągu nie są one zwrócone cały czas w stronę obserwatora. Oto poniżej kod. Może jesteście wskazać co jest w nim źle:

for (x = -1; x <= 1; x += 0.25)
{
for (y = -1; y <= 1; y += 0.25)
{
for (z = -1; z <= 1; z += 0.25)
{

GLfloat vm[16];
glGetFloatv(GL_MODELVIEW_MATRIX, vm);

GLfloat xx = vm[0*4+0] * 0.5f, xy = vm[0*4+1] * 0.5f, xz = vm[0*4+2] * 0.5f;
GLfloat yx = vm[1*4+0] * 0.5f, yy = vm[1*4+1] * 0.5f, yz = vm[1*4+2] * 0.5f;

glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(1,1); glVertex3f( x + xx + yx, y + xy + yy, z + xz + yz );
glTexCoord2d(0,1); glVertex3f( x - xx + yx, y - xy + yy, z - xz + yz );
glTexCoord2d(1,0); glVertex3f( x + xx - yx, y + xy - yy, z + xz - yz );
glTexCoord2d(0,0); glVertex3f( x - xx - yx, y - xy - yy, z - xz - yz );

glEnd();
}
}
}
[code]
« Ostatnia zmiana: Sierpień 23, 2017, 00:24:02 wysłana przez slowbro »