• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

dynamiczne oświetlenie sfml

Object Storage Arubacloud
0 głosów
261 wizyt
pytanie zadane 26 grudnia 2016 w C i C++ przez Pajdas Mądrala (5,930 p.)
Jestem w trakcie pisania programu / klas, które w przyszłości pomogą mi w umieszczeniu w programie "dynamicznego oświetlenia".

Program ma działać tak, że rysowane są pierścienie, czym dalej od 'źródła' światła tym ciemniejsze ( w sfml zrobiłem to tak sf::Color(0,0,0,i) - 'i' to parametr pętli for )

Zauważyłem jednak małą lukę w moim myśleniu, dwa źródła światła się nie dodają tylko zakrywają, nie mam pomysłu jak temu zaradzić. Proszę o podpowiedź, albo o w ogóle inny sposób rozwiązania problemu i naprowadzenie na poprawny sposób myślenia.

1. Jak mam zaradzić na ten problem?

2. Jak wygląda działanie dynamicznego oświetlenia w bibliotekach przystosowanych do tego oraz w grach trójwymiarowych?

2 odpowiedzi

+2 głosów
odpowiedź 26 grudnia 2016 przez Knayder Nałogowiec (37,640 p.)
wybrane 26 grudnia 2016 przez Pajdas
 
Najlepsza

Spróbuj to może zrobić trochę inaczej. Nie rysuj pierścieni, tylko zaczynając od koła o promieniu 1, rysuj do koła o rozmiarze np. 20. Każdy z tych kół niech ma np. kolor sf::Color(255,255,255,1).
W ten sposób dostaniesz coś na kształt punktu światła.
Tutaj masz przykładową klasę. Wystarczy stworzyć obiekt tej klasy i narysować go funkcją window.draw(light);

http://pastebin.com/VZQhpVpv
http://pastebin.com/T6ckP7Sf

PS. Kolory lekko przezroczyste nakładają się na siebie w SFML.

komentarz 26 grudnia 2016 przez Pajdas Mądrala (5,930 p.)
przemyślę i przeanalizuję, dziękuję za odpowiedz
komentarz 26 grudnia 2016 przez Pajdas Mądrala (5,930 p.)
No dobra, wszystko gra jak powinno, ale mam jeszcze jedno małe pytanie, jak mam w takim przypadku zastosować cień

A poza tym jak obliczyć zasięg cienia oraz jak rozwiązać problem kiedy z dwóch stron figóry znajduje się źródło światła
komentarz 26 grudnia 2016 przez Knayder Nałogowiec (37,640 p.)
To to już nie jest takie proste. Musisz wyznaczać wierzchołki obiektów na które ten cień pada itp.
Niestety tego jeszcze nie potrafię, więc musisz pokombinować na własną rękę, no chyba że ktoś ci tutaj pomoże.
Pozdrawiam.
0 głosów
odpowiedź 26 grudnia 2016 przez jegor377 Stary wyjadacz (13,230 p.)

Jak masz dwa sprity, to tam gdzie piksele mają wspólne pozycje, to musisz dodać do siebie ich kolory. Tak jest w Godot'cie z tego co widzę (Pisze tutaj, że wykonuje operacje add, czyli dodaj, ale tam można ją zmienić na xor lub inne, więc polecam Ci to tak mądrze zaimplementować. ;) ).

Zresztą, to zdjęcie tłumaczy więcej niż ja mogę Ci wytłumaczyć:

Scale to wielkość/zasięg, energy czyli siła z jaką ma przykrywać danych obiekt (coś jak kanał alpha [Właśnie, możesz to też zrobić poprzez kanał alpha ;)] ), a mode to właśnie to w jaki sposób ma się mieszać z innymi pikselami na ekranie. Jak dasz xor to będzie jakby miejsce światła to była sepia czy inny filtr lub coś takiego..

komentarz 26 grudnia 2016 przez Pajdas Mądrala (5,930 p.)

ale właśnie jak to dodać, obliczać natężenie każdego pixela?

to tam gdzie piksele mają wspólne pozycje

komentarz 26 grudnia 2016 przez jegor377 Stary wyjadacz (13,230 p.)
piksel[x] ze sprita y posiada trzy składowe: r, g, b. Tak samo w spricie z. Tam gdzie piksele na ostatecznym spricie (buforze) mają być narysowane, tam masz dodać do siebie składowe r, g, b i wynik narysować: return pixel{sx[x].r + sy[x].r, sx[x].g + sy[x].g, sx[x].b + sy[x].b}; Tylko, że ja się mogę mylić, ale warto spróbować. Szczerze, to sam do końca nwm jak to się robi, ale na 70% wydaje mi się, że właśnie tak to działa.

Podobne pytania

0 głosów
1 odpowiedź 576 wizyt
0 głosów
1 odpowiedź 126 wizyt
pytanie zadane 23 kwietnia 2021 w Offtop przez mattaha Użytkownik (690 p.)
0 głosów
0 odpowiedzi 246 wizyt

92,579 zapytań

141,428 odpowiedzi

319,654 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...