This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold jest w swej istocie silnikiem 3D. Nawet gdy pracujesz wyłącznie z materiałami 2D, całe renderowanie odbywa się w 3D, ale jest rzutowane na ekran w projekcji ortograficznej. Defold pozwala korzystać z pełnej zawartości 3D przez dodawanie zasobów 3D, czyli Models, do kolekcji. Możesz budować gry wyłącznie w 3D, używając tylko zasobów 3D, albo łączyć zawartość 3D i 2D według własnych potrzeb.
Komponenty modelu tworzy się tak samo jak każdy inny komponent obiektu gry. Możesz to zrobić na dwa sposoby:

Gdy model jest już utworzony, musisz określić kilka właściwości:
Oprócz właściwości Id, Position i Rotation istnieją następujące właściwości specyficzne dla komponentu:
Oprócz właściwości powyżej będzie też pole, w którym można przypisać materiał do każdej siatki modelu:
W zależności od materiału będzie dostępna jedna lub więcej właściwości tekstury:
Mając komponent modelu na miejscu, możesz swobodnie edytować i przekształcać komponent albo otaczający go obiekt gry za pomocą zwykłych narzędzi Scene Editor, aby przesuwać, obracać i skalować model według własnego uznania.

Możesz manipulować modelami w czasie działania gry za pomocą wielu różnych funkcji i właściwości (zobacz dokumentację API dotyczącą użycia).
Defold zapewnia rozbudowane wsparcie dla sterowania animacją w czasie działania gry. Więcej informacji znajdziesz w instrukcji animacji modelu:
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
Kursor odtwarzania animacji można animować ręcznie albo za pomocą systemu animacji właściwości:
-- ustaw animację biegu
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animuj kursor
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)
Model ma też kilka właściwości, którymi można manipulować za pomocą go.get() i go.set():
animationhash) (TYLKO DO ODCZYTU). Animację zmieniasz za pomocą model.play_anim() (zobacz wyżej).cursornumber).materialhash). Możesz go zmieniać za pomocą właściwości zasobu materiału i go.set(). Przykład znajdziesz w dokumentacji API.playback_ratenumber).textureNhash). Możesz je zmieniać za pomocą właściwości zasobu tekstury i go.set(). Przykład znajdziesz w dokumentacji API.Oprogramowanie 3D zwykle pozwala ustawiać na wierzchołkach obiektu właściwości, takie jak kolor i teksturowanie. Informacje te trafiają do pliku glTF .gltf, który eksportujesz z programu 3D. W zależności od potrzeb gry musisz wybrać i/lub utworzyć odpowiednie i wydajne materiały dla swoich obiektów. Materiał łączy programy cieniujące z zestawem parametrów renderowania obiektu.
Istnieje kilka wbudowanych materiałów, których możesz użyć jako punktu wyjścia:
Jeśli chcesz tworzyć własne materiały dla modeli, zajrzyj do dokumentacji materiałów, aby uzyskać więcej informacji. Instrukcja shaderów zawiera informacje o tym, jak działają programy cieniujące.
Domyślny materiał komponentu typu model posiada stałe, które można zmienić za pomocą funckji go.set() lub go.animate() (więcej szczegółów znajdziesz w instrukcji do materiałów). Przykłady:
go.set("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tintvector4). Wektor typu vector4 służy do reprezentowania odcienia, a składowe x, y, z i w odpowiadają odpowiednio za odcień czerwony, zielony, niebieski i alfa.Domyślny skrypt do renderowania jest zaprojektowany specjalnie z myślą o grach 2D i nie działa z modelami 3D. Jednak po skopiowaniu domyślnego skryptu do renderowania i dodaniu kilku linii kodu możesz włączyć renderowanie modeli. Na przykład:
function init(self)
self.model_pred = render.predicate({"model"})
...
end
function update()
...
render.set_depth_mask(true)
render.enable_state(render.STATE_DEPTH_TEST)
render.set_projection(stretch_projection(-1000, 1000)) -- ortograficzna
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
Szczegóły działania skryptów do renderowania znajdziesz w dokumentacji renderowania.