Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 24. listopad 2007, 23:24:56 Předmět: zpg |
|
|
ahoj,
jsem tu novy a koukam ze se tu resi zrovna to co mne taky zajima, delam totiz asi na tom samem(ZPG). Mozna brzo narazis na dalsi problem a tj. pouziti vice textur na teren. Takze nez se na to zeptas..
Budes si muset udelat vlastni Vertexformat, kterej obsahuje floaty pro jednotlivy textury. Pak jsou dve cesty, bud pouzit shadery, nebo ne. ja zvolil shadery viz. turoial(je tu i ten vertexformat)
http://www.codeproject.com/cs/media/terrainrendering.asp?df=100&forumid=101594&exp=0&select=1273740
hodne je toho taky tady
http://www.riemers.net/eng/Tutorials/DirectX/Csharp/series3.php
Myslim ze pokud chces, aby to vypadalo hezky, tak se pouziti shaderu nevyhnes. Ja jsem napred trochu tapal v HLSL, ale celkem rychle jsem shader z tutorialu prizpusobil mym pozadavkum a napasoval do svyho projektu. Ma to ale jednu nevyhodu, render transformace nemuzes delat primo na maticich device, ale vsechny pres shadery, proste to vyhodi nejakou vyjimku. Ale znameno to jen to ze si pro kazdy obejkt vytvoris wvpMatrix a posles to do shaderu jako handle efektu pred tim nez objekt vykreslis. coz by melo znamenat jen predelani metody Render naseho formulare. O trasnformaci objektu se postara vertex shader, o namichani textur a osvetleni se postara pixel shader. Je to vsechno v tech tutorialech, sic. anglicky, ale s tim se musime smirit;] Kdyz by te zajimalo neco konkretniho, tak se zeptej. Ja jdu zjistovat jak nacist, zobrazit a rozpohybovat .X model. |
|
Návrat nahoru |
|
|
Filkon
Založen: 19. 11. 2007 Příspěvky: 15
|
Zaslal: 28. listopad 2007, 13:29:40 Předmět: |
|
|
Zdravim.
Taky řešim to co ty, ale shaderom se chci vyhnout. Ten Vertexformat udělam jak? V tom tutoriálu je toho moc a nevim co potřebuju pro shadery a co je bez nich...
Eště bych se zeptal - jak si vyřešil, aby ti to nekoukalo do mapy při tich skocích z 0 na max. výšku? |
|
Návrat nahoru |
|
|
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 28. listopad 2007, 13:35:06 Předmět: |
|
|
moje struktura vertexu vypada takhle, tzn. ze micham 4 druhy textur
kód: |
public struct TerrainVertex
{
Vector3 pos;
Vector3 nor;
float tu,tv;
float b1,b2,b3,b4;
public TerrainVertex(Vector3 p,Vector3 n,float u,float v,float B1,float B2,float B3, float B4, bool normalize)
{
pos = p;nor = n;tu = u;tv = v;b1=B1; b2=B2; b3=B3;b4 = B4;
float total = b1 + b2 + b3 + b4;
if ( normalize)
{
// soucet vsech blend hodnot musi byt 1
b1 /= total;
b2 /= total;
b3 /= total;
b4 /= total;
}
}
public Vector3 Normal
{
get { return nor; }
set { nor = value; }
}
public Vector3 Position
{
get { return pos; }
set { pos = value; }
}
public static VertexFormats Format = VertexFormats.Position | VertexFormats.Normal | VertexFormats.Texture0 | VertexFormats.Texture1 | VertexFormats.Texture2 | VertexFormats.Texture3;
} |
koukani do mapy pri skocich z 0 na max? nevim co presne myslis |
|
Návrat nahoru |
|
|
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 28. listopad 2007, 13:43:52 Předmět: |
|
|
popravde mi neni moc jasny jak textury zamichat bez shaderu(tak aby to vypadalo dobre)...Asi budes muset teren rozdelit na vice casti, seradit podle textury a pri renderovani prepinat texturu na device. Potom je ale zbytecny davat blends do vertexformatu a budes moci pouzit asi nejakej standardni, pokud teda nechces Colored a Textured zaroven. Btw, tenhle zpusob jsem zkousel puvodne taky, prechod z travy na kameny vypada hrozne, sou tam videt hrany. Naopak pixel shader ti to krasne prolozi, tak ze jedna textura plynule prachazi v druhou i kdyz zmena v blends je vzhledem k sousednimu vertexu 100%.
Naposledy upravil krkovicka dne 28. listopad 2007, 13:54:36, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
Filkon
Založen: 19. 11. 2007 Příspěvky: 15
|
Zaslal: 28. listopad 2007, 13:54:32 Předmět: |
|
|
No mně to jasný taky není - myslel sem, jestli by nějak nešlo vytvořit víc meshů pro různý výšky - udělat třeba 3 pruhy pro nížiny, roviny a hory... a ty bych pak votexturoval... |
|
Návrat nahoru |
|
|
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 28. listopad 2007, 13:55:29 Předmět: |
|
|
ja ti rozumim, akorat to vypada hnusne |
|
Návrat nahoru |
|
|
Filkon
Založen: 19. 11. 2007 Příspěvky: 15
|
Zaslal: 28. listopad 2007, 14:00:06 Předmět: |
|
|
No a jak teda ten mesh rozdělim?
To koukání do mapy - myslim, když jdeš třeba ve výšce 0 a je před tebou kopec skoro kolmej, vysokej 25,5, tak když přijdu úplně před něj, tak do něj vidim... |
|
Návrat nahoru |
|
|
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 28. listopad 2007, 14:10:30 Předmět: |
|
|
aha, takovejhle extremni pripad jsem nezkousel, zrejme to souvisi s predni orezavaci rovinnou, zkusim jak se mi to chova.... |
|
Návrat nahoru |
|
|
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 28. listopad 2007, 14:36:22 Předmět: |
|
|
jj, uz to vidim, ale nevim jak to poresit. ja jsem se divil ze mam dva body dole, kuli tomu ze je videt do terenu, dik za upozorneni, dam vedet kdyz na neco prijdu, zkus to taky ;] |
|
Návrat nahoru |
|
|
Filkon
Založen: 19. 11. 2007 Příspěvky: 15
|
Zaslal: 28. listopad 2007, 14:42:17 Předmět: |
|
|
Já mam taky body dole - je to tim, že ty nekoukáš přímo z pozice kamery, ale z pozice + nějaký to nearPlane nebo jak se to menuje - bejvá to nastavený na nějaký malý číslo(0.1, 0.01 nebo tak).... A vidíš do toho terénu, protože výšku počítáš z pozice kamery a ne z tý pozice, z který koukáš... Právě sme to už řešili s kámošem, ale nic kloudnýho sme nevymysleli... tak zkus na něco přijít, třeba nám poradí někdo tady na foru... |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 28. listopad 2007, 15:57:08 Předmět: |
|
|
Tento tvůj příspěvek jsem absolutně nepochopil.
Filkon napsal: |
Já mam taky body dole - je to tim, že ty nekoukáš přímo z pozice kamery, ale z pozice + nějaký to nearPlane nebo jak se to menuje |
Samozřejmě koukáš z pozice kamery, akorát nearPlane ti to ořízne kousek před tebou, takže objekty vidíš až od určité vzdálenosti.
Filkon napsal: |
výšku počítáš z pozice kamery a ne z tý pozice, z který koukáš |
To se mi taky nezdá... pozice kamery je přece pozice, z jaké koukáš. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
krkovicka
Založen: 24. 11. 2007 Příspěvky: 14
|
Zaslal: 28. listopad 2007, 16:38:02 Předmět: |
|
|
problem nastane kdyz mezi dvema body vyskove mapy je takovy rozdil ze vysledny sklon terenu je prilis strmy. Kdyz je potom mala i vyska pozorovatele, ktery se pohybuje po terenu(kamera kopiruje teren ve vysce oci) a pozorovatel prijde k takove strme stene, predni orezavaci rovina ten teren dole, orizne, je to prosty, ale nejsem si jist jak moc blizko se muze tato rovina nastavit, popr. menit za behu.
mozna by stacilo pomyslnou hlavu pozorovatele umistit neco malo za nohy, efekt bude takovej ze zmena vysky pri chuzi bude reagovat o neco drive. pri rozhlizeni ale bude kamera krouzit okolo osy, kde stojis, tezko rict jak to bude vypadat |
|
Návrat nahoru |
|
|
Filkon
Založen: 19. 11. 2007 Příspěvky: 15
|
Zaslal: 28. listopad 2007, 20:51:33 Předmět: |
|
|
krkovicka: takhle nějak sem to myslel To řešení jak ty říkáš mam udělaný, ale furt mi eště zalejzá do krajiny - třeba při chůzi bokem. A nemůžu přeci uhnout do strany, aby "hlava neseděla na krku, ale na rameni"... |
|
Návrat nahoru |
|
|
Lando
Založen: 29. 07. 2007 Příspěvky: 33 Bydliště: Cestice
|
Zaslal: 28. listopad 2007, 23:21:44 Předmět: |
|
|
Tady by asi bylo dobry testovat kolize vice bodu (o nejake delta vlevo, vpravo a vpredu od kamery) kdy staci aby byl jeden bod v kolizi a pohyb se neprovede/upravi.
Otazka je, jak mate vyresene kolize. Treba muze byt jednodussi pocitat kolizi koule se scenou, kdy koule ma stred v pozici kamery a polomer >= vzdalenost orezavaci plochy... |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 29. listopad 2007, 23:52:21 Předmět: |
|
|
Jo přesně tak, vytvoříš si obalovací kouli se středem S = pozice kamery a s poloměrem R = nearPlane+epsilon, kde epsilon je nějaké malé číslo (abychom se vyhnuli problémům s nepřesností). Poté budeš řešit kolize s terénem třeba per-triangle (trojuhelníková síť může být hodně hrubá, aby to moc nebrzdilo) a při kolizi vždycky najdeš takový kolizní bod P, který je nejblíže středu koule. Kameru je třeba dostat z kolize ven, to uděláš tak, že ji posuneš o vektor:
kód: |
S-P
----- * (R - |S-P|)
|S-P|
|
To samé zkontroluj pro sousední trojúhelníky, protože když kameru dostaneš pryč z kolize, může se dostat do kolize s něčím jiným. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
|