2012-05-22 12 views
27

Jeśli chodzi o grę w webgl, gdzie wydajność fps jest ważna, jaki jest najskuteczniejszy sposób tworzenia HUD 2D? Mogę wymyślić 3 opcje, ale nie jest dla mnie jasne, jaki jest koszt wydajności każdego z nich i który jest zalecany jako najbardziej wydajny.zalecany sposób tworzenia HUDa 2d w webgl

Więc co jest względny koszt wydajność między 3 następujących opcji:

A: renderowanie HUD z wielokątów w 3D z wykorzystaniem ortogonalnego aparat i zmiksować na oryginalne sceny. Zaleta to zaawansowane efekty opengl są możliwe, kosztem ręcznego ustawiania pojemników.

B: skompiluj HUD w html/css i pozwól przeglądarce na komponowanie. Czy ten przypadek jest perfekcyjnym hitem z kompozycją przeglądarki?

C: narysuj na płótnie 2D na płótnie 3D i pozwól przeglądarce na komponowanie. Czy to jest nawet możliwe i czy mam problemy z propagacją zdarzeń między płótnami, takimi jak zdarzenia myszy i fokus.

Wielkie dzięki!

Odpowiedz

39

Wariant A jest prawdopodobnie technicznie najszybsze, ale przyniesie ze sobą całe mnóstwo innych problemów, które trzeba będzie obsługiwać ręcznie. Jeśli aktualizujesz tekst (zdrowie, amunicja, itp.), Musisz wymyślić procedurę rutowania tekstu, a to nie jest wcale banalne. Jeśli korzystasz z interfejsu za pomocą myszy lub klawiatury, musisz sam sobie z tym poradzić, a szanse na to, że robisz to wystarczająco wydajnie i wydajnie, aby zapewnić lepsze wrażenia niż natywne widżety przeglądarki, są niewielkie. Warto zauważyć, że dużo pracy wymaga odrobinę większej szybkości.

Opcja B jest, moim zdaniem, drogą do zrobienia. Przeglądarka jest całkiem dobra w komponowaniu i mimo, że z tego powodu będzie perfekcyjnie trafiony, chyba że robisz naprawdę szalony szczegółowy HUD, przypuszczam, że trafienie będzie znikome w porównaniu do innych części twojej aplikacji (jak logika JS). Dodatkowo jest to droga, która powinna "magicznie" polepszyć się wraz z upływem czasu, a przeglądarki stają się bardziej wydajne w tym, co robią. IMO: Największym minusem jest to, że możesz natknąć się na błędy renderowania, jeśli używasz niektórych najnowszych i najlepszych efektów CSS, aby stylizować HUD tak, jak tego chcesz, ale znowu powinno to zniknąć w miarę upływu czasu.

Opcja C jest, według mojej wiedzy, niedostępna w obrębie jednego płótna. Możesz mieć oddzielne płótno 2D nad warstwą 3D i narysować do niego HUD, ale w tym momencie dziedziczysz wszystkie problemy A i B bez żadnych korzyści. Nie widzę powodu, aby go polecać.

Uważam, że jedną z największych zalet, jakie WebGL ma na wielu natywnych platformach 3D jest to, że ma trywialny dostęp do jednego z najpopularniejszych i najbardziej elastycznych frameworków UI na świecie (HTML). Ignorowanie tej przewagi będzie kolosalnym wysiłkiem przy bardzo niewielkich korzyściach. Skorzystaj z dostępnych narzędzi i nie martw się zbytnio o utracone milisekundy z tego powodu. Obiecuję, że podczas pracy nad grą będziesz miał znacznie większe problemy, a twój czas i wysiłek zostaną znacznie lepiej wydane niż próba wymyślenia tego koła.

+0

Doskonała odpowiedź, ma wiele sensu, dziękuję bardzo! – JayDee

+0

Pamiętaj, że jeśli wybierzesz opcję C (płótno 2D nałożone na obszar roboczy 3D), osiągniesz bardzo dobre wyniki wydajności w systemie iOS 8. To podejście zmniejszyło o połowę moją liczbę klatek na sekundę! – lazd

Powiązane problemy