Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Zzzz
Založen: 17. 08. 2007 Příspěvky: 4
|
Zaslal: 18. srpen 2007, 11:39:11 Předmět: Generovanie terenu |
|
|
Zdravim
Nemoze mi niekto poradit ako generovat teren pomocou ciernobielej bitmapy a potom zistenie aktualnej vysky terenu na danych suradniciach (x,z)?
Najviac by pomohol asi niaky tutorial ale o ziadnom neviem...
Dakujem |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. srpen 2007, 11:46:13 Předmět: |
|
|
v magazinu tu byl clanek o generovani rozsahlych terenu - zkusim se podivat jestli nekde nekdo nema zalohu |
|
Návrat nahoru |
|
 |
josh
Založen: 30. 07. 2007 Příspěvky: 74
|
Zaslal: 18. srpen 2007, 11:53:04 Předmět: |
|
|
na samotne vytvareni tech vyskovych map je spousta moznosti. nekolik z nich popisuje pavel tisnovsky v serialu na root.cz
jak sestavit teren z te heightmapy je zavisle na metode jakou chces teren "menežovat" a kreslit _________________ Tak Karle, kolik? |
|
Návrat nahoru |
|
 |
Zzzz
Založen: 17. 08. 2007 Příspěvky: 4
|
Zaslal: 18. srpen 2007, 13:20:48 Předmět: Generovanie terenu |
|
|
No a som zabudol napisat ze to potrebujem pre DirectX 9. Pozeral som na root.cz kde to je pre OpenGL a na DirectX to bude asi inak. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 18. srpen 2007, 13:21:48 Předmět: |
|
|
a ja myslim ze tezko - ze algoritmus pro spocitani terenu snad musi byt stejny - pouze kreslici funkce bude jina ne? |
|
Návrat nahoru |
|
 |
tangent

Založen: 28. 07. 2007 Příspěvky: 28
|
Zaslal: 18. srpen 2007, 15:22:44 Předmět: |
|
|
rezna: nemyslis nahodou clanek od Sema "Vykreslovani rozsahle krajiny v realnem case"? Ten byl totiz o nepravidelnych trojuhelnikovych sitich a jejich optimalizaci pro vykreslovani (tj. ne o pravidelnych mrizkach, jak chce Zzzz pro heightmapu), navic tam neslo o generovani, ale jen o to vykreslovani. Ten clanek je kdyztak v moji zaloze co jsem tu nekde uz postoval ZDE.
Zzzz: Pokud nejsi uuuplny zacatecnik a nekdy uz jsi v Direct3D neco delal a pokud ti jde ciste o to jak z nejake bitmapy udelat teren (a ne jak ten teren nahodne generovat), tak skoro ani zadny tutorial nepotrebujes. Cely postup bych shrnul nejak takhle:
- Nacist texturu, zjistit jeji rozmery (to ti umozni primo funkce pro nacitani) a pomoci funkce Lock se dostat k poli jednotlivych pixelu
- Vytvorit si pole vrcholu o stejnych rozmerech jako textura (napr. 256x256), vypocitat (x,z) souradnice jednotlivych vrcholu
- Ted pro kazdy vrchol zjistis jeho vysku (y souradnice) z prislusneho pixelu na texture (resp. z jeho tmavosti/svetlosti)
- Pak uz jenom vytvoris pole indexu, kterym pospojujes mrizku vrcholu do trojuhelnikove site (pokud bys nevedel jak na to, tak si vygoogluj treba tutorial c. 8 od autora AndyPike)
Ale to vsechno je skoro nezavisle na tom jestli pouzivas DX nebo OpenGl jak uz rikali ostatni, protoze vysledkem je potom obycejny model slozeny z vertexu a indexu ktery uz pak kreslis podle toho v cem delas (v DX funkce DrawIndexedPrimitive).
A co se tyka toho zjisteni vysky na urcitych souradnicich (x,z), tak nejjednodussi zpusob bych videl zjistit si ve kterem ctverecku te mrizky se nachazis a z jeho ctyr okrajovych vrcholu si spocitat prumer vysky. Ale nesmi to byt obycejny prumer, ale musis zohlednit nejakou vahou jak jsi od ktereho vrcholu daleko.
No, je to jenom hruby popis a snad jsem se nedopustil nejake mystifikace, ale myslim ze kdyz se pustis do jednotlivych kroku a na necem konkretnim se zaseknes, tak ti tu urite nekdo poradi  |
|
Návrat nahoru |
|
 |
Zzzz
Založen: 17. 08. 2007 Příspěvky: 4
|
Zaslal: 18. srpen 2007, 23:09:10 Předmět: Generovanie terenu |
|
|
No uz som pochopil ze jak to spravit... (cakal som ze na to bude niaka jednoducha funkcia jak v Truevision3D alebo Revolution3D ...) No ale zasekol som sa na zaciatku... Moze mi niekto vysvetlit ako zistovat tu farbu bitmapy na dakych suradniciach alebo ich nacitat niak do pola a jak sa roby s tou funkciou Lock?
Dakujem |
|
Návrat nahoru |
|
 |
tangent

Založen: 28. 07. 2007 Příspěvky: 28
|
Zaslal: 19. srpen 2007, 00:04:31 Předmět: |
|
|
Ta funkce se presne jmenuje LockRect(). Vykopiroval jsem ti ukazku z meho zdrojaku. Je to v DX8, takze semtam musis upravit nazev typu nebo funkce, ale pro predstavu to myslim staci. A samozrejme sem to nekompiloval, takze tam muze bejt nejaka logicka nebo syntaticka chyba tak to hlavne neber doslova
kód: |
LPDIRECT3DTEXTURE8 pTexture = NULL;
LPDIRECT3DSURFACE8 pSurface = NULL;
//TADY SI MUSIS NACIST SVOJI TEXTURU DO pTexture
//...
//Ziskani surface textury
D3DSURFACE_DESC desc1;
pTexture->GetSurfaceLevel(0, &pSurface);
pSurface->GetDesc(&desc1);
//Locknuti surface textury
D3DLOCKED_RECT LockedRect;
if(FAILED(pSurface->LockRect(&LockedRect, NULL, 0)))
{
return;
}
//A tady uz jenom projizdis dvojrozmerne pole pixelu
//Pozor, radky maji urcity datovy presah,
//1 radek ma tedy velikost v bajtech: LockedRect.Pitch
BYTE* pData = (BYTE*)LockedRect.pBits;
for(int u = 0; u < desc1.Width; u++)
for(int v = 0; v < desc1.Height; v++)
{
BYTE* pPixel = &pData[((LockedRect.Pitch/4) * u + v)];
//Zjisteni intenzity pixelu (0-255)
DWORD dwPixelIntensity = (pPixel[0] + pPixel[1] + pPixel[2]) / 3; //(B+G+R)/3
}
g_pBackSurface->UnlockRect(); |
|
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 19. srpen 2007, 02:52:51 Předmět: |
|
|
tangent napsal: |
... Ale nesmi to byt obycejny prumer, ale musis zohlednit nejakou vahou jak jsi od ktereho vrcholu daleko... |
na to se hodi linearni interpolace. imho by se musela provest postupne v obou osach |
|
Návrat nahoru |
|
 |
Zzzz
Založen: 17. 08. 2007 Příspěvky: 4
|
Zaslal: 21. srpen 2007, 17:17:26 Předmět: Generovanie terenu |
|
|
Dik za ten kusok kodu to som rozbehal ale uz asi 2 dni sa pokusam o vykreslenie a furt su tam chyby... Nemoze mi s tim niekto pls pomoct? V directX som zaciatocnik, predtim som robil trochu v OpenGL kde by s tim nebol problem ale tu sa to roby asi inak...
Dakujem |
|
Návrat nahoru |
|
 |
tangent

Založen: 28. 07. 2007 Příspěvky: 28
|
Zaslal: 22. srpen 2007, 14:56:04 Předmět: |
|
|
No muze byt... hod sem odkaz na zdrojak, popis co presne nefunguje a kde se ve zdrojaku cca dany kod nachazi.
Nebo si me odchyt na ICQ a zkusime to vyresit... |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 22. srpen 2007, 16:39:30 Předmět: |
|
|
tangent napsal: |
Nebo si me odchyt na ICQ a zkusime to vyresit... |
tohle se mi moc nelibi - protoze tim tohle vlaknu prijde o to resen protoze uz ho sem asi nikdo neposlete  |
|
Návrat nahoru |
|
 |
tangent

Založen: 28. 07. 2007 Příspěvky: 28
|
Zaslal: 22. srpen 2007, 19:26:32 Předmět: |
|
|
rezna: chapu, ale vypadalo to ze Zzzz nema zadny konkretni algoritmicky problem souvisejici s tim terenem z heightmapy, ale spis resi neznalost zakladnich konstrukci pro pouzivani DX jako plneni vertex bufferu, vytvoreni spravneho formatu vertexu atd. a taky se ukazalo ze tomu tak je.
Takze zatim je reseni tohoto problemu mozna tak vyzkouset si par jednoduchych tutorialu pro API ve kterem chci neco programovat a podivat se do jejich kodu na zakladni konstrukce....
Ale uznavam ze bude lepsi zustat u reseni problemu v ramci fora.. |
|
Návrat nahoru |
|
 |
|