March 2008

Uwaga! Informacje na tej stronie mają ponad 3 lata. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

18:47
Sat
29
Mar 2008

CommonLib 8.0 !!!

Moja jedna z największych, a na pewno najbardziej użyteczna z produkcji - ogólnoprogramistyczna biblioteka do C++ - doczekała się zupełnie nowej wersji: CommonLib 8.0. Najważniejsze nowości, to:

Comments (0) | Tags: productions libraries c++ | Author: Adam Sawicki | Share

09:36
Thu
27
Mar 2008

Zdjęcie HDR

HDR (ang. High Dynamic Range) występuje nie tylko w renderowaniu grafiki 3D, ale też w fotografii. Na zdjęciu HDR widać wyraźnie zarówno to co jest bardzo ciemne, jak i to co jest bardzo jasne - szeroki zakres nie do uchwycenia przez aparat za jednym razem. Żeby zrobić zdjęcie HDR:

  1. Przestaw aparat w tryb ustawień ręcznych.
  2. Nie poruszając aparatem, z tego samego miejsca, zrób kilka zdjęć z różną wartością ekspozycji. (Ekspozycja i inne parametry zdjęcia zostają zapisane w plikach w metadanych Exif.)
  3. Zgraj zdjęcia do komputera i wczytaj je do specjalnego programu służacego do tworzenia zdjęć HDR, np. darmowy i wieloplatformowy Qtpfsgui.
  4. W tym programie wykonaj Tone Mapping, aby utworzyć końcowe zdjęcie HDR i zapisać je do pliku jako nowy JPEG.

Zdjęcie HDR

Comments (0) | Tags: graphics | Author: Adam Sawicki | Share

11:11
Tue
25
Mar 2008

Elementarne algorytmy

float t;
for (uint i = 0; i < Count; i++) {
  t = (float)i / (float)(Count - 1);
  Foo(t);
}

Czy da się ten kod napisać lepiej? Ano da się. Zamiast wyliczać zmienną t za każdym razem na podstawie i, można ją zwiększać niezależnie:

float t = 0.0f, t_step = 1.0f / (float)(Count - 1);
for (uint i = 0; i < Count; i++, t += t_step)
  Foo(t);

Dla niektórych to oczywiste, ale każdy musiał się tego skądś nauczyć albo samemu wymyślić. Ja mam na to nazwę "elementarne algorytmy" i uważam, że takich rzeczy nie powinno się poznawać gdzieś przy okazji, ale porządnie spisać i nauczać początkujących programistów.

Mam nawet spisane pomysły na ponad pół setki takich drobiazgów, które możnaby opisać i zacząłem to robić w czasie wakacji 2007 jako nowa wersja mojego artykułu "Struktury danych i formaty plików" (nowy tytuł to "Brakujące ogniwo"), ale dokładne opisanie i zilustrowanie tego wszystkiego przerosło moje możliwości :)

Comments (0) | Tags: c++ algorithms teaching | Author: Adam Sawicki | Share

11:48
Sat
22
Mar 2008

Nowe zdjęcia w galerii

Umieściłem dużo nowych zdjęć w Galerii. Zapraszam do katalogów: Przyroda, Technika, Miasto, Uczelnia, Warszawa, Tekstury, Rozne fotki.

Wiem, że fotograf ze mnie kiepski (aparat też, tam gdzie zdjęcia robiłem komórką), ale w końcu tu nie o żaden artyzm chodzi. Nie twierdzę też, że nie mam żadnych innych zdjęć, ale tych na których są moi znajomi i ich rzeczy/mieszkania nie będę pokazywał publicznie.

Przy okazji życzę wszystkim zdrowych i wesołych Świąt !!!

Comments (0) | Tags: gallery | Author: Adam Sawicki | Share

09:49
Thu
20
Mar 2008

Przekształcenie wektora przez macierz

Transformację w 3D opisuje macierz 4x4. Pełne przekształcenie punktu (x,y,z) przez taką macierz polega na pomnożeniu (x,y,z,1) przez tą macierz, a potem podzieleniu trzech pierwszych składowych przez składową czwartą w. Używamy tu tzw. współrzędnych jednorodnych (ang. Homogeneous Coordinates). W D3DX dokonuje tego funkcja D3DXVec3TransformCoord.

Przekształcenie wektora wskazującego kierunek (w przeciwieństwie do punktu opisującego położenie) musi nie brać pod uwagę translacji, czyli czwartego wiersza macierzy. Dlatego przekształcenie wektora polega zwykle na pomnożeniu (x,y,z) przez podmacierz 3x3 tej macierzy. W D3DX dokonuje tego funkcja D3DXVec3TransformNormal.

Jeśli ten wektor jest wektorem normalnym wierzchołka siatki, teoretycznie należy go przekształcić przez odwrotność transpozycji (lub transpozycję odwrotności - to bez różnicy) tej macierzy, której używamy do przekształcania pozycji wierzchołków. W praktyce jednak, jeśli podmacierz 3x3 tej macierzy zawiera tylko rotację (i ewentualnie skalowanie proporcjonalne), a nie zawiera skalowania nieproporcjonalnego ani ścinania, wektory bazowe w tej macierzy są ortogonalne, więc jej odwrotność jest równa jej transpozycji i te przekształcenia się znoszą. Dlatego wystarczy przekształcić wektor wprost przez daną macierz, bez odwracania i transponowania (a wynik ewentualnie znormalizować, jeśli było skalowanie).

W swojej bibliotece matematycznej mam jeszcze jedną funkcję, nazwaną po prostu Transform. Przekształca ona punkt (x,y,z,1) przez podmacierz 4x3 podanej macierzy, nie wyliczając współczynnika w i nie dzieląc przez niego. To znacznie przyspiesza obliczenia względem funkcji TransformCoord i wystarcza wszędzie tam, gdzie macierz nie zawiera przekształcenia perspektywicznego, bo jej czwarta kolumna jest wtedy zawsze równa (0,0,0,1).

Za wszelkie uproszczenia przepraszam. Możnaby o tym dużo pisać. Chciałem tu tylko pokazać, że teoretyczne "pomnożyć wektor przez macierz" przybiera w praktyce różne formy i trzeba umieć prawidłowo je stosować.

Comments (0) | Tags: math directx | Author: Adam Sawicki | Share

16:22
Tue
18
Mar 2008

Visual AssistX jest fajny

Trzy razy próbowałem przekonać się do Visual AssistX instalując działającą przez miesiąc wersję testową. To rozbudowana wtyczka do Visual Studio (nie do wersji Express), która wzbogaca go o naprawdę ciekawe funkcje wspomagające pisanie kodu i zastępuje te już istniejące dużo lepiej zrealizowanymi. Wśród nich są różnorodne i świetnie pomyślena możliwości nawigacji po kodzie, działające prawie bezbłędnie podpowiedzi (IntelliSense) i ulepszone kolorowanie składni. Za każdym razem bardziej denerwował mnie niż pomagał, ale ostatnio tak się do niego przyzwyczaiłem, że nieprzyjemnie będzie, kiedy skończy się okres testowy. To jest chyba kwestia posiadania dostatecznie szybkiego komputera (AssistX bardzo "zamula"). Szkoda, że pełna wersja kosztuje $99.

Comments (0) | Tags: visual studio tools | Author: Adam Sawicki | Share

11:15
Sun
16
Mar 2008

Mały komiks

Wymyśliłem i zrobiłem ostatnio mały komiks :)

Comments (0) | Tags: warsztat humor | Author: Adam Sawicki | Share

11:14
Sat
15
Mar 2008

IGK Quiz 2008

Jest pomysł, żeby na tegorocznej konferencji IGK urządzić nieoficjalny konkurs/teleturniej/quiz z pytaniami dla programistów, wzorowany trochę na Programmer's Challenge z amerykańskiej konferencji GDC. Napisałem już odpowiedni program - oto zrzuty ekranu:

Teraz prośba do was o pomoc przy układaniu pytań. Więcej informacji i dyskusja w tym wątku forum.

Comments (0) | Tags: events warsztat igk | Author: Adam Sawicki | Share

09:36
Fri
14
Mar 2008

Cząsteczki stanowe i bezstanowe

Wrócę jeszcze do tematu efektów cząsteczkowych, żeby opisać coś, co dla wielu jest oczywiste, ale dla każdego przecież kiedyś nie było. Mnie do końca rozjaśnił tą sprawę referat mINA87 z ubiegłorocznej IGK pt. "Zaawansowane i efektywne systemy cząsteczkowe w grach komputerowych". Otóż efekty cząsteczkowe mogą być stanowe lub bezstanowe.

Efekty cząsteczkowe bezstanowe to takie, w których wszystkie parametry cząstki (pozycja, rozmiar, kolor, przezroczystość, orientacja) mogą być w dowolnej chwili wyliczone wg określonego, stałego wzoru w funkcji czasu (np. wg funkcji liniowej, kwadratowej, jakiejś z sinusem czy interpolacji między podanymi punktami). Ich zaletą jest łatwość zarządzania i przeliczania, także całkowicie za pomocą Vertex Shadera na GPU.

Efekty cząsteczkowe stanowe to takie, w których zapamiętane są bieżace parametry każdej cząsteczki. Są one aktualizowane wg pewnych zależności na podstawie parametrów poprzednich i delty czasu. Każda cząsteczka ma też czas życia, a nowe są tworzone przez tzw. emiter. To podejście pozwala sterować cząsteczkami w sposób interaktywny, np. zostawiać dym za latającą w dowolny sposób rakietą albo liczyć kolizje iskier odbijających się od ścian i podłogi.

Efekt cząsteczkowy napisałem już bardzo dużo razy - ostatnio wczoraj :) Może kiedyś opiszę w jakimś małym artykule, jak dokładnie to robię.

Comments (0) | Tags: rendering | Author: Adam Sawicki | Share

08:42
Wed
12
Mar 2008

D3DFVFCAPS_PSIZE

Wiem, że mechanizm Point Sprites jest przestarzały i ma wielu przeciwników, ale czasem jest dobrym rozwiązaniem. Ta notka będzie dla tych, którzy go stosują. Mogą się oni nieprzyjemnie zdziwić (tak jak ja ostatnio), że na niektórych kartach graficznych cząsteczki mają złą wielkość (np. są ogromne zamiast takich jakie mają być albo nie widać ich w ogóle).

Winny jest D3DFVFCAPS_PSIZE. Ten Caps mówi, czy rozmiar cząsteczki może być brany ze struktury wierzchołka o semantyce D3DFVF_PSIZE. Co ciekawe, legitymują się nim wszystkie, nawet stare karty firmy ATI, ale z kart firmy NVIDIA tylko te należące do generacji GeForce 6 i nowszych.

Co wobec tego zrobić? Kiedy rozmiar punktu nie może być brany z wierzchołka, jest odczytywany z ustawienia D3DRS_POINTSIZE. Na szczęście nawet wtedy wierzchołek może zawierać element D3DFVF_PSIZE, tylko on po prostu nie działa. Tak więc prawidłowym rozwiązaniem jest używać D3DFVF_PSIZE jeśli jest taka potrzeba, ale na wszelki wypadek wyliczyć też jakiś średni rozmiar cząsteczki i wpisać go do D3DRS_POINTSIZE.

Comments (0) | Tags: rendering directx | Author: Adam Sawicki | Share

09:29
Mon
10
Mar 2008

Cała prawda o Warsztacie

Siedząc na co dzień na Warsztacie nie potrafimy zobaczyć go z boku, tak jak widzą go inni. Od czasu do czasu docierają tylko do nas signały na temat opinii różnych grup, nie zawsze pozytywne. Dlatego ciekaw jestem, co sądzą o nas początkujący pasjonaci programowania, a co sądzą zawodowi programiści? Co sądzą demoscenowcy, graficy, informatycy z innych branż?

Może dla niektórych jesteśmy grupą zbyt hermetyczną i niechętną nowym? Może dla kogoś poziom naszych problemów programistycznych jest za wysoki albo przeciwnie, za niski? Może dla niektórych jesteśmy bandą oszołomów, którzy zajmują się trudną i nieopłacalną dziedziną? A może wręcz zgrają dzieciaków, którzy tylko myślą, że coś potrafią?

Przydałoby się takie miejsce, gdzie różni ludzie mogliby się szczerze wypowiedzieć co myślą o Warsztacie. To by było z korzyścią dla wszystkich.

Comments (0) | Tags: warsztat | Author: Adam Sawicki | Share

11:52
Sun
09
Mar 2008

Shadow Mapping i jego odmiany

Shadow Mapping, jako technika renderowania cieni najlepsza i najpopularniejsza (albo jedna z dwóch takich, obok Shadow Volume), a równocześnie trudna i stwarzająca wiele problemów, doczekała się licznych ulepszeń. Jednym z nich jest próba zapisywania zamiast głębokości czegoś bardziej zaawansowanego - np. VSM (Variance Shadow Maps), CSM (Convolution Shadow Maps), ESM (Exponential Shadow Maps).

Dla mnie, jako miłośnika przestrzeni otwartych, szczególnie ciekawe są techniki reparametryzacji pozwalające rzucać cień kierunkowy na duże obszary. Tutaj pierwszy był PSM (Perspective Shadow Maps), potem LiSPSM (Light Space Perspective Shadow Maps), TSM (Trapezoidal Shadow Mapping), a ostatnio trafiłem na wynaleziony zaledwie w ubiegłym roku przez Vladislava Guseva XPSM (Extended Perspective Shadow Maps).

Comments (0) | Tags: rendering | Author: Adam Sawicki | Share

20:21
Thu
06
Mar 2008

Blender do grafiki dydaktycznej

Jeśli znasz Blender albo inny program graficzny 3D, to warto zwrócić uwagę, że za jego pomocą można też łatwo robić ładnie wyglądające schematy dydaktyczne dotyczące grafiki 3D - np. do artykułu, tutoriala czy... pracy magisterskiej :D

Comments (0) | Tags: tools graphics teaching | Author: Adam Sawicki | Share

09:51
Tue
04
Mar 2008

Przeszedłem Shadowgrounds

Przeszedłem sobie ostatnio grę Shadowgrounds PL, której pełną wersję dali na krążku do miesięcznika CD-Action, nr 01/2008. Gra jest naprawdę wciągająca, świetnie się grało. To produkcja nietypowa, bo chociaż polega na strzelaniu, widok jest od góry. Walki z bossami są bardzo emocjonujące. Ma ciekawą fabułę (i jeszcze ciekawsze zakończenie) oraz bardzo ładną grafikę. Łączy "staroszkolne" rozwiązania (jak liczba żyć, po których straceniu następuje Game Over i trzeba powtarzać etap od początku) z nowoczesnymi technologiami (jak dynamiczne cienie i Bloom). Polecam :)

Comments (0) | Tags: games | Author: Adam Sawicki | Share

22:46
Sun
02
Mar 2008

GDC 2008 - Prezentacje

W Sieci można już znaleźć niektóre prezentacje z wykładów, jakie odbyły się na niedawnej, tegorocznej Game Developers Conference. Poszukiwania można zacząć od oficjalnej listy prezentacji na stronie konferencji, ale najlepiej chyba śledzić ten wątek naszego forum i podążąć linkami które są tam umieszczane, linkami z tych linków itd.

Naprawdę warto pościągać i poczytać te prezentacje. Nawet jeśli nie zawsze wszystko jest zrozumiałe, to ich przeglądanie jest bardzo motywujące i inspirujące :)

Comments (0) | Tags: events | Author: Adam Sawicki | Share

13:32
Sat
01
Mar 2008

IGK 2008 - Rejestrujemy się

Do 14 marca jest czas na wnoszenie opłat, a więc pewnie też na rejestrację na tegoroczną konferencję IGK 2008 w Akademii Podlaskiej w Siedlcach. Jeszcze nie wiadomo, jakie dokładnie będą referaty, aczkolwiek o napisaniu czegoś ciekawgo wspomnieli już Riddlemaster, mINA87 i firma Codeminion. Przelew robimy tylko na kwotę 70 zł - za sam udział w konferencji. Za noclegi i posiłki płacimy dopiero na miejscu. Organizatorzy poinformowali nas na forum, że mimo tylko dwóch noclegów do wyboru w formularzu rejestracyjnym, na tą trzecią, najważniejszą noc - z niedzieli na poniedziałek - będzie można sobie dokupić nocleg i to bez wcześniejszej rezerwacji.

Ważne linki:

Comments (0) | Tags: events warsztat igk | Author: Adam Sawicki | Share

STAT NO AD [Stat] [Admin] [STAT NO AD] [pub] [Mirror] Copyright © 2004-2017 Adam Sawicki
Copyright © 2004-2017 Adam Sawicki