.[ ČeskéHry.cz ].
Generovanie terenu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Zzzz



Založen: 17. 08. 2007
Příspěvky: 4

PříspěvekZaslal: 18. srpen 2007, 11:39:11    Předmět: Generovanie terenu Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. srpen 2007, 11:46:13    Předmět: Odpovědět s citátem

v magazinu tu byl clanek o generovani rozsahlych terenu - zkusim se podivat jestli nekde nekdo nema zalohu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
josh



Založen: 30. 07. 2007
Příspěvky: 74

PříspěvekZaslal: 18. srpen 2007, 11:53:04    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zzzz



Založen: 17. 08. 2007
Příspěvky: 4

PříspěvekZaslal: 18. srpen 2007, 13:20:48    Předmět: Generovanie terenu Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 18. srpen 2007, 13:21:48    Předmět: Odpovědět s citátem

a ja myslim ze tezko - ze algoritmus pro spocitani terenu snad musi byt stejny - pouze kreslici funkce bude jina ne?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
tangent



Založen: 28. 07. 2007
Příspěvky: 28

PříspěvekZaslal: 18. srpen 2007, 15:22:44    Předmět: Odpovědět s citátem

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 Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zzzz



Založen: 17. 08. 2007
Příspěvky: 4

PříspěvekZaslal: 18. srpen 2007, 23:09:10    Předmět: Generovanie terenu Odpovědět s citátem

No uz som pochopil ze jak to spravit... (cakal som ze na to bude niaka jednoducha funkcia jak v Truevision3D alebo Revolution3D Very Happy...) 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
tangent



Založen: 28. 07. 2007
Příspěvky: 28

PříspěvekZaslal: 19. srpen 2007, 00:04:31    Předmět: Odpovědět s citátem

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 Wink

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



Založen: 28. 07. 2007
Příspěvky: 162

PříspěvekZaslal: 19. srpen 2007, 02:52:51    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Zzzz



Založen: 17. 08. 2007
Příspěvky: 4

PříspěvekZaslal: 21. srpen 2007, 17:17:26    Předmět: Generovanie terenu Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
tangent



Založen: 28. 07. 2007
Příspěvky: 28

PříspěvekZaslal: 22. srpen 2007, 14:56:04    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 22. srpen 2007, 16:39:30    Předmět: Odpovědět s citátem

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 Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
tangent



Založen: 28. 07. 2007
Příspěvky: 28

PříspěvekZaslal: 22. srpen 2007, 19:26:32    Předmět: Odpovědět s citátem

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.... Wink
Ale uznavam ze bude lepsi zustat u reseni problemu v ramci fora..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna