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 to od podstaw silnik 3D. Nawet gdy pracujesz tylko z materiałami 2D, całe renderowanie odbywa się w 3D, ale jest rzutowane ortograficznie na ekran. Defold pozwala na wykorzystywanie pełnej zawartości 3D poprzez dodawanie aktywów 3D lub Modeli do swoich kolekcji. Możesz budować gry wyłącznie w 3D, korzystając tylko z aktywów 3D, lub łączyć zawartość 3D i 2D, jak sobie życzysz. Komponent typu Model jest jednym z komponentów do obsługi elementów trójwymiarowych.
Komponenty Modelu tworzy się tak samo jak każdy inny komponent obiektu gry. Możesz to zrobić na dwa sposoby:
Po utworzeniu siatki musisz określić szereg właściwości (properties):
Oprócz właściwości Id, Position i Rotation istnieją następujące właściwości specyficzne dla komponentu typu Mesh:
Mając komponent Modelu, możesz swobodnie edytować i manipulować komponentem lub otaczającym obiektem gry za pomocą zwykłych narzędzi Edytora Sceny (Scene Editor), aby dostosować model do swoich potrzeb.
Możesz manipulować modelami w czasie działania programu za pomocą różnych funkcji i właściwości (zobacz dokumentację API) w celu uzyskania informacji na temat użycia).
Defold oferuje wsparcie dla kontroli animacji w czasie działania programu. Więcej informacji można znaleźć w instrukcji dotyczącej 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 lub za pomocą systemu animacji właściwości:
-- ustaw animację biegu
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animuj kursor animacji
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)
Model ma również wiele różnych właściwości, które można manipulować za pomocą funkcji go.get()
i go.set()
:
animation
hash
) (TYLKO DO ODCZYTU). Zmieniasz animację, używając model.play_anim()
(patrz wyżej).cursor
number
).material
hash
). Możesz to zmieniać za pomocą właściwości zasobów materiału i go.set()
. Obejrzyj dokumentację API w celu uzyskania przykładu.playback_rate
number
).textureN
hash
). Możesz to zmieniać za pomocą właściwości zasobów tekstury i go.set()
. Obejrzyj dokumentację API w celu uzyskania przykładu.Oprogramowanie 3D zwykle pozwala na ustawienie właściwości wierzchołków obiektu, takie jak kolor i nakładanie tekstur. Te informacje trafiają do pliku glTF .gltf lub Collada .dae, który eksportujesz z oprogramowania 3D. W zależności od wymagań gry będziesz musiał wybrać lub utworzyć odpowiednie i wydajne materiały dla swoich obiektów. Materiał łączy w sobie programy cieniowania (shadery) z zestawem parametrów do renderowania obiektu.
Dostępny jest prosty materiał modelu 3D w wbudowanym folderze materiałów. Jeśli potrzebujesz tworzyć niestandardowe materiały dla swoich modeli, zobacz dokumentację materiałów w celu uzyskania dalszych informacji. W dokumentacji shaderów znajdziesz informacje na temat działania takich programów cieniowania.
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)
tint
vector4
). Wektor 4-składnikowy jest używany do reprezentacji odcienia z wartościami X, Y, Z i W odpowiadającymi za czerwień, zielony, niebieski i kolor alfa (przezroczystości).Domyślny skryp renderowanie (render script) jest napisany pod gry 2D i nie działa dobrze z modelami 3D. Kopiując domyślny skrypt i dodając kilka lini kodu możesz szybko włączyć renderowanie obiektów trójwymiarowych dla Twoich 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)) -- orthographic
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
Zobacz dokumnetację renderowania w celu uzyskania dalszych informacji o skryptach renderowania.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB