dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Problema ar Tile dzini un kameru
Goto page 1, 2, 3, 4  Next
 
dev.gamez.lv Forum Index -> Iesācējiem
View previous topic :: View next topic  
Author Message
WhiteFalcon



Joined: 16 May 2010
Posts: 102
Location: Rīga

PostPosted: 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
View user's profile
Kamazs
Guru
Guru


Joined: 17 Jan 2003
Posts: 829
Location: The glorious ancient city of Loja

PostPosted: 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
View user's profile Send e-mail Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
WhiteFalcon



Joined: 16 May 2010
Posts: 102
Location: Rīga

PostPosted: 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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Jun 10, 2010 6:48 pm    Post subject:

Tagad viss skaidrāks. Smile
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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
WhiteFalcon



Joined: 16 May 2010
Posts: 102
Location: Rīga

PostPosted: 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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
WhiteFalcon



Joined: 16 May 2010
Posts: 102
Location: Rīga

PostPosted: Thu Jun 10, 2010 7:30 pm    Post subject:

puspikelis ? tas ir +0.5f ?
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
WhiteFalcon



Joined: 16 May 2010
Posts: 102
Location: Rīga

PostPosted: Thu Jun 10, 2010 9:40 pm    Post subject:

Nu gan loģiski izklausas Very Happy
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 Very Happy man jau ta pixeli liekas mazi kur ta vel puse no vinjiem.
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
WhiteFalcon



Joined: 16 May 2010
Posts: 102
Location: Rīga

PostPosted: 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. Shocked
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Iesācējiem All times are GMT + 2 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group