commit da08ed069b8b4c6f575ded27dbcb1bf0ca9e6b93 Author: ZoltyKaplan Date: Mon May 18 16:40:38 2026 +0200 Initial QAML question data diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..8622dbd --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,17 @@ +## Co zmieniasz? + +- [ ] poprawiam treść pytania +- [ ] poprawiam odpowiedź +- [ ] dodaję nowe pytanie +- [ ] dodaję/zmieniam obrazek w `img/` +- [ ] usuwam duplikat albo błąd + +## Źródło / uzasadnienie + +Opisz krótko skąd pochodzi poprawka albo dlaczego obecna wersja jest błędna. + +## Checklist + +- [ ] każde pytanie i każda odpowiedź mieści się w jednej linii +- [ ] każda odpowiedź zaczyna się od `-` albo `-|` +- [ ] obrazki użyte jako `img/...` istnieją w repozytorium diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..9e8ee56 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,14 @@ +name: Validate QAML + +on: + pull_request: + push: + branches: [main] + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Validate pytania.txt + run: php tools/validate_qaml.php pytania.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b0adfa1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +ip.txt +ip.txt.old +*.log +*.bak +*.old +.DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0e163d2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Jak zgłaszać poprawki + +Poprawki zgłaszamy przez Pull Request. + +Najczęstsze dobre zmiany: + +- poprawienie literówki, +- oznaczenie prawidłowej odpowiedzi jako `-|`, +- usunięcie błędnej odpowiedzi, +- dopisanie źródła w komentarzu `//`, +- dodanie brakującego obrazka do `img/`. + +Nie zmieniaj formatu pliku na pełny Markdown, JSON, CSV ani HTML. To repozytorium używa prostego formatu QAML opisanego w `README.md`. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bc843dd --- /dev/null +++ b/README.md @@ -0,0 +1,203 @@ +# Baza pytań quizu + +To repozytorium zawiera dane quizu: `pytania.txt` oraz opcjonalny katalog `img/` z obrazkami używanymi w pytaniach. + +Kod aplikacji nie jest częścią tego repozytorium. Zmiany w pytaniach należy zgłaszać przez Pull Request. + +## QAML — Question Answer Markdown Lines + +QAML to prosty liniowy format zapisu pytań testowych wielokrotnego wyboru. + +Format wygląda jak Markdown, ale jego składnia strukturalna jest znacznie prostsza. Parser nie analizuje pełnego Markdowna. Interpretuje wyłącznie początki linii: + +- linia pytania, +- linia odpowiedzi błędnej, +- linia odpowiedzi poprawnej, +- komentarz, +- pusta linia. + +Treść pytania i odpowiedzi może zawierać Markdown, HTML oraz inline LaTeX, ale parser traktuje je jako zwykły tekst. + +## Minimalny przykład + +```text +// Przykładowa sekcja + +Zaznacz zdania prawdziwe +- To jest odpowiedź błędna. +-| To jest odpowiedź poprawna. +- To jest kolejna odpowiedź błędna. + +Ile wynosi $2 + 2$? +- 3 +-| 4 +- 5 +``` + +## Reguły składni + +### 1. Pytanie + +Pytaniem jest każda niepusta linia, która: + +- nie zaczyna się od znaku `-`, +- nie zaczyna się od `//`. + +Pytanie musi mieścić się w jednej linii. + +Poprawnie: + +```text +Zaznacz zdania prawdziwe dotyczące indukcji matematycznej. +``` + +Niepoprawnie: + +```text +Zaznacz zdania prawdziwe +dotyczące indukcji matematycznej. +``` + +Drugi zapis zostanie zinterpretowany jako dwa osobne pytania. + +### 2. Odpowiedź błędna + +Odpowiedź błędna zaczyna się od pojedynczego myślnika `-`. + +Poprawne są oba style: + +```text +- Odpowiedź błędna +-Odpowiedź błędna +``` + +Parser usuwa znak `-`, a następnie przycina białe znaki z początku i końca odpowiedzi. + +### 3. Odpowiedź poprawna + +Odpowiedź poprawna zaczyna się od `-|`. + +Poprawne są oba style: + +```text +-| Odpowiedź poprawna +-|Odpowiedź poprawna +``` + +Parser usuwa prefiks `-|`, a następnie przycina białe znaki z początku i końca odpowiedzi. + +### 4. Pytania jednokrotnego i wielokrotnego wyboru + +Format dopuszcza dowolną liczbę poprawnych odpowiedzi, w tym zero poprawnych odpowiedzi albo wszystkie odpowiedzi poprawne. + +Pytanie jednokrotnego wyboru: + +```text +Ile wynosi $2 + 2$? +- 3 +-| 4 +- 5 +``` + +Pytanie wielokrotnego wyboru: + +```text +Wskaż liczby pierwsze +-| 2 +-| 3 +- 4 +-| 5 +``` + +Parser nie narzuca liczby poprawnych odpowiedzi. Zero poprawnych odpowiedzi może oznaczać zadanie, w którym żadna odpowiedź nie jest prawdziwa, a oznaczenie wszystkich odpowiedzi jako `-|` może oznaczać zadanie, w którym wszystkie odpowiedzi są prawdziwe. + +### 5. Komentarze + +Komentarzem jest linia zaczynająca się od `//`. + +Przykłady: + +```text +// Sterna 2024/2025 B +// Formanowicz 2021-2022 +``` + +Komentarze są ignorowane przez parser demonstracyjny. Można ich używać jako nagłówków sekcji, źródeł, dat albo notatek. + +### 6. Puste linie + +Puste linie są ignorowane. Można ich używać do oddzielania pytań, odpowiedzi lub sekcji. + +## LaTeX + +Dozwolony jest inline LaTeX między pojedynczymi znakami dolara: + +```text +Ile wynosi $\binom{n}{k}$? +``` + +Dozwolony przykład: + +```text +-| Liczba kombinacji wynosi $\binom{n}{k}$. +``` + +Nie jest częścią formalnej składni: + +```text +$$ +a^2 + b^2 = c^2 +$$ +``` + +oraz: + +```text +\[ a^2 + b^2 = c^2 \] +``` + +Parser demonstracyjny nie waliduje poprawności LaTeX-a. Traktuje zapis `$...$` jako zwykły fragment tekstu. + +## HTML i obrazki + +HTML jest dopuszczony jako część treści pytania lub odpowiedzi. + +Przykład: + +```text +Zaznacz funkcję odpowiadającą obrazkowi +-| $f(x) = x^2$ +- $f(x) = x$ +``` + +Jeżeli `pytania.txt` odwołuje się do obrazka przez `img/...`, plik musi istnieć w katalogu `img/` w tym repozytorium. + +## Jedna linia = jeden element + +To najważniejsza zasada formatu. + +Każde pytanie i każda odpowiedź muszą mieścić się w jednej fizycznej linii. + +Poprawnie: + +```text +Zaznacz zdania prawdziwe dotyczące funkcji $f(x) = x^2$. +-| Funkcja jest parzysta. +- Funkcja jest nieparzysta. +``` + +Niepoprawnie: + +```text +Zaznacz zdania prawdziwe dotyczące funkcji +$f(x) = x^2$. +-| Funkcja jest parzysta. +``` + +Parser potraktuje drugą linię jako nowe pytanie. + +## Walidacja lokalna + +```bash +php tools/validate_qaml.php pytania.txt +``` diff --git a/img/liczba_zwojow_p.png b/img/liczba_zwojow_p.png new file mode 100644 index 0000000..1ec1a9f Binary files /dev/null and b/img/liczba_zwojow_p.png differ diff --git a/img/trojkat_phong.png b/img/trojkat_phong.png new file mode 100644 index 0000000..7dd4bde Binary files /dev/null and b/img/trojkat_phong.png differ diff --git a/img/trojkat_phong_vertex_shader.png b/img/trojkat_phong_vertex_shader.png new file mode 100644 index 0000000..f9ebb20 Binary files /dev/null and b/img/trojkat_phong_vertex_shader.png differ diff --git a/img/trojkat_swiatlo_stozkowe_vertex.png b/img/trojkat_swiatlo_stozkowe_vertex.png new file mode 100644 index 0000000..c003442 Binary files /dev/null and b/img/trojkat_swiatlo_stozkowe_vertex.png differ diff --git a/pytania.txt b/pytania.txt new file mode 100644 index 0000000..61bde54 --- /dev/null +++ b/pytania.txt @@ -0,0 +1,358 @@ +// BAZA PYTAŃ - GRAFIKA I WIZUALIZACJA + +// Plik: Grafika 2021 dysk INF PP'19 + +Dwuwymiarowe współrzędne homogeniczne składają się z: +- 2 liczb +-| 3 liczb +- 4 liczb + +Współrzędne trójwymiarowe otrzymuje się z homogenicznych przez: +- rozwiązanie problemu Rungego-Kutty w przestrzeni homogenicznej +-| podzielenie $x$, $y$ i $z$ przez $w$ +- podzielenie $x/w$, $y/w$ i $z/x$ + +Czy współrzędne homogeniczne mogą mieć współrzędną $w = 0$? +-| tak, tylko to nie są wtedy współrzędne punktu, tylko wektora +- nie, bo nie wolno dzielić przez zero +- nie, bo zgodnie z definicją $w$ musi być różne od 0 + +Niech $n$ będzie wektorem normalnym w przestrzeni modelu, $a$ współrzędną wierzchołka modelu, a $p$ współrzędną źródła światła w przestrzeni oka. Dane są również macierze $P$, $V$ i $M$. Które wzory są poprawne? +-| $I = p - VMa$, $v = [0,0,0,1]^T - VMa$ +- $I = V^{-1}p - Ma$, $v = V^{-1}[0,0,0,1]^T - Ma$ +- $I = PVp - PVMa$, $v = P[0,0,0,1]^T - PVMa$ + +Przestrzeń oka to przestrzeń: +-| wspólna przestrzeń dla wszystkich modeli, w której kamera znajduje się w początku układu współrzędnych +- w której model znajduje się na początku układu współrzędnych, a jego położenie, rozmiar i orientacja są opisane lokalnie +- wspólna przestrzeń dla wszystkich modeli, w której kamera nie musi znajdować się w początku układu współrzędnych + +Kolejność przetwarzania przestrzeni to: +- modelu, oka, świata, przycięcia +- oka, świata, przycięcia, modelu +-| modelu, świata, oka, przycięcia + +Za pomocą procedury glm::lookAt można wyliczyć macierz: +- rotacji +- rzutowania +-| widoku + +Które z poniższych zdań jest prawdziwe? +- Dowolnych dwóch operacji obrotu nie można zamieniać kolejnością, bo wynik zawsze będzie inny +-| Dwóch operacji obrotu nie można zamieniać w większości wypadków kolejnością, bo wynik będzie inny +- Dwie operacje obrotu można wykonać w dowolnej kolejności i wynik będzie taki sam + +Z-Fighting to — zaznacz błędną odpowiedź: +- Błąd występujący przy ukrywaniu niewidocznych powierzchni wynikający ze zbyt małej precyzji bufora głębokości. +- Błąd występujący przy ukrywaniu niewidocznych powierzchni wynikający z nieliniowego odwzorowania współrzędnej $Z$ przy przejściu z przestrzeni oka do znormalizowanej przestrzeni urządzenia. +-| Błąd występujący przy ukrywaniu niewidocznych powierzchni wynikający ze źle zdefiniowanych wektorów normalnych powierzchni. + +Wektor styczny: +- jest wektorem łączącym dwa wybrane wierzchołki na modelu +-| jest prostopadły do wektora normalnego +- jest styczny do wektora normalnego + +Wektor prostopadły do powierzchni pomnożony razy macierz $M$ jest prostopadły do powierzchni poddanej tej samej transformacji: +- zawsze +- tylko jeśli macierz nie zawiera skalowania +-| tylko jeśli macierz nie zawiera skalowania nieproporcjonalnego + +Kość w animacji szkieletowej to: +-| abstrakcyjny obiekt reprezentowany przez rotację oraz przesunięcie względem kości wyżej w hierarchii; wierzchołki modelu są powiązane z kością i podlegają tym samym transformacjom co kość +- model w postaci walca lub stożka, do którego przyczepione są wybrane wierzchołki animowanego modelu +- kształt reprezentujący fragment modelu podczas symulacji fizyki + +Inverse kinematics to: +- odtwarzanie animacji szkieletowej od tyłu +-| obliczanie układu kości szkieletu na podstawie oczekiwanego efektu końcowego +- obliczanie współrzędnych wierzchołków na podstawie układu kości + +Światło punktowe to: +-| idealne źródło światła zajmujące dokładnie jeden punkt w przestrzeni, które świeci z jednakową intensywnością w każdym kierunku +- mocno skupione światło, na przykład laser +- światło o ograniczonym zakresie kierunków świecenia, oświetlające tylko kilka punktów + +Światło stożkowe to: +- światło promieniowe lub powierzchniowe o kształcie stożka +-| światło punktowe, które świeci tylko w obrębie stożka, a nie w każdym kierunku +- światło odbite od powierzchni i rozproszone w ramach stożka dookoła wybranego wektora + +Miękkie cienie są: +- efektem symulacji fizycznej obiektów plastycznych +- błędem wynikającym z tego, że modele oświetlenia są tylko przybliżeniem faktycznego zachowania światła +-| efektem wynikającym z zastosowania powierzchniowych źródeł światła + +Zgodnie z modelem Phonga światło odbite w kierunku obserwatora jest proporcjonalne do: +- kąta między wektorem odbitym i wektorem do obserwatora +- odwrotności kąta między wektorem odbitym i wektorem do obserwatora +-| kosinusa kąta pomiędzy wektorem odbitym i wektorem do obserwatora + +Model Phonga-Blinna różni się od modelu Phonga, gdyż: +- zastąpiono w nim iloczyn skalarny wektorów normalnego i w pół drogi iloczynem skalarnym wektorów obserwatora i odbitego +-| zastąpiono w nim iloczyn skalarny wektorów do obserwatora i odbitego iloczynem skalarnym wektorów normalnego i w pół drogi +- zastąpiono w nim iloczyn skalarny wektorów do obserwatora i odbitego iloczynem skalarnym wektorów normalnego i do światła + +Powierzchnia izotropowa to powierzchnia: +- radioaktywna; uwzględnienie interferencji promieniowania gamma z widzialnymi częstotliwościami świetlnymi pozwala na uzyskanie bardziej realistycznych wyników +-| rozpraszająca światło jednakowo w każdym kierunku +- rozpraszająca światło różnie w różnych kierunkach + +Ray tracing: +-| to algorytm generowania obrazów scen trójwymiarowych poprzez śledzenie promieni świetlnych odbijających się i załamujących się w scenie +- to algorytm rysowania voxeli +- to algorytm rysowania promieni słonecznych + +Promień załamany to promień: +- zaczynający się w punkcie cieniowanym o kierunku wyznaczonym przez dowolny wektor spełniający prawo Snella +-| zaczynający się w punkcie cieniowanym o kierunku wyznaczonym przez wektor leżący w tej samej płaszczyźnie co promień padający i normalna oraz spełniający prawo Snella +- zaczynający się w punkcie cieniowanym o kierunku wyznaczonym przez wektor leżący w tej samej płaszczyźnie co wektor do światła i spełniający prawo Snella względem wektora odbitego + +Promień główny to: +- dowolny promień przechodzący przez środek piksela +- pierwszy promień z wielu wystrzelony z piksela przy antyaliasingu statystycznym +-| promień reprezentujący ścieżkę, którą podróżował promień świetlny trafiający w oko obserwatora + +Liczba zwojów w punkcie $P$ wynosi: +- 2 +-| 0 +- -2 + +Fragment shader to: +- program wyliczający wszystkie kolory pikseli wchodzących w rysunek modelu +-| program wyliczający kolor jednego piksela, uruchamiany w wielu instancjach, po jednej dla każdego wygenerowanego fragmentu +- program wyliczający kolory wszystkich widocznych pikseli modelu + +Potrójne buforowanie pozwala na: +-| ukrycie procesu rysowania sceny +- lepsze wykorzystanie pamięci cache karty graficznej +- synchronizację odświeżania ekranu z procesem rysowania sceny + +Trójkąt na rysunku oświetlony jest punktowym źródłem światła w sposób przedstawiony na rysunku i cieniowany zgodnie z modelem Phonga zaimplementowanym w vertex shaderze. Czy na trójkącie, po narysowaniu go na ekranie, pojawi się plamka odbicia światła? +- Nie, ale to tylko kwestia mocy obliczeniowej; kiedy pojawią się mocniejsze karty graficzne, to wtedy na pewno plamka się pojawi +- Tak, gdyż stosowana jest nieliniowa interpolacja oświetlenia pomiędzy wierzchołkami +-| Nie, gdyż stosowana jest liniowa interpolacja oświetlenia pomiędzy wierzchołkami + +Otoczkowanie w kontekście ray tracingu to: +- rysowanie krawędzi obiektów w cieniowaniu kreskówkowym +- tworzenie wypukłej otoczki bryły +-| metoda optymalizacji testowania przecięcia promienia z obiektem + +Z-bufor służy do: +-| rozwiązania problemu niewidocznych powierzchni +- buforowania sekwencji operacji wykonywanych przez OpenGL w celu optymalizacji czasu renderowania obrazu +- buforowania danych odczytywanych z tekstur w celu przyspieszenia czasu renderowania obrazu + +Trójkąt na rysunku oświetlony jest punktowym źródłem światła w sposób przedstawiony na rysunku i ocieniowany zgodnie z modelem Phonga zaimplementowanym w vertex shaderze. Czy na trójkącie, po narysowaniu go na ekranie, pojawi się plamka odbicia światła czy nie? +- Nie, ale to tylko kwestia mocy obliczeniowej. Kiedy pojawi się GeForce 12000GRTX, to wtedy na pewno okrąg się pojawi +- Tak, gdyż stosowana jest nieliniowa interpolacja oświetlenia pomiędzy wierzchołkami +-| Nie, gdyż stosowana jest liniowa interpolacja oświetlenia pomiędzy wierzchołkami + +Z-Buffer służy do: +-| rozwiązania problemu niewidocznych powierzchni +- buforowania sekwencji operacji wykonywanych przez OpenGL w celu optymalizacji czasu renderowania obrazu +- buforowania danych odczytywanych z tekstur w celu przyspieszenia czasu renderowania obrazu + +Współrzędne w przestrzeni trójwymiarowej wyrażone za pomocą współrzędnych homogenicznych, jednorodnych, składają się z: +-| 4 liczb +- 3 liczb +- 2 liczb + +Jaką macierz $X$ przenosi współrzędne z przestrzeni oka do przestrzeni modelu? Ze względu na kolejność operacji mnożenia, przyjmij że współrzędne są wyrażone za pomocą wektorów pionowych. +-| $X = M^{-1}V^{-1}$ +- $X = V^{-1}P^{-1}$ +- $X = P^{-1}M$ + +Vertex shader to: +-| program przetwarzający jeden wierzchołek modelu, uruchamiany w wielu instancjach, po jednej na każdy wierzchołek modelu +- program przetwarzający wszystkie widoczne wierzchołki modelu +- program przetwarzający wszystkie wierzchołki modelu w pętli + +Efektu screen-tearing można uniknąć poprzez: +- zastosowanie Z-Bufora, w celu rysowania tylko obiektów widocznych +- zastosowanie specjalnego monitora +-| synchronizację odświeżania ekranu z procesem rysowania sceny + +Wektor normalny to: +- wektor o długości jednostkowej +-| wektor prostopadły do powierzchni +- wektor określający normalne współrzędne w przestrzeni trójwymiarowej przeliczony ze współrzędnych homogenicznych + +Raytracing to: +- algorytm śledzący promienie świetlne wychodzące od źródła światła +- algorytm generowania efektów świetlnych w grafice czasu rzeczywistego +-| algorytm generowania obrazów + +Tekstura to: +- fragment tekstu +- fragment opakowania kartonowego +-| obrazek nakładany na wielokąt + +Model Phonga Blinna różni się od modelu Phonga, bo: +- wykorzystuje iloczyn skalarny wektorów normalnego $\vec{n}$ i "w pół drogi" $\vec{h}$ zamiast iloczynu skalarnego wektorów do obserwatora $\vec{v}$ i normalnego $\vec{n}$ +-| wykorzystuje iloczyn skalarny wektorów normalnego $\vec{n}$ i "w pół drogi" $\vec{h}$ zamiast iloczynu skalarnego wektorów do obserwatora $\vec{v}$ i odbitego $\vec{r}$ +- wykorzystuje iloczyn skalarny wektorów do obserwatora $\vec{v}$ i odbitego $\vec{r}$ zamiast iloczynu skalarnego wektorów normalnego $\vec{n}$ i "w pół drogi" $\vec{h}$ + +Przestrzeń konfiguracji w Inverse Kinematics to: +- przestrzeń zawierająca wiele różnych wersji tego samego szkieletu (w różnych konfiguracjach) +- dopuszczalna przestrzeń, w której może poruszać się model +-| przestrzeń, w której każdy punkt reprezentuje jakiś układ szkieletu + +Dana jest macierz $M_A$ reprezentująca układ współrzędnych (położenie obiektu A na scenie). Obiekt B orbituje wokół obiektu A. W danym momencie czasowym kąt obrotu zapisany jest w zmiennej $\alpha$, a promień w zmiennej $r$. Jak wyliczyć $M_B$ — macierz modelu dla obiektu B? Ze względu na kolejność mnożenia macierzy załóż, że wektory określające współrzędne homogeniczne są pionowe. Poprzez $R(\alpha)$ oznaczono macierz obrotu o kąt $\alpha$, a poprzez $T(r)$ oznaczono macierz przesunięcia o odległość $r$ prostopadle do osi obrotu. +- $M_B = T(r) \cdot R(\alpha) \cdot M_A$ +-| $M_B = M_A \cdot R(\alpha) \cdot T(r)$ +- $M_B = M_A \cdot T(r) \cdot R(\alpha)$ + +Z-Fighting to: +- błąd występujący przy ukrywaniu niewidocznych powierzchni wynikający z nieczyszczenia Z bufora pomiędzy klatkami +- błąd występujący przy ukrywaniu niewidocznych powierzchni wynikający ze źle zbudowanego drzewa BSP +-| błąd występujący przy ukrywaniu niewidocznych powierzchni wynikający ze zbyt małej dokładności Z Bufora + +Które z poniższych zdań jest prawdziwe? +- Sprzętowe wsparcie istnieje tylko dla modelu oświetlenia Phonga (standardowo używanego w OpenGL) +- Każdy istniejący model oświetlenia został zaimplementowany sprzętowo. To dzięki temu OpenGL jest tak wydajny +-| Każdy istniejący model oświetlenia może być wspierany sprzętowo, ale trzeba go najpierw zaimplementować w specjalnym języku + +Jaka macierz $X$ przenosi współrzędne z przestrzeni oka do przestrzeni modelu? Ze względu na kolejność operacji mnożenia, przyjmij że współrzędne są wyrażone za pomocą wektorów pionowych. +-| $X = M^{-1} \cdot V^{-1}$ +- $X = P^{-1} \cdot M$ +- $X = V^{-1} \cdot P^{-1}$ + +Radiancja to: +-| moc promieniowania emitowanego przez jednostkę powierzchni w kierunku reprezentowanym przez różnicowy kąt bryłowy +- moc promieniowania emitowanego w kierunku reprezentowanym przez różnicowy kąt bryłowy +- moc promieniowania przechodzącego przez jednostkę powierzchni + +Trójkąt na rysunku oświetlony jest punktowym źródłem światła w sposób przedstawiony na rysunku i ocieniowany zgodnie z modelem Phonga zaimplementowanym w vertex shaderze. Czy na trójkącie (po narysowaniu go na ekranie) pojawi się plamka odbicia światła czy nie? +- Nie, ale to tylko kwestia mocy obliczeniowej. Kiedy pojawi się Geforce 12080GRTX to wtedy na pewno okrąg się pojawi +- Tak, gdyż stosowana jest nieliniowa interpolacja oświetlenia pomiędzy wierzchołkami +-| Nie, gdyż stosowana jest liniowa interpolacja oświetlenia pomiędzy wierzchołkami + +Dana jest macierz $M_A$ reprezentująca układ współrzędnych (położenie obiektu A na scenie). Obiekt B orbituje wokół obiektu A. W danym momencie czasowym kąt obrotu zapisany jest w zmiennej $\alpha$, a promień w zmiennej $r$. Jak wyliczyć $M_B$ — macierz modelu dla obiektu B? Ze względu na kolejność mnożenia macierzy załóż, że wektory określające współrzędne homogeniczne są pionowe. Poprzez $R(\alpha)$ oznaczono macierz obrotu o kąt $\alpha$ (oś nieistotna), a poprzez $T(r)$ oznaczono macierz przesunięcia o odległość $r$ prostopadle do osi obrotu. +-| $M_B = M_A \cdot R(\alpha) \cdot T(r)$ +- $M_B = T(r) \cdot R(\alpha) \cdot M_A$ +- $M_B = M_A \cdot T(r) \cdot R(\alpha)$ + +Współrzędne w przestrzeni dwuwymiarowej wyrażone za pomocą współrzędnych homogenicznych (jednorodnych) składają się z: +- 2 liczb +- 4 liczb +-| 3 liczb + +Nazwa Z-bufora pochodzi od tego, że: +- jest buforem służącym do posortowania wierzchołków według ich współrzędnej Z +-| składuje on współrzędną Z każdego piksela +- poprzez Z oznaczono numer sekwencyjny operacji wykonywanej przez OpenGL, a numery kolejnych operacji są składowane w Z-Buforze + +Koordynaty barycentryczne to: +-| koordynaty, które pozwalają na podstawie współrzędnych wierzchołków trójkąta określić położenie punktu wewnątrz trójkąta +- koordynaty wyrażone względem położenia obserwatora w przestrzeni oka +- koordynaty barów szybkiej obsługi na mapie + +Atrybut programu cieniującego to: +- parametr wejściowy programu cieniującego, który dla każdego fragmentu ma inną wartość +- parametr wejściowy programu cieniującego, który dla każdego wierzchołka ma taką samą wartość +-| parametr wejściowy programu cieniującego, który dla każdego wierzchołka może mieć inną wartość + +Punktowe źródło światła to: +-| źródło światła zajmujące dokładnie jeden punkt w przestrzeni, które świeci z jednakową intensywnością w każdym kierunku +- źródło światła o ograniczonym zakresie kierunków świecenia (oświetla tylko kilka punktów) +- mocno skupione źródło światła (np. laser) + +Powierzchniowe źródło światła to: +-| źródło światła, które nie jest punktem +- punktowe źródło światła ograniczone pewną powierzchnią (np. światło stożkowe) +- światło odbite od powierzchni + +Program cieniujący to: +-| program powstały przez połączenie vertex shadera i fragment shadera +- inna nazwa fragment shadera +- program używający OpenGL API, rysujący ocieniowany model + +Gęstość strumienia promieniowania (irradiancja/emitancja) to: +- moc promieniowania emitowanego w kierunku reprezentowanym przez różnicowy kąt bryłowy +- moc promieniowania emitowanego przez jednostkę powierzchni w kierunku reprezentowanym przez różnicowy kąt bryłowy +-| moc promieniowania przechodzącego przez jednostkę powierzchni + +W modelu Phonga-Blinna wprowadzono tzw. wektor w połowie drogi $\vec{h}$. Wektor ten jest obliczany jako: +- znormalizowana suma wektorów odbitego $\vec{r}$ i normalnego $\vec{n}$ +-| znormalizowana suma wektorów do światła $\vec{l}$ i do obserwatora $\vec{v}$ +- znormalizowana suma wektorów do światła $\vec{l}$ i normalnego $\vec{n}$ + +Funkcja BRDF (Bidirectional Reflectance Distribution Function) opisuje: +- stosunek radiancji przychodzącego promieniowania do gęstości emitowanego promieniowania (emitancji) +-| stosunek radiancji uchodzącego promieniowania do gęstości przychodzącego promieniowania (irradiancji) +- stosunek gęstości przychodzącego promieniowania (irradiancji) do intensywności uchodzącego promieniowania + +Promień cienia to: +- promień przeciwny do kierunku do światła (w kierunku krawędzi cienia) +- promień przechodzący przez pixel generowanego obrazu, wychodzący z oka obserwatora +-| promień do światła + +Kierunkowe źródło światła to: +- źródło światła emitujące światło o różnej intensywności w zależności od kierunku świecenia +- mocno skupione źródło światła (np. laser) świecące w konkretnym kierunku +-| źródło światła świecące z określonego kierunku + +Czy współrzędne homogeniczne mogą mieć współrzędną $w = 0$? +- Nie, bo zgodnie z definicją $w$ musi być różne od 0 +- Nie, bo nie wolno dzielić przez zero +-| Tak, w takiej sytuacji są to współrzędne wektora (przesunięcia) a nie pozycji + +Czy współrzędne homogeniczne mogą mieć współrzędną $w = 10$? +- Nie, mogą mieć tylko $w = 1$ lub $w = 0$ +-| Tak, w takiej sytuacji współrzędne te reprezentują pozycję a nie przesunięcie +- Tylko wtedy, gdy 10 jest wspólnym dzielnikiem $x$, $y$ i $z$ + +Trójkąt oświetlony jest światłem stożkowym w sposób przedstawiony na rysunku. Model światła stożkowego został zaimplementowany w vertex shaderze. Czy na trójkącie, po narysowaniu go na ekranie pojawi się jasny okrąg? +-| Nie, gdyż stosowana jest liniowa interpolacja oświetlenia pomiędzy wierzchołkami +- Tak, gdyż stosowana jest liniowa interpolacja oświetlenia pomiędzy wierzchołkami +- Tak, w najnowszych kartach graficznych np. w Geforce NVidia 2080RTX to już jest możliwe + +Animacja szkieletowa polega na: +-| interpolacji transformacji geometrycznych związanych z kośćmi w szkielecie +- interpolacji współrzędnych wierzchołków modelu pomiędzy keyframe'ami +- wyświetlaniu kolejnych keyframe'ów w odpowiednią szybkością (podobnie jak w animacji poklatkowej, ale rysowane są modele 3D) + +Przestrzeń modelu to przestrzeń: +- wspólna przestrzeń dla wszystkich modeli, w której kamera nie musi się znajdować w początku układu współrzędnych +-| w której model znajduje się na początku układu współrzędnych a jego położenie, rozmiar i obrót nie mają związku z innymi obiektami na scenie +- wspólna przestrzeń dla wszystkich modeli, w której kamera zawsze znajduje się w początku układu współrzędnych + +Wektor znormalizowany to: +- wektor prostopadły do powierzchni +- wektor określający normalne współrzędne w przestrzeni trójwymiarowej przeliczony ze współrzędnych homogenicznych +-| wektor o długości jednostkowej + +Niech $\vec{n}$ będzie wektorem normalnym w przestrzeni modelu, $a$ będzie współrzędną wierzchołka w przestrzeni modelu, a $p$ współrzędną źródła światła w przestrzeni oka. Dane są również macierze $P$, $V$ i $M$. Wektory do światła $\vec{l}$ i do obserwatora $\vec{v}$ w przestrzeni oka można wyliczyć następująco: +-| $\vec{l} = p - V \cdot M \cdot a$ oraz $\vec{v} = [0,0,0,1]^T - V \cdot M \cdot a$ +- $\vec{l} = P \cdot p - P \cdot V \cdot M \cdot a$ oraz $\vec{v} = P \cdot [0,0,0,1]^T - P \cdot V \cdot M \cdot a$ +- $\vec{l} = V^{-1} \cdot p - M \cdot a$ oraz $\vec{v} = V^{-1} \cdot [0,0,0,1]^T - M \cdot a$ + +Zmienna jednorodna programu cieniującego to: +-| parametr wejściowy programu cieniującego, który dla każdego wierzchołka i każdego fragmentu ma taką samą wartość +- parametr wejściowy programu cieniującego, który dla każdego wierzchołka może mieć inną wartość +- parametr wejściowy programu cieniującego, który dla każdego fragmentu ma inną wartość + +Jaka macierz $X$ przenosi współrzędne z przestrzeni przycięcia do przestrzeni świata? Ze względu na kolejność operacji mnożenia, przyjmij że współrzędne są wyrażone za pomocą wektorów pionowych. +- $X = M^{-1} \cdot V^{-1}$ +-| $X = V^{-1} \cdot P^{-1}$ +- $X = (V M)^{-1}$ + +Intensywność strumienia promieniowania to: +- moc promieniowania przechodzącego przez jednostkę powierzchni +-| moc promieniowania emitowanego w kierunku reprezentowanym przez różnicowy kąt bryłowy +- moc promieniowania emitowanego przez jednostkę powierzchni w kierunku reprezentowanym przez różnicowy kąt bryłowy + +Podwójne buforowanie pozwala na: +- unikanie problemu Z-fighting poprzez alokację dwóch Z-Buforów +-| ukrycie procesu rysowania sceny +- synchronizację odświeżania ekranu z procesem rysowania sceny + +Stożkowe źródło światła to: +- powierzchniowe źródło światła o kształcie stożka +- światło odbite od powierzchni i rozproszone w ramach stożka dookoła wektora odbicia +-| punktowe źródło światła, które świeci tylko w obrębie stożka a nie w każdym kierunku + +Zjawisko Fresnela to: +-| zjawisko polegające na tym, że ilość światła odbitego od powierzchni zależy od kąta patrzenia; odbicie jest silniejsze przy patrzeniu pod małym kątem do powierzchni +- zjawisko polegające na zmianie koloru światła podczas przechodzenia przez teksturę +- zjawisko polegające na liniowej interpolacji normalnych pomiędzy wierzchołkami trójkąta \ No newline at end of file diff --git a/tools/validate_qaml.php b/tools/validate_qaml.php new file mode 100644 index 0000000..4a2ab3d --- /dev/null +++ b/tools/validate_qaml.php @@ -0,0 +1,90 @@ + $rawLine) { + $lineNo = $i + 1; + $line = trim($rawLine); + + if ($line === '' || str_starts_with($line, '//')) { + continue; + } + + if (!str_starts_with($line, '-')) { + $finishQuestion(); + $question = $line; + $questionLine = $lineNo; + continue; + } + + if ($question === null) { + $errors[] = "Line {$lineNo}: answer appears before any question."; + continue; + } + + if (str_starts_with($line, '-|')) { + $answer = trim(substr($line, 2)); + } else { + $answer = trim(substr($line, 1)); + } + + if ($answer === '') { + $errors[] = "Line {$lineNo}: answer is empty."; + } + + $answers++; +} + +$finishQuestion(); + +$content = file_get_contents($path) ?: ''; +preg_match_all('/]*src=["\']([^"\']+)["\'][^>]*>/i', $content, $matches); +foreach ($matches[1] ?? [] as $src) { + if (str_starts_with($src, 'img/') && !is_file($baseDir . '/' . $src)) { + $errors[] = "Missing image referenced from pytania.txt: {$src}"; + } +} + +if ($questionCount === 0) { + $errors[] = 'No questions found.'; +} + +if ($errors !== []) { + foreach ($errors as $error) { + fwrite(STDERR, $error . PHP_EOL); + } + exit(1); +} + +echo "OK: {$questionCount} questions validated.\n";