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

Open GL wiele elementów

Ostatnio zmodyfikowano 2011-04-19 07:06
Autor Wiadomość
yoogi
Temat założony przez niniejszego użytkownika
» 2011-04-17 23:16:47
To teraz Open GL'a się już prawie nie używa ?
P-31063
DejaVu
» 2011-04-17 23:17:41
Mnie normalnie SFML zafascynował swoją prostotą i możliwościami... ;p OpenGL... bleee ;D
P-31064
yoogi
Temat założony przez niniejszego użytkownika
» 2011-04-17 23:22:19
SFML działa na zasadzie Open GL'a lub DX'a ? czy po prostu wszystko pisali od nowa ?
P-31066
McAffey
» 2011-04-17 23:23:38
To teraz Open GL'a się już prawie nie używa ?
Na razie nie zajmuję się grafiką 3D prawie w ogóle, więc nie odpowiem Ci na to pytanie, jednak wydaje mi się, że po prostu ogólnie (stosunkowo) mało osób na tym forum zajmuje się grafiką 3d (i różnymi bibliotekami z tym związanymi). Przynajmniej o ile tematy związane z grafiką 2d są bardzo często, to z 3d są dość rzadko.
P-31067
DejaVu
» 2011-04-17 23:26:36
A jaaaaa powiem tak: projekty 3D nie są realizowane przez amatorów. Oni są zdolni tworzyć kod samodzielnie na podstawie tutoriali i książek + własnego doświadczenia :) Jeżeli zadają pytanie to w stylu "za pomocą czego uzyskać można efekt X" - a implementację potrafią sami 'wygenerować' (na podstawie oczywiście 1 wyrazu zawierającego nazwę funkcji/metody/nazwy typedefa) ;p
P-31068
McAffey
» 2011-04-17 23:36:17
@up Taa, coś w tym jest, jednak na forum chyba dużo takich nie mamy, a przynajmniej jeszcze żaden profesjonalista się nie wyłonił do rozwiązania problemu z tego tematu.
P-31070
dmx81
» 2011-04-17 23:42:11
jak bede mial chwilke wolnego czasu to z checia napisze cos ciekawego :)

"te" sprawy raczej nie sa skomplikowane :)


glLoadIdentity(); // "zeruje" wszytskie poprzednie przeksztalcenia
glPushMatrix(); // wrzuc macierz na stos
glTranslatef(0,0,-2); //przesun po osi z (widocznosc w zaleznosci od rzutowania jest przewaznie < 0, wiec trzeba przesunac wglab ekranu dany obiekt, aby byl widoczny
rysuj(); // tutaj swoj obiekt np glColor3f(...),glBegin(GL_QUADS);glVertex3f(0.0,0.0,0.5); itd...
glPopMatrix();//wracasz to poprzedniego stanu na stosie
glPushMatrix();//to juz znasz
glTranslatef(-0.5,0,-0.4);//to tez
glRotatef(katy,0,1,0); //obroc scene o dany kat wg danej osi - to bedzie obracany wg osi y
rysuj();
glPopMatrix();
katy++;
po pierwsze trzeba znac operacje przeksztalcen, po drugie mniej wiecej orientowac sie, jak tego uzywac. ja juz raz komus o tym pisalem, ale napisze jeszcze raz, jak to latwo sobie przyswoic:

wyobraz sobie, ze stoisz na srodku pokoju - to jest twoje miejsce 0,0,0
wyobraz sobie, ze trzymasz pudlo z kartonu, zwrocone jedna ze scian na wprost ciebie
teraz

glTranslatef(0,0,-2)
znaczy tyle, co zrob 2 kroki do przodu (bo w openGL w glab ekranu leci os -Z)
teraz

rysuj();
czyli postaw swoj karton tak, jak go trzymasz (przodem do ciebie)
glTranslatef(0,0,2)
zrob 2 kroki w tyl
jestes w punkcie wyjscia, twoj karton znajduje sie przed toba w odl 2 kroki.
zamiast cofania sie 2 krokow, moznabylo uzyc techniki z odlozeniem macierzy na stos przez
glPushMatrix();
 przed krokiami w przod, a powrot do punktu wyjscia zalatwiloby
glPopMatrix();
ok, mamy pierwwszy obiekt, czas na drugi, obracajacy sie w tym czasie, stoisz w punkcie 0,0,0
teraz uzyjemy
glPushMatrix();
aby zapamietac ten stan,
glTranslatef(0,3,-2)
teraz jestesmy 2 kroki w przod i jakby 3 stopnie w gore (jestesmy nad poprzednim obiektem)
teraz dajemy
glRotatef(katy,0,1,0);
rysuj();
glPopMatrix();
co oznacza, ze stajac w punkcie 0,3,-2 obracamy sie o jakis kat, po czym kladziemy nasze pudlo kartonowe przodem do nas, a ze my jestesmy obroceni w stosunku do punktu wyjscia, to pudlo bedzie przekrecone o ten kat (inaczej:
jest nasz dwoch, ty zostajesz w punkcie wyjscia, ja ide 2 kroki do przodu, 3 stopnie do gory, obracam sie 30stopni w lewo, klade karton, dla mnie o jest na wprost, dla ciebie jest od oddalony, w dodatku przekrecony)
aby dobrze wszytsko dzialalo, teraz musimy wrocic do puntku wyjscia, poprzez
glPopMatrix();
(glPopMatrix zalatwia nam cala droge powrota do ostatniego punktu, w ktorym dalismy glPushMatrix(), inaczej bysmy musieli robic kroki w tyl, do tego przedtem odwrocic sie o kat do pozycji przed naszym obrotem).
A wiec stoimy w punkcie 0,0,0. widzimy 2 obiekty,jeden pod drugim, poki co sie nie obraca ten gorny, bo nie zmienia sie kat,wiec dodajemy:

katy++;
co zapewni nam zmiane kata co obiek petli
jesli chcesz, aby ktorys z obiektow sie poruszal, wstaw jakies zmienne,np

posxObj1+=0.05;
glTranslatef(posxObject1,posyObj1,poszObj1);
rysuj();
dzieki czemu obiekt bedzie sie przesuwal w prawo (jesli nie dasz jakiegos ograniczenia, to w koncu zniknie z pola widzenia,
mozesz tez zamiast zmieniania co przejscie petli, uzaleznic wartosci posx,posy,posz od klawiatury.
Kody pisalem z glowy, wiec moga zdarzyc sie literowki, chodzilo mi o ogolny zarys, mam nadzieje, ze choc troszke przyblizylem, ale w razie czego sluze pomoca, tudziez kodem "zywcem wyjetym" z jakiegos z moich projektow, gdzie roi sie od ruchomych obiektow ;)

PS>> widze, ze od czasu jak zaczalem pisac, do czasu, jak wyslalem doszlo "8 nieprzeczytanych wiadomosci w tym temacie" - to wszystko przez to, ze w miedzy czasie wypisywalem kartki swiateczne z zona i podrzucala mi wycinane kurczaczki i je kleilem do kartek ;)

jesli chodzi o dyskusje o opengl, ja jakos ostatni sie wlasnie za niego wzialem, i sam nie wiem, jak okreslic moje umiejetnosci, na pewno poczatkujacy - ale taki temat jak poruszanie sie po scenie to raczej nic skomplikowanego dla mnie (teraz probuje osiagnac efekt rozmycia w ruchu itd, wieloteksturowanie, doksztalcam teorie pisania shaderow, wiec mam nadzieje za nieglugo cos zaczac pisac)
jak tylko czas pozwoli, wrzuce jakas scenke napisana przeze mnie, zeby sie pochwalic co juz udalo mi sie idac droga kursu opanowac
P-31071
yoogi
Temat założony przez niniejszego użytkownika
» 2011-04-18 00:01:26
Przeczytanie tego trochę mi to zajęło :) mniej więcej potrafię sobie to wyobrazić, tylko pisałem że chciałbym najlepiej kod, jak sobie napisałem kod to oba elementy się obracały lub zmieniały swoją pozycję. Ale dzięki za pomoc :]

#edit

Dzięki działa :)
P-31075
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona