View previous topic :: View next topic |
Author |
Message |
WhiteFalcon
Joined: 16 May 2010 Posts: 102 Location: Rīga
|
Posted: Thu Jun 10, 2010 5:47 pm Post subject: Problema ar Tile dzini un kameru |
|
Sveki.Šodien man pieklīda neliela problēma.
kad lietoju tile dzini viss liekas labi. Bet kad uzstadiju automašīnai kameru
parādās spraugas-kas par spraugām nav ne jausmas:
Attels:
Attels: - Kā sāku parvietoties uzreiz parādas spraugas starp katru flīzi(tile).
Kāds var pateikt kas varētu būt par vainu? -pašam nekas prāta nenāk. |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Thu Jun 10, 2010 5:54 pm Post subject: |
|
Nezinu kas ir " tile dzinis", bet zinu, ka līdzīgu efektu novēroju Wellguardā. Pēc lielas galvas lauzīšanas, labākais, ko dabūju bija
Code: |
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
|
attiecīgajāmn tekstūrām. Manā gadījumā vēl sākumā vajadzēja nodefinēt šo konstanti:
Code: |
#define GL_CLAMP_TO_EDGE 0x812F
|
Tas, protams, OpenGL gadījumā.
Par to, kas tā par konstanti, skat. referenci:
http://www.opengl.org/sdk/docs/man/xhtml/glTexParameter.xml _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Jun 10, 2010 6:16 pm Post subject: |
|
Drīzāk vaina ir nepareizā četrstūru zīmēšanā - izmēri nedaudz mazāki lietoti zīmēšanā, nekā ir nepieciešams, vai arī manuāli tiek zīmēti dzinējā transformēti vertex'i un manuāli to pozīcijas apstrādātas. Jebkurā gadījumā palīdzētu par puspikseli lielākus "tile"-četrstūrus zīmēt.
Lai kaut ko vairāk pateiktu, jāapskatās tas tile dzinējs.
P.S. Tas, kas man konkrēti šajā gadījumā nepatīk, ir tas, ka spraugām cita krāsa, bet varbūt tas arī radās no attēla samazināšanas - tāpēc iesaku citreiz celt pilna izmēra bildes augšā un te ielikt thumbnail'us (mazākas attēlu versijas) ar link'u uz lielajām. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
WhiteFalcon
Joined: 16 May 2010 Posts: 102 Location: Rīga
|
Posted: Thu Jun 10, 2010 6:39 pm Post subject: |
|
nepievienojot kameru ir ka 1aja attela bet kad peilieku kameru uzraiz šādi un tās spraugas kustās.
Sacīts, darīts-
|
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Jun 10, 2010 6:48 pm Post subject: |
|
Tagad viss skaidrāks.
Izskatās, ka problēma ir ar bilineāro filtrēšanu - tiek ņemts blakusesošais pikselis arī.
Te vai nu nepieciešams atslēgt filtrēšanu, vai glabāt katru tekstūru savā attēlā un izmantot Kamaza ieteiktās metodes D3D9/XNA versiju (tā kā par XNA nekā nezinu, minējumus ārā nebēršu, vajadzēs tev pameklēt, kā ierobežo tekstūru).
Te atradu vienu veidu (šeidera): http://digitseven.com/texturing.aspx _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Jun 10, 2010 6:51 pm Post subject: |
|
Izskatās pēc XNA.
XNA zem PC bāzēts uz D3D9. Tā ka tev jālasa šeit: Directly Mapping Texels to Pixels (Direct3D 9) (Windows).
To visu var panākt arī ar bilineāro filtrēšanu. Nevajag to slēgt ārā. Hardware ir optimizēta bilineārai filtrēšanai (tb tā notiks tikpat ātri, cik bez tās). |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Jun 10, 2010 7:01 pm Post subject: |
|
Ja nebūs vajadzība kameru pievilkt/attālināt/pagriezt ap savu asi, tad tas tiešām derēs ideāli.
Ja būs...
Jautājums autoram: kā tad īsti būs - vajadzēs to kameru grozīt un mainīt tās attālumu vai nē?
EDIT: Ir viens universāls variants, kas gan prasīs nedaudz vairāk laika - izveidot lielajā tekstūrā ap katru mazo tekstūru 1 pikseli lielu malu, kuru aizpilda atbilstoši vajadzībām - kur vajag, lai beidzas tekstūra, tur caurspīdīgu, kur vajag lai atkārtojas, tur kopē no attiecīgās tekstūras pretējās puses pikseļus. Dzinējs arī būs jāmodificē atbilstoši. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
WhiteFalcon
Joined: 16 May 2010 Posts: 102 Location: Rīga
|
Posted: Thu Jun 10, 2010 7:12 pm Post subject: |
|
Atbilde Snake5 : ne kameru nevajadzēs grozīt.Vienigais kas ir nepieciešams ir tās pozicija.
kameras sastāvs
Code: | GraphicsDevice Kamera;
Vector2 KamerasPozicija = Vector2.Zero;
Matrix Transformacija; |
Code: | public Matrix TransformacijaK(GraphicsDevice graphicsDevice)
{
Transformacija =
Matrix.CreateTranslation(new Vector3(-KamerasPozicija.X, -KamerasPozicija.Y, 0));
Matrix.CreateLookAt(new Vector3(200, 100, 0), SPxPozicija, SPxPozicija);
return Transformacija;
} |
Code: | Lwe cam = new Lwe();
int iTileToDraw;
cam.KamerasPozicija.X += Pozicija.X;
cam.KamerasPozicija.Y += Pozicija.Y;
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState, cam.TransformacijaK(Kamera));
//Šeit atrodas tile karte
spritebatch.End();
spritabatch.begin();
//Te sakas auto(ar noteiktu poziciju lai auto paliek centrā un kustas lidz ar kameru.
|
|
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Jun 10, 2010 7:18 pm Post subject: |
|
Ah. Forši.
Nu tad var droši izmantot bubu ieteikto variantu - noapaļo kameras pozīciju uz ekrāna pikseļiem un pieskaiti tai puspikseļa attālumu, un tad vajadzētu būt visam OK. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
WhiteFalcon
Joined: 16 May 2010 Posts: 102 Location: Rīga
|
Posted: Thu Jun 10, 2010 7:30 pm Post subject: |
|
puspikelis ? tas ir +0.5f ? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Jun 10, 2010 7:38 pm Post subject: |
|
Diemžēl tik vienkārši nebūs.
Puspikseļa garums = kameras garums / izšķirtspējas garums / 2
Puspikseļa platums = kameras platums / izšķirtspējas platums / 2
Līdzīgi ar noapaļošanu uz pikseļiem...
EDIT: Ah, vēl - ja nekļūdos, tad vēl laikam vajadzēja arī izvēlēties pareizu kameras izmēru. Visvieglāk, protams, bija ar to, kurš atbilst backbuffer'a izšķirtspējai vai ir tās reizinājums ar kādu no 2 pakāpēm.
Eksperimentiem tīri ok variants šādi mocīt ciparus, bet reālā spēlē, kur jāmaina izšķirtspēja, šis diez vai derēs normāli. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
WhiteFalcon
Joined: 16 May 2010 Posts: 102 Location: Rīga
|
Posted: Thu Jun 10, 2010 9:40 pm Post subject: |
|
Nu gan loģiski izklausas
Code: | int EkranaGarums = 1040;
int EkranaPlatums = 800;
PP = 1040/EkranaGarums/2 (Sanak vnk 0:2 :D)
PP = 800/EkranaPlatums/2 |
ja pareizi saprau tad kas tas par pus pixeli ? visp kas ta par mervienibu man jau ta pixeli liekas mazi kur ta vel puse no vinjiem. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Thu Jun 10, 2010 9:48 pm Post subject: |
|
Ir divas lietas - tekseļi, un pikseļi.
Tekselis - tas ir tas, kas ņemas no tekstūras.
Pikselis - tas ir tas, kas ir uz ekrāna.
Dažādās situācijās vienam pikselim var atbilst vairāki tekseļi (iedomājies 256x256 kvardrātu uzrenderētu 64x64 laukumā). Vai arī otrādi - vienam pikselim atbilst tas pats tekselis, kas citiem (64x64 tekstūra uz 256x256 laukumu).
Tekstūras tekseļus renderē uz poligona, kuram koordinātes var nesākties uz veseliem skaitļiem, bet uz reāliem (1.5f). Tur arī tas "puspikselis" rodas. Tas īstenībā ir nevis "pikselis", bet gan tekstūras koordināte. Nobīde par puspikseļa izmēru.
Ja tu lieto ortogrāfisku projekciju (kā arī izskatās) ar limitiem no 0..ekrāna garumus/platums, tad tev tiešām pietiks pieskaitīt tikai +0.5f pie poligona koordinātes.
Izlasi to manu linku. Tur viss ir izskaidrots ar bildēm.
Vari arī nelietot nekādas projekcijas, bet koordinātes likt jau pre-transformētas. Īsti nezinu kā tas darās XNA, bet tai linkā D3D9 fiksētajā funkcionalitātē tas darās padodot vertexa pozīcijas formātu D3DFVF_XYZRHW ar w koordināti vienādu ar 1.
OpenGL'ā un DX10 gan šitādu problēmu nav. Tur ir 1:1 mappings no ekrāna koordinātēm uz pikseļiem. |
|
Back to top |
|
|
WhiteFalcon
Joined: 16 May 2010 Posts: 102 Location: Rīga
|
Posted: Thu Jun 10, 2010 10:09 pm Post subject: |
|
Code: | Matrix.CreateTranslation(new Vector3(-KamerasPozicija.X+ 0.5f, -KamerasPozicija.Y +0.5f,0));
|
+/- tur tie skaitļi neko ipaši nepalīdz atšķirība ir ar to kad iesledzot speli jau viņi parādās. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Thu Jun 10, 2010 10:16 pm Post subject: |
|
Ir kameras pozīcija noapaļota uz veseliem pikseļiem? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
|