Zaawansowane rysowanie tekstu w C#

06.02.2010 @ 18:44:47 by Rafał Kozik | C# .NET grafika

Pisząc różnego rodzaju aplikacje (i gry), chcielibyśmy czasami mieć większa możliwość dostosowania parametrów rysowanego tekstu niż tylko krój, rozmiar i kolor. W .NET jest to bardzo proste -- pokażę dzisiaj jak łatwo można to osiagnać za pomocą GraphicPath.


Artykuł: Proste przetwarzanie obrazów

23.12.2009 @ 21:18:59 by Rafał Kozik | grafika

We Wrocławskim Portalu Informatycznym (WPI) pojawił się artykuł mojego autorstwa: "Proste przetwarzanie obrazów". W przygotowaniu są już kolejne artykuły (tym razem związane z tematyką programowania gier) i powinny pojawiać się mniej więcej raz w miesiącu.

Na potrzeby artykułu poduczyłem się trochę Javy (żeby zrobić aplety) i muszę przyznać, że nie było to zbyt przyjemne doświadczenie. Tak, jestem językowym rasistą i zdecydowanie wolę C# ;).


Zdradzieckie DPI w plikach PNG

03.09.2009 @ 12:29:41 by Rafał Kozik | .NET C# grafika

Biblioteka GDI+ stara się być czasami sprytniejsza niż byśmy tego chcieli i podczas rysowania uwzględnia informację o DPI zawartą w pliku (jest to chunk pHYs), co czasami może przełożyć się na dziwne rezultaty. Jak dziwne? Weźmy jedną grafikę i narysujmy ją z DPI 72, 96 i 300, efekt jest taki:


Obrazek

Może się przez to okazać, że nasze narzędzia generujące grafiki będą dawać dziwne rezultaty. Na dodatek standardowo używane jest DPI z ustawień systemu (standardowo 96), które użytkownik naszego narzędzia może mieć zmienione.

Niektóre narzędzia przetwarzające obrazy zapisują błędnie informację o DPI, o czym przekonałem się parę dni temu, gdy 1/3 grafik testowych (które sam kiedyś tworzyłem) miała złe DPI.

Jak można temu zaradzić? Jako, że nas będą interesować tylko piksele, możemy zmienić DPI wczytanego obrazu za pomocą metody SetResolution i tak samo zrobić dla obrazu, który generujemy -- dzięki temu wszystkie będą miały takie samo DPI i problem powinien zniknąć.


Bitmapa o bezpośrednim dostępie do pikseli w C#

05.03.2009 @ 16:15:30 by Rafał Kozik | C# grafika

Kiedy w C# chcemy zmodyfikować zawartość bitmapy, możemy zrobić to na kilka sposobów. Pierwszym jest użycie metod GetPixel i SetPixel. Niestety ich wydajność pozostawia wiele do życzenia.

W większości tutoriali opisujących przetwarzanie bitmap, używa się metody Lock, aby dostać się do danych pikseli. Niestety metoda ta narzuca użycie unsafe w naszym kodzie, a poza tym brzydko wygląda.

Okazuje się, że jest jeszcze trzecia metoda, która jest rzadko opisywana -- stworzyć bitmapę na wcześniej przydzielonym obszarze pamięci. Dzięki temu mamy od razu dostęp do jej danych, bez potrzeby wcześniejszego jej blokowania. Taką bitmapę można używać normalnie do rysowania, można też utworzyć powiązany z nią Graphics, żeby po niej rysować. Ważne jest, żebyśmy zablokowali pamięć, której będzie używała taka bitmapa, żeby Garbage Collector jej nie przemieścił.

W dalszej części znajduje przykładowy kod, który robi prostą animację na takiej bitmapie o bezpośrednim dostępie.


Obrazek

Deferred shading

02.03.2009 @ 08:51:06 by Rafał Kozik | grafika gamedev

Deferred shading jest coraz popularniejszą techniką oświetlenia. Idea jest bardzo prosta i wydaje się łatwa w implementacji. Szukając informacji na jej temat zebrałem odnośniki do kilku artykułów i postanowiłem się nimi podzielić:


2008: Starcraft II: Effects & Techniques Dominic Filion & Rob McNaughton
2008: Deferred Rendering in Leadwerks Engine Josh Klint
2008: Deferred Shading jako wydajna technika oswietlenia. Wojciech Toman, IGK'2008
2007: Deferred shading in Tabula Rasa Rusty Koonce, GPU Gems 3
2007: Deferred Rendering in Killzone 2 Michal Valient
2005: Deferred shading tutorial. Pontifical Catholic University of Rio de Janeiro
2005: Deferred Shading in S.T.A.L.K.E.R. Oles Shishkovtsov, GPU Gems 2
2004: Deferred Shading Shawn Hargreaves (CLIMAX) & Mark Harris (NVIDIA)

Jak widać jest tego sporo i możemy zobaczyć jak to robią inni zanim zabierzemy się do implementacji.


Artykuły

15.11.2008 @ 00:12:28 by Rafał Kozik | warsztat programowanie grafika
Na stronie gamedev.pl pojawiły się dwa artykuły mojego autorstwa:

Atlasy tekstur jako prosty sposób przyspieszania renderingu
Zawód: murarz