Gra sterowana kamerą - bieg po farbę

02.07.2017 - Filip Mróz
TrudnośćTrudność

Wzmocnienie koloru farby

Zanim przejdziemy do głównego tematu artykułu, poprawimy pewną niedogodność poprzedniej wersji gry. Chodzi o to, że kolor farby, którą malujemy płot, może być nie dość wyraźny, co utrudnia zorientowanie się, które obszary zostały już pomalowane.

Gotowy kod z tej części można znaleźć w paczce ze źródłami w katalogu: Wersja_2_Kolor

Problemem jest to, że używany kolor jest w naszej wymyślonej przestrzeni RGB*. Oznacza to, że suma jego składowych jest równa tylko 255, przez co sam kolor może być mało wyrazisty:

Kolor(68,87,100) o sumie składowych 68+87+100 = 255

Taki kolor może w dużym stopniu zlewać się z otoczeniem, dlatego postaramy się go wzmocnić.

Dopiszmy deklarację metody wzmocnijKolor w PrzetwarzanieObrazow.h:
static Vec3b wzmocnijKolor(Vec3b piksel);
PrzetwarzanieObrazow.h

Chcemy zwiększyć sumę składowych, równocześnie zachowując między nimi proporcje. Zrobimy to znajdując taką liczbę, że gdy przemnożymy przez nią składowe, co najmniej jedna z nich będzie bliska 255:

Vec3b PrzetwarzanieObrazow::wzmocnijKolor(Vec3b piksel) {
    double mnoznik = min(255.0/piksel[0],min(255.0/piksel[1],255.0/piksel[2]));
    piksel[0] = piksel[0] * mnoznik;
    piksel[1] = piksel[1] * mnoznik;
    piksel[2] = piksel[2] * mnoznik;
    return piksel;
}
PrzetwarzanieObrazow.cpp

Sprawdźmy jak po takim "wzmocnieniu" będzie wyglądał kolor, z którym mieliśmy problem:

Kolor(173,221,254) o sumie składowych 173+221+254 = 648

Efekt jest zadowalający, więc wykorzystamy ten sposób podczas ustawianiu koloru farby w metodzie StanGracza ustawParametryPedzla:

PrzetwarzanieObrazow::wyliczDobreParametry(pedzel,kolor,wartoscGraniczna);
stanMalowania.kolor = PrzetwarzanieObrazow::wzmocnijKolor(kolor);
stanMalowania.przetwarzanieObrazow.kolor = kolor;
StanGracza.cpp

Po tej krótkiej dygresji powróćmy do głównego tematu, czyli stworzenia nowego etapu gry.

0
Twoja ocena: Brak

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com