Pokazywanie postów oznaczonych etykietą bajtnotka. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą bajtnotka. Pokaż wszystkie posty

piątek, 13 kwietnia 2012

Koniec (?) projektu z blendera ;)

Oto i sam Pan Raptor ;)
W końcu skończyłem swój projekt na kurs Blendera (jeden z dwóch więksszych) :)

Tekstura sux i jeszcze mógłbym trochę rzeczy dorobić ale mi się już nie chce i czasu też nie mam za bardzo (hmm ale może jeszcze kiedyś mnie najdzie wena - chętnie bym w sumie urozmaicił środowisko.

Po lewej - sam dinozaur, a poniżej - w środowisku naturalnym z lekkim postprocessingiem w Photoshopie (Compositor z Blendera niestety nie dał rady bo nie mogłem pozbyć się białej otoczki z kanału alpha).

Oto i efekt końcowy - welociraptor w środowisku w którym go w ogóle nie powinno być :P

piątek, 6 kwietnia 2012

Projekt: Sphere Marching

Pierwszy test - kolorowanie po z oraz ilości kroków
Na kurs języka C++ piszę sobie projekcik - renderer oparty o ray marching, a dokładniej o technikę sphere tracing i distance fields. Technika to umożliwia m.in. proste renderowanie fraktali i CSG oraz niezwykle tanie do policzenia Ambient Occlusion.

Póki co dopiero zaczynam eksperymenty i muszę powiedzieć, że jest to bardzo rozwijające, tym bardziej, że wszystko piszę od zera sam (łącznie z operacjami wektorowymi) więc dużo się uczę.

Obecnie zaimplementowałem prymitywy: kulę, sześcian oraz torus, wraz z możliwością ich dodawania/usuwania/znajdowania części wspólnej. Mam też liczenie normalnych i teoretyczną obsługę AO oraz eksperymentuje z cieniowaniem Phonga.

Jak dogłębniej zapoznam się z tematem na pewno opiszę tą technikę od zera. Póki co - kilka ujęć WIP:
Oświetlenie Blinn-Phong + małe AO
CSG i normalne



poniedziałek, 2 kwietnia 2012

Programowanie na żywo i podróże w czasie

...and when I change the code I change his future!
Ostatnio zainteresował mnie parę kwestii związanych z wytwarzaniem oprogramowania, głównie gier i innych wizualnych aplikacji - a mianowicie możliwość zmieniania kodu w locie i obserwowanie jego wyników w czasie rzeczywistym a także - móc podróżować w czasie by łatwiej było debugować i eksperymentować (back-in-time debugging) - chyba każdy marzył by móc cofnąć wykonanie programu i podejrzeć zawartość zmiennych zanim nastąpił crash.

Jeśli myślisz, że to nierealne to obejrzyj ten niesamowity wykład Bret Victora - coś genialnego! Zastanawiam się czy byłbym w stanie stworzyć coś podobnego, ale nie w JS...

W każdym razie wydaje mi się to niezwykle interesujący kierunek rozwoju oferujący niesamowite możliwości i nie mogę się doczekać by rozwinął się w coś większego i wspanialszego - byłoby to z korzyścią dla wydajności jak i zwiększenia przyjemności z tworzenia.

Polecam zajrzeć również na stronę Breta Victora http://worrydream.com/ (fajne i ciekawe rzeczy!).

Przy okazji, m.in. Google pracuje nad Back-in-Time debugger



niedziela, 11 grudnia 2011

Stara gierka z gimnazjum

Dzisiaj znalazłem źródła mojej staarej gierki zrobionej w konsoli (C++ i WinAPI) w 2 klasie gimnazjum.
Dopiero uczyłem się programować obiektowo w C++ i alokować dynamicznie pamięć :)

Celem gry jest przejechanie jak największej ilości ludzików, omijając niebezpieczne płotki jadąc niezwykle wypasionym samochodem.
Grafika - ASCII art, migotająca bo nie ma podwójnego buforowania a sama rozgrywka jest za wolna - czego wtedy nie potrafiłem rozwiązać, a teraz mi się już nie chce ;)

Źródła do ściągnięcia tutaj, a jak ktoś chce pograć i nie chce mu się kompilować to plik wykonywalny jest tutaj.

wtorek, 6 grudnia 2011

Trochę zabawy z C++

Czasem gdy człowiekowi się nudzi, można zacząć wymyślać różne głupiutkie rzeczy. Poniżej poprawny kod w języku C++:
#define __ printf
#define guy int 
#define c(_) = { 0xBAD, 0xBAD, 0xBAD, 0xBAD} 
#define create 
#define with [4] 
#define and = 
#define ever ;;
guy x_X and 0xF00D; 

// ponizszy kod wypisuje w petli nieskonczonej BAD BAD F00D
while ("elvis is alive") // lub for(ever)
{ 
    long long ago = 2; 
    create guy o_O with c(_); 
    3[o_O] = x_X; 
    x_X =3 [o_O];
    o_O[ago--+--ago] = x_X; 
    while (x_X --> 0)__("%X ", (x_X%4)[o_O]);
};

Problem z iteratorem w szablonie

Załóżmy, że mamy kod jak poniżej:
template<typename T>
void foo()
{
  std::vector<t> vec;
  /// (...)
  for (std::vector<t>::iterator it = vec.begin(); it != vec.end(); ++it)
        bar(*it);
}
Jest to w miarę standardowy kod, który powinien działać od ręki. Teoretycznie. Dlaczego ten kod raz się skompiluje a raz nie i kompilator będzie miał problem z określeniem typu it?

Otóż nie wszystkie kompilatory są na tyle sprytne by określić co się tak naprawdę kryje pod szablonem. Wtedy musimy mu podpowiedzieć, że ma do czynienia z typem, czyli napisać:
typename std::vector<t>::iterator it
Wtedy zadowolimy kompilator :)

Na szczęście w C++11 można użyć przyjemnego słówka kluczowego auto, które powinno wybawić nas od takich problemów i uprzyjemnić życie, a jeśli nie możemy skorzystać z dobrodziejstw nowego standardu to lepiej mieć nawyk dopisywania typename.  Zwłaszcza jeśli spodziewamy się, że nasz kod będzie kompilowany na różnych kompilatorach (platformach).

Przy okazji będziemy mieć kolejny powód do narzekania czemu C++ jest fuj fuj :)