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

A VIK Wikiből
A lap korábbi változatát látod, amilyen (vitalap) 2012. október 21., 20:16-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgGrafVizsga20080604}} __TOC__ ==1. feladat== '''Rajzoljon ki egy 1 sugarú gömböt OpenGL segítségével, viszont glu függvények hasz…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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 [math]P=(0,1,4)[/math] pontban van, sebessége [math]\vec{v}=(1,1,1)[/math]. Az idő függvényében a golyó pályája [math]t[/math]-vel paraméterezve a következőképp írható fel:

[math]\vec{s}=\vec{s}_{0}+\vec{v}*t[/math]

[math]s_x=0+t[/math]
[math]s_y=1+t[/math]
[math]s_z=4+t[/math]

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:

[math]u=s_x=0+t[/math]
[math]v=s_y=1+t[/math]
[math]uv=s_z=4+t[/math]

Az első két egyenletet behelyettesítve a harmadikba a következőz kapjuk:
[math]t(1+t)=4+t[/math]
Ebből [math]t=\left|2\right|[/math]
A két gyök közül -2 értelmetlen, hiszen az idő mindíg nemnegatív, így [math]t=2[/math]. A metszéspont koordinátái így
[math]P_m=(2,3,6)[/math]

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:

[math] r_u' = \frac{\partial r(u,v)}{\partial u} = [1,0,v] [/math]
[math] r_v' = \frac{\partial r(u,v)}{\partial v} = [0,1,u] [/math]

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

[math]\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])=[/math]
[math]= \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) [/math]

A megfelelő behelyettesítések után:
[math]\vec{N}=(-3,-2,1)[/math]

A visszaverődés után a sebességvektor: [math]\vec{v'}=-\vec{N}*(\vec{v}*\vec{N})[/math]

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:

[math]\vec{v'}=\vec{v}-2*\vec{N}*(\vec{v}*\vec{N})[/math]

Behelyettesítést követően: [math]\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)[/math]


-- 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é.