Skocz do zawartości

[OpenGL] Jak rysować punkty i linie


Force

Polecane posty

Pytanie super hipotetyczne, zawiera moje przemyślenia i może macie jakieś własne. No ale do pytania:

Załóżmy, że chcemy rysować punkty w openglu i chcemy dać elastyczność w naszym silniku, więc dla każdego punktu mam: 3 współrzędne, kolor, wielkość oraz czy zaokrąglamy rogi. I mamy też odcinki, każdy ma dwie współrzędne rogów, grubość,kolory oraz opcjonalnie styl (glLineStipple). I problem jest taki,: załóżmy, że user średnio co klatkę rysuje 20-30 punktów i np. 20-30 linii i co powinien engine udostępniać, jakie metody. No bo np możemy dać po prostu DrawLine(bla bla) i w nim glBegine(linie)..glEnd; ale przecież to nie wydajne jest, bo przecież lepiej rysować linie/punkty w pakiecie, aby jak najmniej robić glBegin lub jakieś glEnable. To tak sobie myślę: czy np. mieć jakieś pomocnicze klasy,które mają w sobie zapisane punkty i globalne info o wielkość, i czy smooth, tak samo dla linii, i każę tej klasie narysować wszystko co ma. problem jest taki, że co klatkę trzeba by czyścić ją. Można też miec w enginie metodą StartDrawPoints(wielkość,zaokrąglenie) i potem FinishDrawPoints(); i potem metody w środku AddPoint(pkt1,pkt2,kolory), tu jest jednak problem, że użytkownik takie bloki wywołań może mieszać. Identyczne dla linii/ No i właśnie co wy o tym myślicie, może macie jakieś własne rozwiązania?

I drugie pytanie: co jest szybsze: sprawdzić czy opcja A jest włączona, jak nie to zrobić glEnable(A), czy zawsze robić glEnable(A)? Oczywiście zakładamy, że nie ma tak, że za każdym razem zmiana jest konieczna, dlatego nie patrzmy na jednego takiego if-a, ale np. na 100 wywołań takiego kawałku kodu i tylko 10% zmian jest koniecznych.

Są to pytania dla mnie teoretyczne bo nic nie planuje na najbliższe pół roku, ale chce mieć jakąś wiedzę na przyszłość do przemyśleń :)

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Przegladnij kod BEngine :)

Generalnie chodzi o to ze dopuki nie zmienia sie tekstura/ustawienia to zapisujesz wszystko w pomocniczym buforze, gdy cos ulegnie zmianie wtedy rysujesz to co jest w buforze.

Wszystko jeszcze zalezy co chcesz zrobic jesli potrzebujesz czegos prostego to nawet nie oplaca sie tym bawic.

Link do komentarza
Udostępnij na innych stronach

Stąd drugie pytanie - czy lepiej zawsze używać glEnable/glDisable przy każdym punkcie czy lepiej najpierw sprawdzić czy już takiej flagi nie mam ustawionej, i czy lepiej zapisywać to we własnej zmiennej czy w jakiejś własnej zmiennej i ją sprawdzać. BEngine nie mam pod ręką, bo jestem na uczelni.

Tu wiele osób pisze w opengl-u więc zakładam, że już są jakieś gotowe pomysły

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Generalnie mi jak się śpieszy a oceniam, że nie będzie dużo geometrii to sobie zostawiam gdzie mogę zwykłe glBegin() przy prostych rzeczach jak linie etc. bo wiem, że tego będzie mało a karty teraz i tak w pi...eczke mocne są :P Może mało to ambitne ale albo czas albo ambicje hehe

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Jak przeglądnąłem bengine to ono sie nie nadaje do super wymagających rzeczy, bo ono przy każdej linii robi begin i end, a mi chodzi o optymalizację, że przecież takie same linie, mozna w jednym glbegin glend robić co przyśpiesza przecież, tak samo jak powinno się rysować obrazki pod rząd gdy mają te same tekstury. Ja tak tylko rozmyślam, bo u mnie 30% programowania to myślenie,20% relaksowanie się, 10% testowanie, a 40% kodzenie, czyli 50% czasu spędzam nie używając klawiatury :D

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

takie jak w temacie, a nie wiem jak w dx-ie masz, wiem, że te same operacje należy wykonywać obok siebie.

Ok, chyba sie pomyliłem, trochę kodu tego nie rozumiem, ale wydaje mi się, że BEngine nie obejmuje tego co mam na myśli-bo u Ciebie linie zawsze mają szerokość 1 i nie moga mieć np. stylu przerywanego, a mi właśnie o to chodzi, bo jak zmienia sie grubość czy styl to sie wychodzi z glbegina i znowu wchodzi to jak to to forumowicza mają zaimplementowane aby jak najmniej razy to robić

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...