Számítógépes grafika vizsga 2008.06.04.

A VIK Wikiből
(SzgGrafVizsga20080604 szócikkből átirányítva)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


1. feladat

Rajzoljon ki egy 1 sugarú gömböt OpenGL segítségével, viszont glu függvények használata nélkül a (-2,0,0) pontba! Illessze rá a tex változóban tárolt és már előkészített textúrát! A kamera a (2,3,4) irányból néz. Egy fényforrás van, ami a (?,?,?) pontban világít. A kamera beállításaival nem kell foglalkoznia! Ajánlott függvények: (...) (Emlékezetből írtam, valami hasonló volt...)

2. feladat

Adott egy pontszerűnek tekinthető golyó a (0,1,4) pontban, sebessége (1,1,1) irányvektorral jellemezhető. Adott az alábbi paraméteres felület:

x(u,v) = u
y(u,v) = v
z(u,v) = u*v

A golyó tömege elhanyagolható. A golyó tökéletesen rugalmasan visszapattan a felületről. Milyen lesz az ütközés után a sebessége?

Én a következőképpen oldottam meg a feladatot: A golyó a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P=(0,1,4)} pontban van, sebessége Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{v}=(1,1,1)} . Az idő függvényében a golyó pályája Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle t} -vel paraméterezve a következőképp írható fel:

Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{s}=\vec{s}_{0}+\vec{v}*t}

Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle s_x=0+t}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle s_y=1+t}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle s_z=4+t}

Az a kérdés, mikor ütközik neki a golyó a felületnek? Tegyük egyenlővé a paraméteres felület megfelelő koordinátáit a pálya megfelelő koordinátáival, így megkaphatjuk a metszéspontot:

Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle u=s_x=0+t}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle v=s_y=1+t}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle uv=s_z=4+t}

Az első két egyenletet behelyettesítve a harmadikba a következőz kapjuk:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle t(1+t)=4+t}
Ebből Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle t=\left|2\right|}
A két gyök közül -2 értelmetlen, hiszen az idő mindíg nemnegatív, így Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle t=2} . A metszéspont koordinátái így
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_m=(2,3,6)}

Következő teendő a felület normálvektorának kiszámítása az adott pontban. A felületi normális egy pontban a felület parciális deriváltjainak a vektoriális szorzata:

Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle r_u' = \frac{\partial r(u,v)}{\partial u} = [1,0,v] }
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle r_v' = \frac{\partial r(u,v)}{\partial v} = [0,1,u] }

A normálvektor pedig a következő mátrix determinánsának kifejtése (ügyelve a sakktábla szabályra):

Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{N}=r_u' \times r_v'=det(\left[ \begin{array}{rrr} \vec{i} & \vec{j} & \vec{k} \\ 1 & 0 & v \\ 0 & 1 & u \end{array} \right])=}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle = \vec{i}(0*u-v*1) - \vec{j}(1*u-v*0) + \vec{k}(1*1-0*0)=(-v*\vec{i},-u*\vec{j},1*\vec{k})=(-v,-u,1) }

A megfelelő behelyettesítések után:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{N}=(-3,-2,1)}

A visszaverődés után a sebességvektor: Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{v'}=-\vec{N}*(\vec{v}*\vec{N})}

Ez egyszerűen a normál vektor 180 fokos forgatása és skálázása, ahogy látszott is az eredményből: (3,2,-1). Helyesen:

Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{v'}=\vec{v}-2*\vec{N}*(\vec{v}*\vec{N})}

Behelyettesítést követően: Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{v'}=(1,1,1)-2*(-3,-2,1)*((1,1,1)*(-3,-2,1))=(1,1,1)-2*(3,2,-1)=(-5,-3,3)}


-- Bandita - 2008.12.18.

3. feladat

A grafikus kártya fragmens (pixel) árnyalója és a rasztertár között milyen műveleti egység helyezkedik el? Miért? Írja le ezek bemenetét/kimenetét és működési elvüket!

Én a Z-buffert írtam, de e mellé még kell valami, vagy részletesebben kellett volna írnom, ugyanis 5 pontot kaptam.
-- Bandita - 2008.06.17.

4. feladat

Bizonyítsa be, hogy az invertálható homogén lineáris transzformációk egyenest egyenesbe visznek át!

-- GK - 2008.06.05.

levlistás levél:

1. Gömb tesszelációja glu függvények nélkül (szóval gluQuadratic, meg gluSphere nem játszik), adott a középpontja, meg a sugara, gyakorlatilag a harmadik kisházi. Annyi nyalánkság volt, hogy nem voltak megadva a paraméteres egyenletek sem, szóval azt kellett azért tudni hozzá, volt egy irányfény (4. koordináta 0 kell legyen, ezt neked kellett mögé biggyeszteni), meg volt a gömb anyaga diffúz, és a diffúz felületi együtthatók egy sakk nevű textúrában vannak. Hogy ez mit jelent pontosan azt a mai napig nem tudom, én csak ráhúztam a textúrát a gömbre, aztán jólvan.

2. Ez vicces feladat volt, adott egy pontszerűnek tekinthető test x,y,z pontból indítva, vx,vy,vy kezdősebességgel, és volt egy felület, amivel teljesen rugalmasan ütközik, és a felület úgy nézett ki, hogy u,v-vel paraméterezve: x(u,v)=u, y(u,v)=v, z(u,v)=u*v, szóval egy ilyen magasságmető szerűség. Sokat nem tudok hozzászólni, leírtam a tökéletesen rugalmas ütközés fizika érettségin is elsütött alapképleteit, hogy a párhuzamos komponens marad, a merőleges ellenkezőjére változik, meghogy kvázi tükrözni kell a vektort a normálvektorra, és hogy azt meg úgy lehet kiszámolni, hogy veszed a felület u és v szerinti parciális deriváltjait, majd azokat vektoriálisan összeszorzod. Ezeket fel is írtam x(u,v), y(u,v), z(u,v)-re, és itt nagyjából megállt a tudomány.

3. Milyen egységek vannak a fragmens (pixel) shader és a rasztertár között. Hogy működnek ezek, milyen ki-be meneteik vannak, hogyan lehet OpenGL-ből szabályozni őket? Ebben az volt a csel, hogy általában a vertex és a fragmens shader közötti törénéseket szerette eddig kérezni, nagy rutinosan majdnem el is kezdtem azt írni. :) Három dolgot hánytorgattam fel: z-buffer (glEnable(GL_DEPTH_TEST)), ami gyönyörűen le van írva a könyvben, átlátszóság (glEnable(GL_BLEND), meg a többi maszlag (SRC, DST) ide), ami szintén 1-2 oldal a könyvben, illetve én a stencil-bufferről is írtam, de erről mintha előadáson nem lett volna szó. Mindegy, szeretnek ilyesmikre pluszpontot adni, úgyhogy szerintem érdemes előhozakodni ezzel is, főleg, ha tudod is nagyjából mire való (rasztertár maszkolása, stb)

4. Bizonyítsa be, hogy invertálható homogén lineáris transzformáció a projektív sík egyeneseit egyeneskbe viszi át. Ehhez meg kb 1 slideot kellett tudni szóról szóra: http://www.fsz.bme.hu/~szirmay/grafika/bmetransf.ppt, 19. slide. Felírod az egyenest, mint két pont között paraméterezett cuccot (súlypont analógia), aztán nekimész a T transzformációddal, és beviszed a pontok mellé, hogy tulajdonképpen azokat transzformálod, ha jól értem...

Amit szerintem nagyon érdemes átnézni: - az összes görbés cucc - paraméteres felületek tesszelációja - fraktálokból IFS és Hausdorf dolgok (ezekhez jöttek a listákra nagyon használható linkek) - projektív geometria (pl sztem tök esélyes lehet a projektív egyenesek metszéspontjának levezetése) - gluLookAt és gluPerspective mátrixai hogy jönnek ki - Animációból a Kochanek-Bartel spline működési elve - GPU viselt dolgai (vertex, fragmens shader és a köréjük pakolt sallangok) - Textúrázás, fények összepakolása (pl előzőleg csak a megvilágítás pár soráért kaptam 4 pontot a 10-ből!!!)


Egyébként a ponthatárok, ha valaki nem tudná még: 40/16-tól van meg, és 3 pontonként megy felfelé.