[AVR] Rita vektorbilder

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
bit96
Inlägg: 2529
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: [AVR] Rita vektorbilder

Inlägg av bit96 »

Min rutin kräver som mest en tabell som motsvaras skärmens pixelhöjd.

Klipp polygonen i överkant och underkant (och även sidorna) du kan ju ändå inte rita utanför skärmen.
Jag har glömt vad denna klipprutin heter, men den klipper linjer längs skärmkanter, eller andra valda områden.
Det är i och för sig ingen svår beräkning.
Men eftersom du redan har linjedragning så har du säkert koll på både Bresenham och linjeklippning.

Metoden att läsa från skärm är inte bra, det kan funka för enkla tillämpningar, men med en riktig beräkning kan man med vektorgrafik rita över hur stor yta som helst. Det som platsar på skärmen klipps ut på nolltid.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: [AVR] Rita vektorbilder

Inlägg av Walle »

victor_passe skrev:Du kan ju börja högst upp på vänster av skärmen.
Gå pixel för pixel åt höger och när du stöter på en pixel som redan är svart(En av dina linjer) så sätter du flaggan inside=1.
Nu fortsätter du till höger men färglägger varje punkt. När du träffar på en punkt som redan var svart(En annan av dina linjer) så sätter du inside=0 och slutar att färglägga.
Fortsätt med detta för hela raden och sedan varje rad.
Den rutinen skulle ju i många fall resultera i något som ser ut ungefär såhär:
grafikfel.jpg
När "markören" kommer fram till översta hörnet så finner den en svart pixel, sätter flaggan inside=1 och fortsätter sedan att färglägga raden ut. Nollas inte flaggan för varje linje kommer den även fortsätta färglägga på nästa rad.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: [AVR] Rita vektorbilder

Inlägg av Korken »

Hanns linjealgoritm har jag bra koll på :)
Jag ska testa lite olika av era metoder och återkomma. Ska se om jag inte lyckas få detta att fungera.
Användarvisningsbild
stenD
Inlägg: 1355
Blev medlem: 23 september 2010, 21:53:35
Ort: Ljusfallshammar

Re: [AVR] Rita vektorbilder

Inlägg av stenD »

kolla i "foleyvandam" :) din bästa referens till grafikalgorithmer
googla "foley van dam"

alternativt kanske kolla i såsen till gimp
Findecanor
Inlägg: 1045
Blev medlem: 2 juli 2010, 23:04:07

Re: [AVR] Rita vektorbilder

Inlägg av Findecanor »

victor_passe skrev:Gå pixel för pixel åt höger och när du stöter på en pixel som redan är svart(En av dina linjer) så sätter du flaggan inside=1.
Nu fortsätter du till höger men färglägger varje punkt. När du träffar på en punkt som redan var svart(En annan av dina linjer) så sätter du inside=0 och slutar att färglägga.
Fortsätt med detta för hela raden och sedan varje rad.
Det var så här som vektorgrafik fungerade på den gamla Amiga-datorn, men i hårdvara. Men man var tvungen att förstå hur hårdvaran fungerade för att kunna göra rätt.
Det var länge sedan... Hmm.. låt se nu hur det var:
- Om du ska transformera punkter, gör det på punkterna ("vertices") först, sedan ritar du mellan de färdiga skärmkordinaterna. Varje vertex ska höra till precis två linjer i varje polygon, varken mer eller mindre. Om det är det minsta gap mellan linjerna blir figuren fel.
- När du ritar linjer så är det enkel interpolation som gäller. Till skillnad från en "rita linje-algoritm" så är det högst en bildpunkt per rad och linje. (Men det kanske är mer effektivt att göra på andra ledden, så kan man fylla flera pixels samtidigt)
- Rita alltid linjer i samma "riktning". Uppifrån och ner, eller från vänster till höger.
- Rita aldrig den nedersta (resp mest högra) punkten i samma linje.
- XOR'a varje bildpunkt.

Det andra sättet att göra det på är att dela upp varje polygon i konvexa former och när man ritar, dela upp dessa i trapezoider på skärmen som var och en är jätteenkel att rita och klippa mot skärmens kanter.
Den enklaste konvexa formen är en triangel -- den är garanterat konvex, vilka avrundningsfel man än har. 3D-hårdvara på PC arbetar bara med trianglar -- alla andra former delas upp i trianglar innan de skickas till hårdvaran.
Användarvisningsbild
bit96
Inlägg: 2529
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: [AVR] Rita vektorbilder

Inlägg av bit96 »

stenD skrev:kolla i "foleyvandam" :) din bästa referens till grafikalgorithmer
googla "foley van dam"

alternativt kanske kolla i såsen till gimp
Det var väl han som höll på med fraktaler?
Han är väl ok, men han trodde ju att all bildutsändning skulle kunna omvandlas till fraktaler för att spara plats.
Men vissa av hans tankegångar kan man ju ta vara på.
Hur många högskolepoäng lade man nu på kurser som baserades på hans teorier...? :)
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: [AVR] Rita vektorbilder

Inlägg av blueint »

Hans idé om fraktalkompression var inte helt tagen ur luften. Hadde det lyckats hadde mediautbudet blivit rejält förändrat. Mpeg4 hadde fått äta upp hela hattfabriken. :D
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: [AVR] Rita vektorbilder

Inlägg av victor_passe »

Min mattelärare berättade om några han kände som skrev algoritmer för att komprimera en bild mha fraktaler.
Går det med en bild så borde det ju gå med en video ström?
Användarvisningsbild
stenD
Inlägg: 1355
Blev medlem: 23 september 2010, 21:53:35
Ort: Ljusfallshammar

Re: [AVR] Rita vektorbilder

Inlägg av stenD »

Ingen aning om han pysslat med fraktaler, bara att boken är väldigt omfattande och att den användes av en kille som skrev en fönsterhanterare.
Förövrigt tror jag inte han har gjort alla algoritmerna i den boken :D
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Re: [AVR] Rita vektorbilder

Inlägg av PaNiC »

Hur går det för Korken?
Inte hört något på ett tag :).
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: [AVR] Rita vektorbilder

Inlägg av Korken »

Oj har glömt av den här tråden lite, jodå, har testat ett par metoder!
Jag har än inte testat någon iterativ funktion, men jag testade en som var nästan som floodfill, fast att den drog hela linjer.
Den fungerade riktigt bra, och håller på och testar den mer. (den fungerar inte 100% än) :)
Skriv svar