Avatar billede inerdx Nybegynder
22. juni 2007 - 13:19 Der er 8 kommentarer

DirectX og clipping

Hvordan sætter man clipping? Jeg renderer en sprite med følgende kode og vil gerne clippe så tekst renderet i spriten ikke overskrider spritens bounds.

sprite.Begin(SpriteFlags.AlphaBlend);
sprite.Draw(texture, new Vector3(), new Vector3(0, 0, 0), Color.White.ToArgb());
sprite.End();
Avatar billede zaknafein Praktikant
24. juni 2007 - 21:06 #1
Ved du ikke hvor store hvert element i dit billede er?
Hvis du kigger i din sprite.Draw har den 4 overloads.
En af dem er
Draw(Texture srcTexture,Rectangle srcRectangle, Vector3 center, Vector3 position, int Color);

Her angiver Rectangle den portion af dit store sprite billede du vil tegne!
Hvis fx hvert bogstav i dit billede fylder 100 x 100, skal du bare bare ligge 100 til hver gang du skal til næste bogstav.

Da du nok har et kvadratisk billede skal du lige regne rækker og koloner ud.

Eller er det noget helt andet du spørger om?
Avatar billede zaknafein Praktikant
24. juni 2007 - 21:14 #2
Hvis du tegner sådan som du har gjort i din kode, overskrider den ikke noget bound.
Den tegner bare hele din sprite i koordinat 0,0

Hvis du tvinger den til at tegne noget uden for din sprite størelse, gentager den selv det stykke grafik der var i kanten af det lovlige.

Så det skal du bare styre med Rectangle så det ikke sker.
Avatar billede inerdx Nybegynder
25. juni 2007 - 16:32 #3
Jeg håbede lidt på at der var en lettere måde ligesom med GDI+.
Avatar billede inerdx Nybegynder
25. juni 2007 - 16:34 #4
I GDI angiver man eks en clipping rectangle som der så ikke kan tegnes udenfor - prøver man på at tegne udenfor denne bliver det bare ignoreret. Let måde at clippe synes jeg.
Avatar billede zaknafein Praktikant
25. juni 2007 - 23:11 #5
Jeg forstår ikke helt.
For hvis du angiver en rectangle på X gange Y ja så kan der ikke tegnes uden for dette!
Om du så har angivet et størrer rectangle end selve texture er et andet problem end clipping!
Avatar billede inerdx Nybegynder
26. juni 2007 - 11:14 #6
Jeg synes bare det virker besværligt selv at skulle regne ud hvor bounds er for et givent objekt. Hvis foreksempel jeg har en texture A hvori der skal renderes en texture B, sådan at B kun renderes der hvor a blev renderet og ikke udenfor, så skal jeg selv udregne hvor B's source bounds går alt efter hvor den er pladseret i A. Sikkert fordi jeg er vant til at GDI selv laver den udregninger for mig.
Avatar billede zaknafein Praktikant
26. juni 2007 - 12:07 #7
Jeg ved ikke helt hva du mener med at du vil rendere en texure A "hvori" der skal renderes en texture B.
Er det 2 textures du vil tegne oven på hinanden?
Er den forreste så gennemsigtig? Eller er texture B mindre end A, så den ikke dækker det hele?
Avatar billede inerdx Nybegynder
26. juni 2007 - 13:01 #8
Der er masser af ting at bruge det til, eksempelvis hvis jeg vil rendere et vindu hvori der er nogle ting (textures) som ikke må renderes udenfor vindues rammen når der scrolles i vinduet, eller en liste control hvori der kan scrolles, så kun nogle af elementerne i listen er synlige etc. Eller i spil termer, et minimap der skal renderes i hjørnet af skærmen, det skal være rundt (svært at gøre med en rectangle). Jeg kan faktisk ikke komme itanke om nogensinde at have set et user interface der ikke brugte en eller anden form for clipping.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester