Skocz do zawartości
ANtY

Nad czym aktualnie pracujesz?

Rekomendowane odpowiedzi

@Konrad-GM  Jak orientujesz się już trochę w Godocie to może ty będziesz wiedział jak ogarnąć tam odpowiednik GMowych surface? Bo ja kombinowałem i szczerze nie wpadłem na żaden pomysł.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

@I am Lord Jasne, w czołgach używam właśnie metody "surface" żeby połączyć elementy otoczenia w teksturę, ale w Godocie działa to odrobinę inaczej. Viewporty w Godot to nic innego jak OpenGL'owe Framebuffery, ale aktualizują się dopiero po wyświetleniu kolejnej klatki, nie da się rysować bezpośrednio na Viewportach ze względu na VisualServer, który odpowiedzialny jest za interpretowanie komend rysowania np. VisualServer.canvas_item_add_line jest podpięte bezpośrednio pod CanvasItem.draw_line (Node2D, Sprite etc.), dotyczy to wszystkich funkcji rysowania. Dlatego Godot też udostępnia taką funkcję jak VisualServer.request_frame_drawn_callback, dzięki niej można nasłuchiwać, kiedy Viewporty zostały zaktualizowane. Żeby nie aktualizować Viewporta co klatkę, polecam ustawić parametr Viewport.render_target_update_mode na UPDATE_ONCE (ten parametr potem jest ustawiany na UPDATE_DISABLED przez VisualServer, także każda kolejna aktualizacja wymaga przełączenie tego parametru). Zalecałbym też przełączenie tej flagi Viewport.render_target_v_flip na True, bo standardowo obraz będzie odwrócony. Nie zapomnij też o parametrze Viewport.size.

 

Dodatkowo wspomnę, że Viewport.get_texture zwraca referencję na teksturę i wystarczy pobrać teksturę jednorazowo np. w funkcji _ready i narysować ją raz w metodzie _draw bez wywoływania metody update. Ale nie można wtedy usunąć Viewporta, bo usunie nam też teksturę.

 

Jakbyś chciał "ukryć" Node'y z drzewa sceny nie musząc dodawać Viewport node'ów, możesz użyć bezpośrednio metod z VisualServer tj. VisualServer.viewport_createVisualServer.viewport_set_activeVisualServer.viewport_get_textureVisualServer.viewport_attach_canvasVisualServer.canvas_createVisualServer.canvas_item_set_parentVisualServer.free_rid itd. np. do obsługi roboczych Viewportów.

 

Jeszcze wspomnę o OpenGL ES na mobilkach - Texture.get_data nie działa ze względu na limity samego OpenGL ES, które uniemożliwiają przepływu danych z GPU do RAM, także nie da się pobrać pikseli z Viewporta czy jakiejkolwiek tekstury do zmiennej, natomiast na desktopach działa bez problemu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
24 minuty temu, I am Lord napisał:

kurcze, wygląda na trudne coś jednak nic dziwnego że sam na to nie wpadłem. 

 

Nie jest to tak trudne, po prostu wymaga trochę innego myślenia niż GM-owe surface'y, podsyłam też niewielki przykład:

render-target.zip

 

Nie jestem pewien, czy z forum działa pobieranie plików, ale wgrałem też na inny hosting:
https://www23.zippyshare.com/v/xXpprq1O/file.html

 

- LPM "niszczy" surface

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Modeluję sobie postaci a'la Disney/Pixar. Celuję w coś jak modele z gry Spy Party

8UyPrEB.png

 

  • Lubię (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

@kriso99 cóż to za gierencja? 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×