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

[OpenGL] Automatyczne tworzenie prymitywu

Ostatnio zmodyfikowano 2010-12-10 19:13
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[OpenGL] Automatyczne tworzenie prymitywu
» 2010-12-10 16:14:09
Standardowo w OGL trójkąt tworzy się tak jak poniżej:

C/C++
glBegin( GL_TRIANGLES );
glVertex3f( 0.0, 0.0, 0.0;
glVertex3f( - 1.0, 0.0, 0.0 );
glVertex3f( 1.0, 0.0, 0.0 );
glEnd();

Moje pytanie brzmi: czy można ten proces jakoś "zautymatyzować" tak aby dało się tworzyć  taki trójkąt przy użyciu pętli for? Jeżeli tak to czy mogę prosić o wytłumaczenie tego jak to zrobić, lub gdzie mógłbym o tym poczytać? Kawałek kodu bardzo ilustrujący to zagadnienie, mile widziany…
P-24998
szyx_yankez
» 2010-12-10 16:21:58
Możesz sobie to w funkcje opakować, dodać jakieś argumenty lub nie i masz automatyzacje.
Lub przy użyciu pętli for, możesz sobie tworzyć wiele trójkątów np. w celach testów wydajnościowych.
C/C++
for( int i = 0; i < 100; ++i )
{
    glBegin( GL_TRIANGLES );
    glVertex3f( i, 0.0, 0.0;
    glVertex3f( - 1.0, 0.0, 0.0 );
    glVertex3f( 1.0, 0.0, 0.0 );
}
glEnd();
P-25000
F90M
» 2010-12-10 16:32:55
A nie lepiej do 2D użyć
glVertex2f()
P-25002
Dragonit
» 2010-12-10 16:57:03
F90M a gdzie on piszę że chce trójkąt 2D?

A tak apropo 'szyx_yankez' czemu pętlisz 100 razy "glBegin( GL_TRIANGLES );" Wystarczy wrzucić ją przed pętle.

P-25006
VND
» 2010-12-10 17:09:35
Warto też zainteresować się GL_TRIANGLE_STRIP i GL_TRIANGLE_FAN
W pierwszym przypadku każdy kolejny punkt wyznacza nowy trójkąt (od czwartego w górę).
Zaletą jest brak rysowania przylegających boków trójkątów wielokrotnie. Nowy trójkąt tworzą dwa ostatnie punkty poprzedniego  i właśnie jeden nowy punkt itd. Idealne do rysowania terenu, obiektów itp.
W drugim przypadku wszystkie trójkąty mają wspólny pierwszy wierzchołek.
 
P-25008
Elaine
» 2010-12-10 17:13:31
F90M a gdzie on piszę że chce trójkąt 2D?
Trójkąt jest z definicji dwuwymiarowy...
P-25009
dmx81
» 2010-12-10 17:19:42
a jeszcze dla uściślenia pytania, które zadałeś, chcesz tworzyć trójkąt czy trójkąty ? bo to też znacząca różnica, zapytałes o zautomatyzowanie tworzenia trojkata a dostales odpowiedz, jak stworzyc trojkaty :) byc moze o to ci chodzilo, dlatego wiec pytam, czy odp ci pasuje. (bo np zautomatyzowanie rysowania jednego trojkata, to w petli for 3 razy narysowac linie :) )

oczywiscie w miejsce wspolrzednych podasz jakies tablice - bo tu wiadomo, otrzymasz serie stu trojkatow o zmieniajacym sie jednym wierzcholku, ale pewnie to widac :)

najlepiej zrobic sobie funkcje np
C/C++
void draw_triangles( const CPoint * a, const CPoint * b, const CPoint * c ) //klasa CPoint{double x,y,z,...}
{
    glBegin( GL_TRIANGLES );
    glVertex3f( a->x, a->y, a->z );
    glVertex3f( b->x, b->y, b->z );
    glVertex3f( c->x, c->y, c->z );
    glEnd();
}

//a pozniej

for( int i = 0; i < ile; i++ )
     draw_triangles( a, b, c );


mozna funkcje przeciazyc i zamiast wskaznikow na obiekt klasy podawac konkretne wspolrzedne, a pozniej w petli podac tablice z tymi wspolrzednymi...
oczywiscie mozna tez na wiele innych sposobow wyswietlac (tablice wierzcholkow, listy wiswietlania itd) ale wiadomo, dla bardziej skomplikowanego projektu... chociaz tez najlepiej sie uczyc uzywac bardziej zaawansowanych technik na prostych przykladach, aby latwiej przyswoic

mozna uzyc tez paskow trojkatow lub wachlarza trojkatow - trzeba poczytac, czy takie rozwiazanie pasuje

ps-> pisalem z glowy i w pospiechu, wiec mam nadzieje, ze nie walnalem gdzies jakiejs gafy, ewentualnie czegos nie doczytalem,
a po drugie - to sam jestem wlasnie w trakcie nauki wiec dla mnie sa to swieze problemy:)


ps2-> ups, w miedzy czasie dopisano pare postow, wiec nie wiem, czy moj nadal aktualny;) - trojkat jest 2d zgadza sie - ale mozna go umiescic w przestrzeni 3d (po to jest mozliwosc rysowania glvertex3f ;) bo trojkaty nie koniecznie musza "lezec" na tej samej plaszczyznie)
P-25010
wojownik266
Temat założony przez niniejszego użytkownika
» 2010-12-10 19:13:08
Podobno dobry przykład znaczy więcej niż 1000 słów. Bardzo dziękuję za odpowiedzi oraz zamieszczone programiki. Miłego wieczoru...
P-25017
« 1 »
  Strona 1 z 1