Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL] System cząsteczkowy - triangle stripy obracają się

Ostatnio zmodyfikowano 2017-08-24 23:47
Autor Wiadomość
slowbro
Temat założony przez niniejszego użytkownika
[OpenGL] System cząsteczkowy - triangle stripy obracają się
» 2017-08-20 00:34:02
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)
{
glBegin(GL_TRIANGLE_STRIP);
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();
}
}
}

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
P-164113
pekfos
» 2017-08-20 13:39:49
cząstek była zawsze zwrócona w kierunku patrzącego nie zależnie jak są obracane cząstki wokół osi X, Y, Z?
Obracaj wokół tylko jednej osi..?
P-164125
slowbro
Temat założony przez niniejszego użytkownika
» 2017-08-22 23:25:13
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();
}
}
}
P-164214
slowbro
Temat założony przez niniejszego użytkownika
» 2017-08-24 19:12:02
Nikt? Nic?
P-164272
pekfos
» 2017-08-24 19:30:47
P-164274
slowbro
Temat założony przez niniejszego użytkownika
» 2017-08-24 22:00:25
Wrzucenie pierwszego lepszego linka to niestety żadna odpowiedź. Może jakieś konkrety co jest źle w kodzie?
P-164277
pekfos
» 2017-08-24 23:47:06
Wektory prawo i góra w macierzy modelview to odpowiednio indeksy (0, 4, 8) i (1, 5, 9), a ty zdaje się zrobiłeś (0, 1, 2) i (4, 5, 6). Nie nazwałbym tego kodu czytelnym..
P-164283
« 1 »
  Strona 1 z 1