Książka o podstawach grafiki komputerowej

0

Hej.
Istnieje ksiażka traktująca o programowaniu grafiki komputerowej jako takiej? Bez żadnych wspomagaczy jak OpenGL i niedomówień jak w wielu innych przypadkach? Interesuje mnie czysty kod. Wiem do czego służy anti-aliasing, jaką rolę grała mgła w starych tytułach gier, czym są sprite'y, Vectory a nawet znam niektóre metody osiągnięcia bardzo prostego rozmycia oświetlenia punktowego, wiem bo sam po dłuższym czasie do tego doszedłem ale nie uniknąłem przy tym błędów których optymalizacja jest dla mnie zbyt zawiła. Chciałbym poznać taką książkę która wskaże mi odpowiednią drogę. Tego typu literatury brakuje. I proszę, nie pytajcie dlaczego tak, a nie inaczej. Jeżeli ktoś uczył się w liceum pascala a w domu ogarniał na własną rękę wstawki assembler'owe to propopowanie mu przestawienia na coś mniej monolitycznego jest w tym przypadku nie na miejscu. Kurde, nawet napisałem własny modeler na amidze, ale Poligony to szczyt moich umiejętności. Niby jest książka Abrasha z lat 90 ale wolałem najpierw zorientować się w temacie tutaj. Książka nie musi być po Polsku ale było by miło gdyby była chociaż po angielsku. Tylko błagam, zadnego OpenGL'a. :)

2

Po polsku jest bieda z nędzą na temat teorii, pomijając pozycje o OpenGL/DirectX, których jest całkiem sporo, tak poza tym są jedynie starocie, jak "Wprowadzenie do grafiki komputerowej" (Foley i inni) oraz "Grafika komputerowa" (Jankowski). Z racji daty wydania, nie omawiają one oczywiście nowoczesnego potoku graficznego, opisują na przykład grafikę rastrową (jak algorytm Bresenhama) i podstawy algebry macierzy (co akurat jest przydatne).

Nowsze pozycje nie związane z żadnymi konkretnymi technologiami są bodajże dwie, ale wyspecjalizowane

  • "Podstawy modelowania krzywych i powierzchni" Kiciaka - tylko o modelowaniu krzywych i płatów, Książka ściśle matematyczna, zasypana masą wzorów. Raczej jako uzupełnienie, a i to tylko dla zainteresowanych.
  • "Animacja komputerowa" Parenta - to książka ściśle akademicka, to jest zamiast opisywać jak coś praktycznie zrobić opisuje raczej z lotu ptaka stan badań, cytując przy tym mnóstwo literatury. Z punktu widzenia programisty, raczej nieprzydatna

Jeszcze "Ray tracing obiektowo zorientowany z przykładami" (https://archiwum.allegro.pl/oferta/ray-tracing-obiektowo-zorientowany-z-przykladami-i7295864593.html) jest ciekawym starociem - autor nie opierając się na żadnej bibliotece pisze własny ray-tracer od podstaw, co też jest kształcące, aczkolwiek
a) biały kruk, książka ciężko dostępna
b) niestety, stosunkowo niewiele teorii, zamiast tego większość objętości zajmują listingi w C++, który by trzeba przepisać (chyba, że gdzieś się poniewierają w Internecie)
c) antyczny C++
c) lepiej chyba po prostu znaleźć jakiś kurs ray-castingu w Necie (pierwszy z brzegu https://permadi.com/1996/05/ray-casting-tutorial-table-of-contents/)

Tak że, jak nie chcesz OpenGL-a (czy DirectX-a) to nie ma szans uciec przed źródłami angielskimi. Co zatem mogę podrzucić:

W każdym razie, jeżeli chodzi o czystą teorię, to taką sztandarową, pozycją jest "Real time rendering" (https://www.amazon.com/Real-Time-Rendering-Fourth-Tomas-Akenine-M%C3%B6ller/dp/1138627003 - te negatywne oceny to chyba wynikają ze słabej jakości druku, wydanie 3 ma już daleko lepszą średnią).

Ale ogólnie bym polecił nie traktować OpenGL-a jak wspomagacza, bo w dzisiejszych czasach trend jest właśnie odwrotny, że jest on aż zbyt niskopoziomowy, a gry teraz każdy pisze w silnikach, jak Unity i Unreal (które tak naprawdę i tak pod spodem hulają na OpenGL/DirectX/Vulkan). Nikt obecnie nie pisze własnej implementacji obcinania bryły widoku, bo układy scalone w kartach graficznych robią to same miliony razy szybciej, a jaż już ktoś próbuje, to raczej żeby zrozumieć teorię, która się za tym kryje. Grafiki można się wygodnie uczyć albo po prostu biorąc sobie jakiś renderer (jak BFGX albo dziadek Ogre) i eksperymentując, albo pisząc taki samemu od zera w OpenGL-u (przejrzyj kurs https://learnopengl.com/ - warto przeglądnąć).

1

To co mam pod ręką (niekoniecznie najlepsze, na razie w kolejce do przeczytania):

  • Mathematics for Computer Graphics And Game Programming - D. Kothari, G. Awari, D. Shrimankar, A. Bhende - grafika komputerowa od zupełnych podstaw (dotyka nawet fizycznego rozłożenia pikseli na matrycy)
  • The Ray Tracer Challenge - Jamis Buck - budowanie swojego ray-tracera od podstaw
  • Python Graphics - B.J. Korites - chyba najbardziej praktyczna z tych trzech, trochę teorii, trochę Pythona - wykresy matematyczne, bryły 3D i grafika ogólnie
0

Z góry dziękuję Ci za sugestie. Teraz moja bibliografia:
Więc tak...
Real time Ray Tracing
Amiga machine language
Podstawy programowania grafiki 3D - (Polska) Janusz Garncarz bodajże. sama książka stosunkowo nowa, nawet preorder udało mi się złapać. Sam autor jest hipokrytą bo tytuł sugeruje że książka mnie wprowadzi do tematu podxzas gdy od samego początku oczekuje wiedzy i nawet nie ma tam nic o konfiguracji biblioteki, same funkcje i tym podobne ale tutaj z pomocą przyszła mi strona www.kurs-opengl.com którą dzisiaj można znaleźć na archive.org.
No i oczywiście Tworzenie Gier 2D i 3D w języku Turbo Pascal (Polska) - Piotr Besta. Nazwa myląca bo sugerująca że TP to nie IDE ale w tym przypadku to jedyne co mogę jej wybaczyć. Sama księga wyszła zaraz po wypuszczeniu pierwowzoru OS'a z trybem chronionym co całkowicie dyskwalifikowało przyszłych twórców którzy mieli w książce doczynienia z trybem rzeczywistym (mowa o strukturze procesorów klasy PC). To z tej książki nauczyłem się stworzyć pierwszą grę skoro już o tyam mowa. Wszystko prosto omówione w szczególach a przykłady takie zwięzłe że przepisywać je bez wcześniejszych ćwiczeń to skandal. Jest tam o wszystkim czego potrzeba. Jedyna biblioteka pomocnicza z jakiej autor korzysta to BGI (Borland graphic interface) i to tylko w pierwszym rozdziale po to by wprowadzić czytelnika do tematu w przystępny sposób i dodatkowo zachęcić dla motywacji. Jest tam o trybach graficznym, systemach liczbowych, współrzędnych kartezjańskich, dźwięku wytłumaczonym w każdym hz'u i oczywiście 3D ale głównie czym są poligony jak je transformować jak zasłaniać obiekty innymi jeśli chodzi o rzut perspektywiczny (kamera) i tym podobne. W skrócie to trzeba wiedzieć zeby stworzyć Mesa (nie mylić z Vesa) albo OpenGL'a właśnie.
Oczywiście lektury informatycznej mam za sobą więcej ale to nie na ten temat a i tak podałem tylko bibliografii tyle ile pamietam na tą chwilę.
Krótko mówiąc potrzebuję poszerzyć wiedzę o to co można uzyskać w samym OpenGL'u skoro już o nim mówimy tzn. Poznać jak buduje się funkcje które są m.i w tej bibliotece a nie jak je wywołać za jej pomocą. Nie od razu rzym zbudowano a choć openiaka tworzyło kilka najwiekszych firm komputerowych m.i silicon graphics to jakoś się za to zabrali. Przecież te gry z lat 90 wykorzystywały te techniki i nie korzystały przy tym z Vulcan'a.
I żeby nie było. Próbowałem dołączyć tego cholernego Opena lazarusem ale kurde nie potrafię, no i nie mam pewności czy to się uda na takiej Amidze (chodzi o kompatybilność wsteczną) bo co prawda wystarczy znać składanie wstawek asma dla jej procesora ale z tego co wiem to OpenGL jest multi-platformowy ale nie aż tak i ciężko byłoby zsynchtonizować oba kody nie znając tego drugiego a o to mi właśnie chodzi. Swoją drogą ja nie chcę robić gry i nie potrzebuje programików dla dzieci do robienia ich korzystając z jakiś poradników bo sami widzicie co za badziewia wypuszczają. Jeśli już o UNITY mowa to jedyne co mnie ciekawiło z tej bajki to Slender o którym w gimbie się nasłuchałem a jak przyszło co do czego to sami chyba kojarzycie. Nie ma co porównywać do pierwszym Silent Hill'a na ktorym się wychowałem. UE poza tournamentem z tego co grałem stworzyło Life is strange które zniszyłosystem a i nawet w tym przypadku użyli trójeczki silnika zamiast czwórki bo lepiej znali te środowisko. Zaś CryEngine skończył siętak szybko jak się zaczął, czyli Far Cry 1. ect...
Jak miałbym robić grę to nie jakieś *@%&o tylko spróbowałbym zrobić takiego silent Hill'a w trybie 13h o rozdzielczości 320x200pi na VGA i RGB tylko muszę potrafić zrobić tą cholerną mgłę.
Mieżmy siły na zamiary i z czym do ludzi.
P. S:Twoje propozycje są interesujące i mam nadzieję że znajdę coś dla siebie(...) może uda mi się zaprogramować choćby cień.
Jestem otwart na dalsze sugestie i temat zostawiam dla potomnych.
Podpisano:Mateusz Wolarz.

0

@vpiotr: Mordo, nie wiem czemu akurat tę książkę zignorowałem trzy godziny temu jak szukałem źródła wiedzy ale to był błąd. Przeczytałem spis treści i tam jest dokładnie to czego potrzebuję. Książka jest jeszcze dostępna u zagranicznych dystrybutorów choć do tanich nie należy ale jestem w stanie się poświęcić. Oczywiście przed zakupem poczekam do "dziesiątego" który w tym miesiącu wypada ósmego jeśli wieci co jest pięć ale w miedzy czasie podpytam cię o parę rzeczy. Z jakiego języka programowego korzysta autor? Czy OBJ to faktyczny format z jakiego rzekomo korzysta? W jakim stopniu zaawansowania uczy zagadnień typu anty aliasing? Czy obszernie wyjaśnia arytmetykę składową? Jak się ma sprawa z cieniami? Wspomina o mgle? Czy korzysta z bibliotek pobocznych? Czy posługuje się przystępną terminologią? Czy wymaga wstępnej znajomości czegoś o czym mógłbym nie wiedzieć? I proszę ani słowa o OpenGL.
Jak już to ogarnę, przepisuję na Pascala i łącze z Asm'em.

0

@Steve37:

Steve37 napisał(a):

@vpiotr: Mordo, nie wiem czemu akurat tę książkę zignorowałem trzy godziny temu jak szukałem źródła wiedzy ale to był błąd.

Którą?

1
Steve37 napisał(a):

Czy OBJ to faktyczny format z jakiego rzekomo korzysta? W jakim stopniu zaawansowania uczy zagadnień typu anty aliasing? Czy obszernie wyjaśnia arytmetykę składową? Jak się ma sprawa z cieniami? Wspomina o mgle? Czy korzysta z bibliotek pobocznych? Czy posługuje się przystępną terminologią? Czy wymaga wstępnej znajomości czegoś o czym mógłbym nie wiedzieć? I proszę ani słowa o OpenGL.

Tak, wspomina o formacie OBJ, jest o tym kilka paragrafów.
Jeśli chodzi o inne pytania, to jak napisałem wyżej - nie czytałem.

0

Jak miałbym robić grę to nie jakieś *@%&o tylko spróbowałbym zrobić takiego silent Hill'a w trybie 13h o rozdzielczości 320x200pi na VGA i RGB tylko muszę potrafić zrobić tą cholerną mgłę.

Techniki renderowania mgły są w pierwszym lepszym tutorialu o shaderach do OpenGL. Odrzucając materiały o OpenGL, odrzucasz masę gotowych recept.

Jak się ma sprawa z cieniami?

Tak samo. Ładnie wyjaśnione, z rysunkami, jak zrobić cienie:
https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping
To jest po prostu opis techniki, tricku opartego na technice renderowania (poza ekranem) sceny z pozycji światła, a potem brania z-buforu i przeliczania odległości od światła danego punktu. To bardziej ogólny algorytm i matematyka. A to, że jest to robione w OpenGL to szczegół techniczny.

Ogólnie nie warto się zamykać na materiały, nawet jeśli dotyczą one innych technologii.

1

Odgrzewam temat sprzed 2 miesięcy, bo natknąłem się na książeczkę chyba pasującą do tematu. Treść jest dostępna on-line.
https://gabrielgambetta.com/computer-graphics-from-scratch/

1 użytkowników online, w tym zalogowanych: 0, gości: 1