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 |
|
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..? |
|
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(); } } }
|
|
slowbro Temat założony przez niniejszego użytkownika |
» 2017-08-24 19:12:02 Nikt? Nic? |
|
pekfos |
» 2017-08-24 19:30:47 |
|
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? |
|
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.. |
|
« 1 » |