Initial QAML question data

This commit is contained in:
2026-05-18 16:40:38 +02:00
commit da08ed069b
11 changed files with 701 additions and 0 deletions

17
.github/pull_request_template.md vendored Normal file
View File

@@ -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

14
.github/workflows/validate.yml vendored Normal file
View File

@@ -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

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
ip.txt
ip.txt.old
*.log
*.bak
*.old
.DS_Store

13
CONTRIBUTING.md Normal file
View File

@@ -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`.

203
README.md Normal file
View File

@@ -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 <img src="img/example.png" height="100" />
-| $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
```

BIN
img/liczba_zwojow_p.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
img/trojkat_phong.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

358
pytania.txt Normal file
View File

@@ -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: <img src="img/liczba_zwojow_p.png" height="160" />
- 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? <img src="img/trojkat_phong_vertex_shader.png" height="160" />
- 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 <img src="img/trojkat_phong.png" height="100" /> 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 <img src="img/trojkat_phong.png" height="100" /> 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 <img src="img/trojkat_swiatlo_stozkowe_vertex.png" height="100" /> 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

90
tools/validate_qaml.php Normal file
View File

@@ -0,0 +1,90 @@
<?php
declare(strict_types=1);
$file = $argv[1] ?? 'pytania.txt';
$baseDir = dirname(__DIR__);
$path = $baseDir . '/' . $file;
if (!is_file($path)) {
fwrite(STDERR, "File not found: {$file}\n");
exit(1);
}
$lines = file($path, FILE_IGNORE_NEW_LINES);
$errors = [];
$question = null;
$questionLine = 0;
$answers = 0;
$questionCount = 0;
$finishQuestion = static function () use (&$errors, &$question, &$questionLine, &$answers, &$questionCount): void {
if ($question === null) {
return;
}
if ($answers === 0) {
$errors[] = "Line {$questionLine}: question has no answers.";
}
$questionCount++;
$question = null;
$questionLine = 0;
$answers = 0;
};
foreach ($lines as $i => $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('/<img\s+[^>]*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";