Vykreslujeme 3D model v XNA

2. díl - Vykreslujeme 3D model v XNA

Tomáš Herceg       17.02.2008       VB.NET, XNA, Grafika       15515 zobrazení

V tomto díle si ukážeme, jak načíst model ve formátu FBX a vykreslit jej ve 3D prostoru. Povíme si také o maticích a transformacích a vysvětlíme si, jak vše funguje. Nebudeme zabíhat do žádných podrobností, ale povíme si vše důležité.

V minulém díle tohoto seriálu jsme se seznámili s XNA frameworkem a ukázali si, jak založit nový projekt. Předvedli jsme si použití Content Pipeline a vysvětlili jsme si strukturu třídy Game a také to, k čemu jsou jednotlivé její metody. Dnes se naučíme pracovat s 3D modely, které nám dodá grafik, a hlavně si ukážeme, jak v XNA takový model načíst a vykreslit na obrazovku.

Kde sehnat 3D model?

Pokud se podíváte na stránky XNA Creators Club (http://creators.xna.com), což je oficiální web technologie XNA, najdete tam v jedné sekci odkaz na Turbo Squid. Na tomto webu najdete velké množství 3D modelů pro použití v XNA, některé jsou zdarma, jiné si musíte koupit. Je zde poměrně velký výběr, abyste viděli hned modely, které jsou zdarma, doporučuji použít řazení podle ceny. Vybírejte pouze modely, které jsou k dispozici ve formátu fbx. XNA sice umí otevřít i formát x, ale to už zase nepodporuje naše šablona pro Content Pipeline ve VB.NET. V některém z příštích dílů to do této šablony přidám, nyní si musíme vystačit s formátem fbx.

Pokud máte svého grafika, je třeba, aby vám model vyexportoval právě ve formátu fbx. Prakticky každý software pro vytváření modelů dnes formát fbx podporuje, anebo existuje nějaký plugin, který tuto podporu přidá. Je třeba také vzít v úvahu, že formát fbx nemusí podporovat všechny funkce, které umí daný grafický software, takže některé efekty, které grafik do modelu přidá, se pak ve hře nemusí zobrazit. Záleží, který software grafik používá.

Starter Kits

Na oficiálním webu XNA Creators Club, kde mimo jiné najdete spoustu článků, si můžete také stáhnout ukázkové příklady (Starter Kity). Jsou to již hotové hry naprogramované v XNA, u kterých máte dostupné zdrojové kódy, takže se můžete podívat, jak co funguje. Doporučuji například Racing Game Starter Kit, je tam k vidění téměř vše, co by se vám u her mohlo hodit. Neděste se toho čísla 33 fps (snímků za sekundu), je to snímané na notebooku na maximální rozlišení. Když jsem v nastavení vypnul postprocessing obrazu (který způsobuje to rozmazání; je to tam schválně, ve velké rychlosti to vypadá dobře), měl jsem asi 120 fps. XNA s výkonem opravdu nemá problémy.

  Racing Game StarterKit

Stáhneme si model a jdeme programovat

Abychom měli všichni stejný model, který vykreslíme, použijeme tohoto jednorožce. Je k dispozici zdarma (pro stažení se jen musíte zaregistrovat) a ve formátu fbx. Stažený archiv rozbalte, abyste mohli pak do Visual Studia model přidat.

Vytvořte si nový projekt Windows Game podle předchozího dílu a do složky Content přidejte rozbalený soubor unicorn.fbx. Výhodou formátu fbx je mimo jiné i to, že všechny textury se dají zabalit spolu s modelem, takže nemáte jeden model a k tomu dvacet obrázků s texturami, jako třeba u formátu x.

Pro reprezentaci modelu se používá datový typ Model, do deklarací někam nahoru přidejte (ne dovnitř metody!) tento řádek:

    Private unicorn As Model        ' model jednorožce

Dále již ze včerejška víme, že model musíme do této proměnné načíst. Dovnitř metody LoadContent tedy vložte tento kód:

    unicorn = Content.Load(Of Model)("Content\unicorn")

Spolu s modelem se takto již načtou všechny textury, takže budeme mít připraveno naprosto vše. Než se ale vrhneme na samotné vykreslení, musím nastínit alespoň trochu teorie týkající se transformací. Nehodlám zde prezentovat přesné definice, jednak to neumím a druhak bych tím asi napíchal více škody než užitku. Zkusím jen prakticky vysvětlit, co náš kód dělá.

Matice a vektory

Při vykreslování ve 2D prostoru je naše situace jednoduchá. Pozici čehokoliv určíme jedním dvousložkovým vektorem (Vector2), což je vlastně dvojice souřadnic.

Vektory a souřadnice

Základním bodem ve 2D prostoru je počátek, který má souřadnice [0, 0]. V praxi o bývá horní levý roh monitoru. Pokud chceme v XNA vyjádřit pozici nějakého bodu ve 2D prostoru, např. pozici bodu [3, 2], reprezentujeme ji pomocí dvousložkového vektoru. Vektor je červená šipka na obrázku - udává směr a vzdálenost. Souřadnice vektoru (3, 2) jsou pak rozdílem souřadnic koncového a počátečního bodu. Koncový bod je [3, 2], počáteční je [0, 0], a tím pádem tedy souřadnice vektoru jsou (3 - 0, 2 - 0), což je rovno (3, 2). Všimněte si, že souřadnice vektoru se píší do kulatých závorek, kdežto souřadnice bodů píšeme do závorek hranatých.

Pokud jsme tedy v minulém dílu chtěli vykreslit míček na pozici [50, 43], pak jsme metodě SpriteBatch.Draw předali jako pozici obrázku hodnotu New Vector2(50, 43). Předali jsme jí vlastně vektor vedoucí z počátku do bodu, který chceme zobrazit.

3D

Problém 3D prostoru je ten, že se jej snažíme vykreslovat na monitor, který je dvojrozměrný. Nikdo asi nečeká, že se nám na monitor vejde celý 3D prostor, ale jen jeho malá část. To nešlo koneckonců ani ve 2D, monitor má také jen konečné rozměry. Abychom mohli vykreslit něco ve 3D prostoru a bylo to pro nás použitelné, musíme znát alespoň 2 údaje:

  • místo, kde stojíme, místo, kam se díváme, a natočení kamery
  • způsob promítání prostoru na monitor

První bod se dá shrnout jako vlastnosti a pozice kamery a druhému bodu obecně říkáme projekce. Každý z těchto bodů můžeme jednoznačně popsat tzv. maticí (tabulka několika čísel). Pro pokročilejší práci se hodí vědět, jak taková matice vypadá přesně, ale zatím to potřebovat nebudeme.

Matice výhledu (view matrix)

XNA má samozřejmě nástroje pro sestavení takové matice, takže my je můžeme jen použít. Matice výhledu nám říká, odkud se díváme, kam se díváme, a musíme také říci, kde je vrchní strana kamery (kdybychom chtěli programovat hru s akrobatickým létáním, potřebovali bychom občas mít kameru "vzhůru nohama"). Do deklarací nahoru tedy přidejte tento řádek:

    Private view As Matrix = Matrix.CreateLookAt(New Vector3(0, 0.5, 2), Vector3.Zero, Vector3.Up)

Nadeklarovali jsme proměnnou view typu Matrix (matice) a přiřadili jsme jí výsledek volání Matrix.CreateLookAt. Tato statická metoda vyžaduje 3 parametry - prvním je pozice, kde se nacházíme (souřadnice ve 3D prostoru, takže musíme použít Vector3), druhým je pozice, kam se díváme (model umístíme do počátku, takže můžeme použít konstantu Vector3.Zero, nebo bychom samozřejmě mohli napsat New Vector3(0, 0, 0)), a vrchní strana kamery má mířit normálně nahoru, proto jsme předali hodnotu Vector3.Up.

Matice projekce (projection matrix)

Projekcí je mnoho různých druhů, ze školy jistě znáte volné rovnoběžné promítání, pokud jste měli deskriptivní geometrii, určitě budete znát i Mongeovo promítání. Ve hrách se ovšem uplatňují jiné typy projekcí:

Izometrie a perspektiva

Na tomto obrázku vidíte roh ulice nahoře v izometrii a dole v perspektivě. Vidíte, že izometrie zachovává rovnoběžnost hran - všechny ve skutečnosti rovnoběžné hrany jsou rovnoběžné i na obrázku. Naproti tomu v perspektivě je zachována jen rovnoběžnost svislých hran, vodorovné hrany se sbíhají k sobě. Izometrii používají některé strategické hry (jeden příklad za všechny je má oblíbená hra SimCity), perspektiva se používá prakticky ve všech 3D hrách. Existuje ještě mnoho dalších metod, jak zobrazit 3D prostor na 2D plochu, ale nám bude stačit perspektiva, protože tak věci vidíme ve skutečnosti.

Perspektiva se dá pro naše herní potřeby poměrně snadno nadefinovat tzv. promítacím kuželem. Tento kužel udává část prostoru, kterou vidíme.

Promítací kužel

Promítací kužel je kužel, který vidí kamera či oko. Protože předměty, které jsou těsně před kamerou, by vypadaly příliš zkresleně, vykreslujeme jen předměty za přední ořezovou plochou (near clip plane). Naopak příliš vzdálené předměty nevykreslujeme, protože se stejně vejdou jen do několika pixelů na hranici rozlišení monitoru, slabší počítače to akorát zdržuje a nestíhají vykreslovat. Vykreslujeme tedy jen to, co je před zadní ořezovou plochou (far clip plane).

V praxi tento promítací kužel definujeme pomocí zorného prostorového úhlu ve steradiánech (co to je vědět nemusíte, běžně používáme úhel pí / 4), dále potřebujeme vědět poměr stran obrazovky (v našem případě 4 / 3) a pak vzdálenost přední a zadní ořezové plochy od kamery. Do deklarací tedy přidejte tento řádek, ve kterém vytváříme matici projekce:

    Private proj As Matrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 4 / 3, 1, 100)

Globální matice (world matrix)

Často ve hrách používáme i tzv. globální matici. Hodí se například v případě, že chcete simulovat různé efekty vztahující se na všechny objekty ve scéně. My si tuto matici nadeklarujeme také, ale zatím ji nebudeme využívat. Přiřadíme jí hodnotu Matrix.Identity, což je jednotková matice, která má tu vlastnost, že nedělá vůbec nic. Do deklarací tedy přidejte toto:

    Private world As Matrix = Matrix.Identity

K čemu všechny tyhle opičárny s maticemi?

Možná se ptáte, proč se tyto všechny věci zapisují pomocí matic. Odpověď je prostá - je to velmi efektivní a poměrně rychlé na výpočty. Matice se dají mezi sebou násobit (vektor se dá považovat také za matici). Pokud to zjednoduším, tak když máme souřadnice nějakého bodu v 3D prostoru a postupně je vynásobíme globální maticí, pak maticí pohledu a nakonec maticí projekce, dostaneme přímo souřadnice tohoto bodu na monitoru a jeho vzdálenost "za monitorem". No a pak už není těžké vykreslit pro každý pixel na monitoru jen ten bod, který je od monitoru nejblíže (ty ostatní jsou za ním, takže nejsou vidět). Grafické karty jsou navrženy speciálně tak, aby uměly matice násobit velmi rychle, takže celý výpočet je sice časově náročný, ale není to nic, na co by karta nebyla připravena.

Transformace

Matice můžeme použít také k provádění transformací. Mezi nejběžnější transformace patří posunutí (translation), otočení (rotation) a změna měřítka (scale).

Matici posunutí nám vytvoří metoda Matrix.CreateTranslation, stačí jí jen předat vektor, o který chceme vše posunout. Pokud máme například bod [0, 0, 4] a chceme celou scénu posunout o vektor (1, 1, 1), souřadnice vektoru a bodu se přičtou, takže výsledný bod bude na souřadnicích [1, 1, 5].

Matici rotace nám vytvoří metody Matrix.CreateRotationX, Matrix.CreateRotationY a Matrix.CreateRotationZ. Musíme jim předat úhel v radiánech, o který chceme otáčet, přičemž otočení probíhá podle osy X, Y, nebo Z, podle toho, kterou metodu použijeme. Pokud budeme chtít vykreslit model na nějakou pozici a otočený o 90 stupňů, musíme nejdřív model umístit do počátku, pak jej otočit podle příslušné osy, a posunout až potom. Kdybychom nejdřív posunuli a pak otočili, dostal by se nám model na úplně jiné místo, protože se otáčí ne kolem své vlastní osy, ale kolem osy celé scény.

Matici změny měřítka si můžeme vytvořit pomocí metody Matrix.CreateScale, kde jako parametr předáme příslušný koeficient (větší než 1 zvětšuje, menší než 1 zmenšuje).

Pokud chceme nějak tyto transformace zkombinovat, jednoduše vynásobíme jejich matice. Pokud mám připravenou matici r s otočením a matici p s posunutím na požadované místo, kombinace těchto transformací je matice r * p. Je třeba ale dát pozor na pořadí matic, násobení matic totiž není komutativní! Je to přesně to, o čem jsem psal v odstavci o maticích otočení. Matice násobíme v pořadí, v jakém provádíme příslušné transformace, v tomto případě nejprve otáčíme, pak posouváme.

Ještě zbývá zmínit, že osa X vede zleva doprava, osa Y zdola nahoru a osy Z zepředu dozadu. Vše je názorně vidět z tohoto obrázku:

Souřadnicový systém v XNA

A jak tedy vykreslit model?

Pokud čekáte, že vykreslení modelu bude stejně jako všechno ostatní, co jsme v XNA zatím viděli, na jeden řádek, trochu vás zklamu. Možná jen částečně, pokud si do projektové šablony přidáte do třídy Game proceduru RenderModel, tak to na jeden řádek bude. Nyní zde uvede kód procedury, která model vyrenderuje, a v zápětí se podrobně podíváme na to, jak přesně funguje.

    Public Sub RenderModel(ByVal m As Model, ByVal position As Vector3, ByVal rotation As Double)
' Vykreslit celý model
Dim transforms(m.Bones.Count - 1) As Matrix
m.CopyAbsoluteBoneTransformsTo(transforms)

For Each mesh As ModelMesh In m.Meshes ' projít všechny části modelu

For Each eff As BasicEffect In mesh.Effects ' všem efektům nastavit pozice
' nastavit všechny 3 matice
eff.World = world * Matrix.CreateRotationY(rotation) * transforms(mesh.ParentBone.Index) * Matrix.CreateTranslation(position)
eff.View = view
eff.Projection = proj

eff.EnableDefaultLighting()
' vypnout standardní osvětlení
Next

mesh.Draw() ' vykreslit část modelu

Next
End Sub

Máme tedy metodu RenderModel, která dostane jako parametry model, který vykreslujeme, jeho pozici a otočení podle svislé osy Y. Každý model může mít (a většinou má) více částí, každá z nich používá jiný materiál (barvu, texturu) a má jinou pozici (každá část může mít svůj vlastní počátek). My někdy nemusíme chtít vykreslovat celý model (například když budeme mít model postavy, můžeme chtít jednotlivé části těla posouvat na různá místa a vykreslovat je zvlášť atd.). Proto i my v této proceduře musíme renderovat model po částech.

Uděláme si tedy pole transforms a zavoláme na modelu metodu CopyAbsoluteBoneTransformsTo, které toto pole předáme. Pozice každé části modelu totiž závisí na pozici jednotlivých částí kostry modelu (model postavy má svou kostru a když hýbeme touto kostrou, tak se pohybují i pozice jednotlivých částí modelu). Pak spustíme cyklus For Each, který mám projde všechny části modelu (objekty ModelMesh z kolekce Meshes našeho modelu).

Nyní pracujeme s každou částí modelu. Na každou tuto část se může vztahovat několik efektů (efekty pracují obecně se vzhledem modelu, mohou určovat například barvu, texturu, světlo atd.). Aby vše správně fungovalo, musíme všem efektům nastavit správně matice world, view a projection, takže uvnitř cyklu procházejícího všechny objekty BasicEffect každé části modelu nastavujeme tyto matice. Přiřazení matice view a projection je jasné, zajímavější je matice world. Vezmeme naši globální matici, kterou jsme si nadeklarovali nahoře (má hodnotu Matrix.Identity). Model chceme otočit podle osy Y a parametru rotation naší metody, takže ji vynásobíme maticí otočení podle osy Y. Dále musíme vynásobit maticí, která nese pozici kosti, která s danou částí modelu hýbe (v našem modelu tohle sice nepoužíváme, ale chceme mít metodu univerzální), aby se nám všechny části napozicovaly podle dané kosti. A protože celý model chceme ještě posunout na příslušnou pozici, takže to celé vynásobíme maticí posunutí na hodnotu parametru position. A úplně na závěr zavoláme eff.EnableDefaultLightning, čímž zapneme na model výchozí osvětlení, aby to vše vypadalo lépe.

Jakmile máme všechny efekty nastaveny, vykreslíme celou část modelu zavoláním metody Draw.

Když to shrnu, vezmeme všechny části modelu, projdeme všechny jejich efekty, nastavíme jim správně pozice z ohledem na pozice příslušných kostí kostry modelu a pak všechny části vykreslíme.

Dokončení

Aby se nám model vykreslil, musíme samozřejmě zavolat proceduru RenderModel. Přidejte tedy dovnitř metody Draw tento řádek:

RenderModel(unicorn, Vector3.Zero, gameTime.TotalGameTime.TotalMilliseconds * 0.001)

Jak jste si jistě všimnuli, model vykreslujeme na pozici počátku a jako rotaci předáváme počet milisekund od spuštění aplikace vynásobený čímsi, aby pohyb byl rozumně rychlý. Jednorožec se nám tedy bude otáčet plynule podle osy Y, jak ukazuje následující video:

To je pro dnešek vše, v příštím díle se podíváme na to, jak vytvořit jednoduchý terén.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

6. Trocha matematiky pro 3D 11.07.2008
5. Klávesnice a myš v XNA 30.03.2008
4. Textury a světla v XNA 24.02.2008
3. Generování terénu 20.02.2008
2. Vykreslujeme 3D model v XNA 17.02.2008
1. Seznámení s XNA frameworkem 14.02.2008

 

Mohlo by vás také zajímat

Programování Windows Services

Services (služby) jsou jedním ze základních stavebních kamenů programování pro systémy Windows. V článku se budu věnovat jak obecným principům a doporučením, tak konkrétním implementačním postupům.

Návrh uživatelského rozhraní v desktopových aplikacích

Doporučené postupy a běžné praktiky při vytváření uživatelského rozhraní desktopových aplikací převážně ve Windows Forms.

Práce s časovými pásmy a letním časem v aplikaci a databázi - díl 3.: DateTimeOffset v .NET Frameworku

DateTimeOffset je méně využívanou alternativou struktury DateTime v .NET Frameworku. Navíc dovoluje ukládat časové pásmo a pohodlně s ním pracovat.

 

 

Nový příspěvek

 

Diskuse: Vykreslujeme 3D model v XNA

No jelikož umím i VB.NET i C# (Vb.net má ale radši) jsem se ale rozhodl že to začnu dělat v C# (přeci jen tam jsou určité výhody). Jenomže teď narážím na problém: Error 2 Argument 1: cannot convert from 'double' to 'float'

Používám XNA game studio 4. Nevíte proč mi to dělá a co je to ten float za typ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

float je typ s plovoucí desetinou čárkou. Někde mu říkají single, někde real, atp.

stačí teda u volání metody u argumentu 1 dát Convert.ToSingle( "a tady bude ten double" )

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Zdravím.

Psal jste, že ty matice world, view a projection se musí vynásobit, abysme dostali souřadnice pixelu. to se dělá v metodě draw v rendermodel? A dělá se to pro každý efekt meshe? Co přesně znamená ten efekt? díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Dobrý den mám dotaz ohledně překrývání více modelů, modely ve stejné výšce se nepřekrývají jako v reálném světě mám na mysli

Posunu modely do prava, levý by měl překrývat pravý, posunu modely do leva pravý by měl překrývat levý, funguje to na jendu stranmu chápu proč je to kuli posloupnosti kodu, musím si vypočítat vzdálenost od středu a podle toho postupně vykreslovat modely nebo je nějaká lepší možnost? Předem děkuju za odpověd.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Zdravím,

zajímalo by mě jeslti le načítat modely přímo z disku a ne je pčidávat do projektu a až potí s nimi pracovat. Poku ano jak??

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Dobrý den,

jel jsem podle toho článku, ale v C#, nastal menší problém. Nevím jak mám přepsat toto pole do C#, mohl by jste mi prosím poradit.

Děkuji

Dim transforms(m.Bones.Count - 1) As Matrix
nahlásit spamnahlásit spam 0 odpovědětodpovědět
Matrix[] transforms = new Matrix[m.Bones.Count]

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Mohl by sem nekdo dat uz cely hotovy projekt?

me se to nejak nedari udelat....

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Hotové projekty zásadně nezveřejňuji, lidi pak nečtou článek a nechápou, co se děje. Hezky si článek pečlivě přečtěte, na něco jste určitě zapomněl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No, kdyby se ten článek napsal do komentářů ve zdrojovém kódě, pak by to šlo, ale mně vůbec nefunguje ani ten první díl.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Musíte pořádně a pečlivě číst, určitě jste na něco zapomněl. K čemu je, když si stáhnete hotový projekt, když ho sám neumíte udělat ani podle instrukcí v článku?

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Aha, já už chápu, proč mi to nefunguje, já mám jinou verzi XNA(2.0.11128.1), která má trochu jinou stavbu, než ta Vaše.

Například místo

Private unicorn As Model

mám já

private Model unicorn;

.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

No vy jste se hlavně neobtěžoval přečíst si první díl pořádně, protože jste nezjistil, že tento seriál je o programování v XNA v jazyce VB.NET. To, co máte vy, je jazyk C#. Je v tom poměrně podstatný rozdíl, rozhodně to není verzí XNA.

Než se pustíte do programování 3D grafiky, raději si pořádně ujistěte základy programování, musíte vědět, co děláte. Kopírovat kousky kódu bez toho, aniž byste věděl, co dělají, je úplně k ničemu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Já náhodou moc dobře vím, co dělám, ale že to Vaše není v C# nýbrž ve VBNET, tak to jsem nevěděl.

PS: Neznáte nějaký program, který by dokázal převézt zdrojový kód z jednoho jazyka do druhého?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Začínat s 3D grafikou nemá smysl, pokud neumíte programovat. Pokud nepoznáte, že jde o jiný programovací jazyk, tak prostě programovat neumíte.

Převaděč z VB.NET do C# a naopak (nefunguje stoprocentně, ono to ani nejde), je na adrese

http://labs.developerfusion.co.uk/conver...

A doporučuji vám nejprve se naučit programovat normální aplikace a pak teprve začínat s 3D grafikou.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Predne diky za clanek .. doufejme ze vydrzite :)

...zajimalo by me jak se resi v XNA animace objektu.

Jestli existuje podpora bipedu a nebo jak pracuje XNA s kostmi ... Predem diky za odpoved .

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Díval sem se na ty stránky a těch modelů co tam je zdarma tam moc není.Můžete mi nějak naznačit, doporučit, vysvětlit, jaký editor je na ty modely nejvhodnější?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejsem grafik, takže nevím, jaký software je nejlepší. Já vím třeba o Cinema 4D, Milkshape, 3D Studio Max, Maya, XSI Mod Tool atd. Většina z nich asi bude i placená (a upřímně řečeno jsou dost drahé).

To samé platí i o 3D modelech, na Internetu najdete spoustu modelů zdarma, na druhou stranu vytvoření 3D modelu dá nějakou práci, takže chápu, že většina modelů je placená.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě, ale to nevadí já si stáhnu crack :-D

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

To tady raději moc nevypouštějte, všichni vidí vaši IP adresu. Uvědomte si, že vývojáři jsou taky lid a živí rodiny. Tím, že kradete software, jim škodíte a brzdíte další vývoj tohoto produktu.

To, že cena softwaru je vysoká, vás k tomu neopravňuje a ani neomlouvá. Jezdil byste kradeným autem (jen proto, že ho potřebujete a nemáte na něj)?

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Ještě jsem nic z této oblasti nezkoušel, ale zkuste testnout odkazy třeba z této diskuse http://www.sgpsys.com/forum/cz/Default.a... resp. v návodu, na který upozorňuje pan Herceg na titulní straně našich stránek je odkaz na modelovací nástroj tento http://www.softimage.com/downloads/XSI_M... . Vše by, alespoň dle vyjádření u jednotlivých odkazů, měly být nástroje "free", o tom, co umějí či neumějí bohužel nemám žádnou páru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zvládne Blender fbx?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

http://wiki.blender.org/index.php/Script...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo, to je zdarma. Koukal jsem na to a nevypada to spatnme.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem našel pár stránek kde jsou modely zdarma a je jich mega a sou docela propracované.stačí do googlu napsat free 3d model a je to. akorát některé jsou v jiném formátu.Takže nevím

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jandoznacne 3D Studio max........

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Jeho problém ovšem je, že je dost drahé.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Ahoj.

Jak to tak vypadá, tak jsem asi jediný, kdo má tento problém.

na řádku:

unicorn = Content.Load(Of Model)("Content\unicorn")

mi vyskočí chyba Error loading "Content\unicorn". File not found.

To ovšem není pravda. Soubor existuje a je přidán správně podle návodu. U načítání Texture2D problém není. Vypadá to, že pouze u Modelu. Tak mi napadá, že je chyba někde v mé šabloně, stahnul jsem původní neupravenou, ale chyba je stejná.

Čím by to mohlo být ?

Předem díky za reakci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jen pro upřesnění. unicorn mi začal záhadně fungovat sám od sebe po odkrokování kódu. jiné FXB ovšem nefunguje. nepodaří se je patrně zkompilovat do xnb. důvod je ovšem nejasný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

čím jste nahraval tuto video sekvenci?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Windows Media Encoder 9

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Vykreslujeme 3D model v XNA

Musim rict, ze me XNA prekvapilo po stance vykonu. Na mem kompu to ma 125 FPS na full a 300 bez efektu. Tolik jsem od toho necekal.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, běhá to na DirectX, který je rychlý až až, .NET framework to nijak výrazně nezpomaluje a dneska je stejně nejdůležitější co nejrychleji ty trojúhelníky nacpat na kartu, a to opravdu XNA neřeší, to je záležitost DirectX.

XNA opravdu není pomalé a je velmi vhodné pro menší a střední hry. Oblivion byste v něm asi nenapsal, ale k tomu to ani není určeno.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback