j000rn Skrevet 16. november 2006 Del Skrevet 16. november 2006 (endret) Leeenge siden jeg har drevet med grafikkprogrammering på pixelnivå nå... Moro å leke litt Gjorde noen endringer på din versjon: * 512x512 istedenfor 128x128 * 32bits (gadd ikke teste, men tror dette går endel raskere pga. optimalisering i både memcpy og blur) * Litt større tekst, men gradient farger, som beveger seg... * Fikset bug'ene * Fjernet timer'n * Fjernet bildet. Skriver heller rett på formen. La til doublebuffer. står fortsatt "GeirGrusom" i teksten Hastigheten er bra på min 1.1ghz tabletpc med elendig skjermkort... HardCoreDrawing___j0rn.zip Endret 16. november 2006 av jorn79 Lenke til kommentar
Manfred Skrevet 17. november 2006 Del Skrevet 17. november 2006 Ah, gøy... Dere kan ikke sette meg på sporet til slikt når jeg har jobb å gjøre Lenke til kommentar
GeirGrusom Skrevet 17. november 2006 Forfatter Del Skrevet 17. november 2006 Ah, takk. Dette er omskriving fra noe jeg skrev i assembly (inline assembly i Open Watcom), så det er mulig jeg mistet noen av testene jeg hadde lagt inn til å begynne med... Takker, jorn Lenke til kommentar
j000rn Skrevet 17. november 2006 Del Skrevet 17. november 2006 (endret) Ah, takk.Dette er omskriving fra noe jeg skrev i assembly (inline assembly i Open Watcom), så det er mulig jeg mistet noen av testene jeg hadde lagt inn til å begynne med... Takker, jorn 7302573[/snapback] Skulle heller ha gjordt den i .Net IL eller "x86.net": http://www.viksoe.dk/code/asmil.htm Endret 17. november 2006 av jorn79 Lenke til kommentar
GeirGrusom Skrevet 17. november 2006 Forfatter Del Skrevet 17. november 2006 HAHA! Morsomt! Uansett, jeg fant ut hvordan jeg hadde gjort det i orginal programmet... det er ikke rart det ikke fungerte. Der allokerte jeg et minneområde som var én pixel større i alle retninger, for at blur skulle gi et riktig resultat (ellers blir det en mørk kant rundt hele bildet) og for å slippe å teste noe som helst. Du gjorde koden veldig mye bedre, jorn Lenke til kommentar
GeirGrusom Skrevet 27. november 2006 Forfatter Del Skrevet 27. november 2006 Bruker dette nå til å lage en software renderer i C# Jeg har nå implementert Z-Buffer, effektiv tegning av linjer, og 3D transformering...nå er det på tide å fylle polygoner. Derfor trenger jeg en effektiv funksjon til linje-interpolering, siden jeg ikke har tatt matematikk selv, så aner jeg ikke hvordand ette gjøres, og er ikke smart nok til å finne ut av det selv. Hjelp? Lenke til kommentar
j000rn Skrevet 27. november 2006 Del Skrevet 27. november 2006 void Line(int x1,y1,x2,y2) { if ( y2 < y1 ) { Swap(x1,x2); Swap(y1,y2); } int steps = y2-y1; float dx = (x2 - x1) / steps; float x = x1; for( int y = y1; y < y2; y++) { putpixel(x,y); x += dx; } } pseduokode.... ca... Lenke til kommentar
GeirGrusom Skrevet 28. november 2006 Forfatter Del Skrevet 28. november 2006 Unnskyld, Jeg har en linjetegnefunksjon, som ikke bruker deling i det hele tatt... det jeg trenger er en funksjon for å finne X hvor jeg vet Y X = ((Y / )... ?? Forstår? Jeg blir litt svimmel av å lese koden for å fylle polygoner, så jeg tenkte å lage det selv. Men takk for svar Lenke til kommentar
j000rn Skrevet 28. november 2006 Del Skrevet 28. november 2006 (endret) Unnskyld,Jeg har en linjetegnefunksjon, som ikke bruker deling i det hele tatt... det jeg trenger er en funksjon for å finne X hvor jeg vet Y X = ((Y / )... ?? Forstår? Jeg blir litt svimmel av å lese koden for å fylle polygoner, så jeg tenkte å lage det selv. Men takk for svar 7375499[/snapback] Hvordan tegner du linjer uten å dele? X = StartX + (Y-StartY) * (SluttX - StartX) / (SluttY - StartY) Men du trenger jo bare å gjøre dette en gang. Og så pluss på X for hver gang Y øker. På samme måte som det gjøres med X i eksmpelet mitt gjøres også med TX,TY (Texture X,Y) og GR,GG,GB (Gouraud Red, Green Blue). Endret 28. november 2006 av jorn79 Lenke til kommentar
GeirGrusom Skrevet 28. november 2006 Forfatter Del Skrevet 28. november 2006 (endret) Hvordan tegner du linjer uten å dele? Sånn (rett ut fra programmet): public void DrawLine(int x1, int y1, int z1, int x2, int y2, int z2, Color color) { int i, dx, dy, dz, sdx, sdy, sdz, dxabs, dyabs, dzabs, x, y, z, px, py, pz; dx = x2 - x1; /* the horizontal distance of the line */ dy = y2 - y1; /* the vertical distance of the line */ dz = z2 - z1; dxabs = Math.Abs(dx); dyabs = Math.Abs(dy); dzabs = Math.Abs(dz); sdx = Math.Sign(dx); sdy = Math.Sign(dy); sdz = Math.Sign(dz); x = dyabs >> 1; y = dxabs >> 1; z = dzabs >> 1; px = x1; py = y1; pz = z1; if (dxabs >= dyabs) // the line is more horizontal than vertical { for (i = 0; i < dxabs; i++) { y += dyabs; if (y >= dxabs) { y -= dxabs; py += sdy; } px += sdx; pz += sdz; SetPixel(px, py, (short)pz, color); } } else // the line is more vertical than horizontal { for (i = 0; i < dyabs; i++) { x += dxabs; if (x >= dyabs) { x -= dyabs; px += sdx; } py += sdy; pz += sdz; SetPixel(px, py, (short)pz, color); } } } Bresenham's line algorithm Xiaolin Wu's line algorithm Alle Z variablene kan du fjerne, det er for Z-bufferet. Endret 28. november 2006 av GeirGrusom Lenke til kommentar
ezb1 Skrevet 29. november 2006 Del Skrevet 29. november 2006 Holder på med et lite program for de som har mange filmer lagret på harddisken. Bare for gøy, så bruker jeg LINQ som gjør det ganske enkelt å gjøre en hel masse smugt. Som f.eks: Her er "movies" en List<Movie>, og man bruker from, select og where som i SQL for å hente ut alle elementene og bygge opp et slags XML-tre. XElement movieXml = new XElement("movies", from movie in movies select new XElement("movie", new XElement("title", movie.Info.Title), new XElement("year", movie.Info.Year), new XElement("rating", movie.Info.Rating), new XElement("runtime", movie.Info.Runtime), new XElement("plotoutline", movie.Info.PlotOutline) ... Her er et eksempel fra et sted i koden hvor bruker har søkt etter tittel på en film, og man ønsker å returnere de filmene som matcher. case SearchType.Title: var titleq = from movie in movies where movie.Info.Title.Contains(searchPattern) select movie; return titleq.ToList(); Ganske fiffig. var blir den typen som query'en resulterer i. Så var x = "eple" er det samme som string x = "eple". Går akkurat like fort for all ze magic skjer når man kompilerer Lenke til kommentar
kaffenils Skrevet 29. november 2006 Del Skrevet 29. november 2006 Sånn (rett ut fra programmet): Hvor mye mer effektivt er dette i forhold til den innebygde funksjonen for tegning av linjer? Eller for den saks skyld å bruke enkel divisjon som i jorn79's eksempel? Lenke til kommentar
j000rn Skrevet 29. november 2006 Del Skrevet 29. november 2006 (endret) Hvor mye mer effektivt er dette i forhold til den innebygde funksjonen for tegning av linjer? Eller for den saks skyld å bruke enkel divisjon som i jorn79's eksempel? 7384446[/snapback] Poenget er vel å leke seg og ikke bruke de innebygde funksjonene. Idag er det nok mye mer effektivt å bruke DirectX og 3D-kortet for å gjøre sånt Jeg ville satset på at den er mindre effektiv. Greit nok at man slipper en DIV. Men man får jo mye mer å gjøre i inner-loop'en... Uansett så er ikke koden jeg skrev spesielt for å tegne linjer. Det er for å regne ut/interpolere hver side av et triangel. Man tegner polygonene alltid en og en linje Y. Og interpolerer slik jeg har gjordt for å finne X, TX, TY(texturekoordinater) og GR,GG,GB (gouraud). Da sitter man igjen med: Y (kun 1, siden den er felles for begge sider) X1, X2 ( start X og slutt X) TX1, TX2, TY2...etc Så tegner man en rett linje fra (X1,Y,X2,Y). Hvor man igjen må interpolere TX1,TX2,TY1,TY2 (for å finne texturekoorinater) og GR1,GR2,GG1..etc (gouraud). Begynner vel å bli over 10 år siden jeg satt å kodet dette her i x86 asm nå. *drømmer seg tilbake* Endret 29. november 2006 av jorn79 Lenke til kommentar
GeirGrusom Skrevet 29. november 2006 Forfatter Del Skrevet 29. november 2006 (endret) Hehe, har aldri gjort det før egentlig, har bare laget 3D med linjer, og det begynner å bli litt døvt. Men jeg har lest to ting: At divisjon er den tregeste instruksjonen i prosessoren, og at Bresenhams algoritme er den raskeste; så det så! Men uansett; her er den eneste måten jeg kunne tenke ut for å fylle polygoner: Forresten; stilig program ezb1 Veldig elegant, samme gjelder forresten websiden din Men jeg får ikke downloadene til å fungere, hverken i ie eller ff. Endret 29. november 2006 av GeirGrusom Lenke til kommentar
ezb1 Skrevet 29. november 2006 Del Skrevet 29. november 2006 (endret) Forresten; stilig program ezb1 Veldig elegant, samme gjelder forresten websiden din Men jeg får ikke downloadene til å fungere, hverken i ie eller ff. 7386188[/snapback] Takker så meget. Har nettopp begynt på det, så har bare tatt form de siste dagene. La opp filene nå, men ikke skyld på meg hvis noe begynner å ryke Endret 29. november 2006 av ezb1 Lenke til kommentar
GeirGrusom Skrevet 30. november 2006 Forfatter Del Skrevet 30. november 2006 Wow! fikk brukt det nå, kjempetøft! Den bruker litt lang tid på å få tak i detaljer, men det er kanskje ikke så rart. supert program! Lenke til kommentar
ezb1 Skrevet 30. november 2006 Del Skrevet 30. november 2006 Wow! fikk brukt det nå, kjempetøft! Den bruker litt lang tid på å få tak i detaljer, men det er kanskje ikke så rart. supert program! 7391330[/snapback] Bruker litt tid ja, men kommer mye an på hva slags linje du har. Har gjort om litt nå, så du kan velge hvor mange imdb-threads som brukes samtidig. Går ganske mye fortere Lenke til kommentar
GeirGrusom Skrevet 18. desember 2006 Forfatter Del Skrevet 18. desember 2006 Jeg holder nå på med et OpenGL framework skrevet 100% i C#, så jeg tenkte å legge opp en liten demo på den nå (som kanskje blir et spill etterhvert?) Hvis dere vil prøve frameworket (som ikke er i nærheten av ferdig) så kan dere reference til glorg.dll som ligger i zip-filen. Escape avslutter. Have phun NB: Jeg vet at stjernene ikke fungrer helt. Lenke til kommentar
j000rn Skrevet 18. desember 2006 Del Skrevet 18. desember 2006 Jeg holder nå på med et OpenGL framework skrevet 100% i C#, så jeg tenkte å legge opp en liten demo på den nå (som kanskje blir et spill etterhvert?) 7529294[/snapback] Tøft Noen ide om hvordan denne ville fungert på Linux med Mono? Lenke til kommentar
GeirGrusom Skrevet 18. desember 2006 Forfatter Del Skrevet 18. desember 2006 Måtte i såfall bare byttet ut initialiseringen sine wgl, med tilsvarende xgl funksjoner... jeg må nesten prøve Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå