<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=2006._06._20._%28keresztf%C3%A9l%C3%A9ves_vizsga%21%29</id>
	<title>2006. 06. 20. (keresztféléves vizsga!) - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=2006._06._20._%28keresztf%C3%A9l%C3%A9ves_vizsga%21%29"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=2006._06._20._(keresztf%C3%A9l%C3%A9ves_vizsga!)&amp;action=history"/>
	<updated>2026-05-18T00:14:03Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=2006._06._20._(keresztf%C3%A9l%C3%A9ves_vizsga!)&amp;diff=138297&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgGrafVizsga20060620}}  __TOC__  ==1.) Feladat ==  &lt;b&gt;3D szakaszok vágása homogén koordinátákban. Vágási tartomány = 1p, szakasz egye…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=2006._06._20._(keresztf%C3%A9l%C3%A9ves_vizsga!)&amp;diff=138297&amp;oldid=prev"/>
		<updated>2012-10-21T20:16:33Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgGrafVizsga20060620}}  __TOC__  ==1.) Feladat ==  &amp;lt;b&amp;gt;3D szakaszok vágása homogén koordinátákban. Vágási tartomány = 1p, szakasz egye…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|SzgGrafVizsga20060620}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==1.) Feladat ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;3D szakaszok vágása homogén koordinátákban. Vágási tartomány = 1p, szakasz egyenlete homogén koordinátákban = 1p, metszésszámítás = 1p, vágási algoritmus = 2p.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vágási tartomány:&lt;br /&gt;
&amp;lt;math&amp;gt; -h &amp;lt;= X_h &amp;lt;= h, -h &amp;lt;= Y_h &amp;lt;= h, -h &amp;lt;= Z_h &amp;lt;= h, h &amp;gt; 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Szakasz egyenlete:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; x(t) = t*x_0 + (1-t)*x_1 &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; y(t) = t*y_0 + (1-t)*y_1 &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; z(t) = t*z_0 + (1-t)*z_1 &amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; h(t) = t*h_0 + (1-t)*h_1 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Metszésszámítás: megoldjuk a következő egyenleteket.&lt;br /&gt;
&amp;lt;math&amp;gt; x(t) = h(t), y(t) = h(t), z(t) = h(t) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cohen-Sutherland vágási algoritmus:&amp;lt;br&amp;gt;&lt;br /&gt;
Jelöljük a térrészeket 6-6 bittel, a bit 0 ha a kijelölt kockán belül vagyunk, 1 ha kívül. (tk. 199)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C1 = P1 kódja&lt;br /&gt;
C2 = P2 kódja&lt;br /&gt;
int f;&lt;br /&gt;
&lt;br /&gt;
while(true) {&lt;br /&gt;
  if( C1 == 0 &amp;amp;&amp;amp; C2 == 0 ) return true;  //triviális elfogadás, mindkét pont belül van&lt;br /&gt;
  if( C1 &amp;amp; C2 != 0 ) return false;		 //triviális elutasítás, mindkét pont kívül van&lt;br /&gt;
&lt;br /&gt;
  if( C1&amp;gt;&amp;gt;5 ^ C2&amp;gt;&amp;gt;5 ) {&lt;br /&gt;
	 f = 5;&lt;br /&gt;
  }&lt;br /&gt;
  else if( C1&amp;gt;&amp;gt;4 ^ C2&amp;gt;&amp;gt;4 ) {&lt;br /&gt;
	 f = 4;&lt;br /&gt;
  }&lt;br /&gt;
  ...&lt;br /&gt;
  else {&lt;br /&gt;
	 f = 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  P = intersect(P1, P2, f);  //metszéspont a (6-f). síkkal&lt;br /&gt;
  C = P kódja&lt;br /&gt;
&lt;br /&gt;
  if( C1&amp;gt;&amp;gt;f == 1 ) {&lt;br /&gt;
	 P1 = P;&lt;br /&gt;
	 C1 = C;&lt;br /&gt;
  } else {&lt;br /&gt;
	 P2 = P;&lt;br /&gt;
	 C2 = C;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==2.) Feladat ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Egy játék karakterének aktuális állapotát két tömb írja le. Az első tömb a háromszögek csúcsainak indexeit tartalmazza (egymás utáni három egész egy-egy háromszög három csúcsának indexe). A másik tömb a csúcsokat tartalmazza. A csúcstömb elemei struktúrák, amelyek az x,y,z koordinátákat foglalják magukban.&amp;lt;br&amp;gt;&lt;br /&gt;
A karakter [vx,vy,vz] sebességgel mozog. Egy lövedék érkezik az adott Dt hosszú időkeret elején az [X,Y,Z] pontba [VX,VY,VZ] sebességgel. Írjon FOLYTONOS ÜTKÖZÉS-DETEKTÁLÓ függvényt, amely eldönti, hogy ebben a keretben a lövedék eltalálja-e a karaktert. Feltételezheti, hogy a karakter modellje topológiailag helyes, és hogy a lövedék a keret elején még a karakteren kívül van. Az implementációban feltételezheti, hogy a vektorokra az összeadás(+), kivonás(-), skaláris és skalárral való szorzás(*), valamint a vektoriális szorzás(%) rendelkezésre állnak.&lt;br /&gt;
&lt;br /&gt;
Elv = 1p, Képletek = 2p, C implementáció = 2p &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Elv: amennyiben egy 3D alakzat topológiailag helyes (azaz értelmezhető a térfogata), akkor úgy tudjuk megállapítani hogy a belsejében vagyunk-e hogy az adott pontból egy sugarat indítunk (ez esetben a lövedék sebességével ellentétes irányba célszerű). Számoljuk a sugár testtel való metszéspontjait, és ha páratlan metszést találunk akkor a testen belül, ha párosat akkor azon kívül van a lövedék.&lt;br /&gt;
(Ehhez még fel kell tenni azt hogy a keretek kellően kis időközönként követik egymást, különben előfordulhat hogy a lövedék pl. átugorja a játékos karját)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Annyit tennék hozzá, hogy a folytonos ütközés-detektálás pontosan azt jelenti, hogy nem számít, milyen időközönként vizsgáljuk az ütközést. Bonyolultan szólva tehát a feladat az, hogy megvizsgáljuk, hogy a keret elején lévő golyópozíciót a keret végén lévő golyópozícióval való összekötésből adódó szakasznak van-e pontja, mely a testen belül halad. Ez elbonyolítás, mert ha topológiailag helyes, akkor a golyó - amiről tudjuk, hogy a keret elején nincsen benne a testben - sebességvektora metsz egyetlen háromszöget is, akkor biztosan lesz olyan időpillanat (most vegyük úgy egyelőre, hogy a karakter nem mozog), amikor a test belsejében van a golyó a keret eleje és vége közt eltelt időben. Ha a karomat háromszögekkel közelítem és bármelyiket metszi a golyó útja a keret eleje és vége közt, akkor bizony vérezni fogok hiába metszett páros számszor a golyó. Problémát jelenthet továbbá az, hogy a karakter is mozog. Ez nem hagyható figyelmen kívül pélául akkor mikor Neo a golyók sebességének nagyságrendjébe eső gyorsasággal hajolgat el. Ha az ő mozgását nem lelassítva figyelnénk (a kulcskeret jóval hosszabb lenne mint a film lassított jelenete) és figyelmen kívül hagynánk a mozgását, akkor simán szétlőte volna Smith ügynök. A golyóra van három paraméteres egyenletünk (ilyesmi alakúak: x=X+VX*t), egy háromszögre  pontjai pedig egy sík egyenletét adja, ezt úgy kéne megkonstruálni, hogy a sík egyenlete függjön az időtől is. A háromszög 3 pontja mozgásban: P1=p1+(xv,yv,zv)*t, P2=p2+(xv,yv,zv)*t, P3=p3+(xv,yv,zv)*t. Innen felírható, hogy N=(P2-P1)X(P3-P1)/|(P2-P1)X(P3-P1) és hogy P1*N=0 ami pedig a sík egyenlete. Van tehát 4 ismeretlenünk és 4 egyenlet. Ebből adódik az ütközés helye és ideje ha egyáltalán van ilyen (nyilván le kell vizsgálni, hogy valóban a háromszög belsejében van a metszéspont). Ezt minden háromszögre el kell végezni és tehát ha bármelyikre is adódik egy metszéspont, akkor ott ütközés volt. Megj: ez itt most O(n) lépésszám, de pl egy karakter-karakter ütközésnél O(n*n) lenne, ezért szoktak trükközni, hogy mondjuk csak a befoglaló téglatesteket/ellipszoidokat ütköztetik -- [[FodorBalint|FodorBálint]] - 2008.01.02.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
==3.) Feladat ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mit csinál a grafikus kártya a pixelárnyalóban és az után?&lt;br /&gt;
Hogyan változik a működés a következők hatására?&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
glEnable/Disable(GL_TEXTURE_2D)&lt;br /&gt;
glEnable/Disable(GL_DEPTH_TEST)&lt;br /&gt;
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)&lt;br /&gt;
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)&lt;br /&gt;
glEnable/Disable(GL_LIGHTING)&lt;br /&gt;
glEnable/Disable(GL_BLEND)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Megoldás:&amp;lt;br/&amp;gt;&lt;br /&gt;
=glEnable/Disable(GL_TEXTURE_2D)= &amp;lt;br/&amp;gt;&lt;br /&gt;
Ki/be kapcsolja a textúrázást, a pixelárnyalóban a pixel színébe beleszól a textúra adott színe is.&amp;lt;br&amp;gt;&lt;br /&gt;
=glEnable/Disable(GL_DEPTH_TEST)= &amp;lt;br/&amp;gt;&lt;br /&gt;
Mélységteszt, ha be van kapcsolva akkor a pixelárnyalóban csak akkor íródik felül az aktuális pixel, ha a z-buffer értékénél kisebb a most számolt &amp;quot;pixel távolsága&amp;quot;. Aki írt már pixel shadert az tudja, hogy a vertex shader-ben transzformált (modell és projekciós) pontokat úgy kapja meg a pixel shader, hogy megkapja a pont mélységét is. Ez azért van így mert innen lehet eldönteni, hogy az adott pixelt rajzoljuk-e (volt-e már közelebbi pont beírva a z-bufferbe) vagy sem. Nem tudom, hogy teljesen korrket-e ez a leírás FIXME.&amp;lt;br&amp;gt;&lt;br /&gt;
=glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)= &amp;lt;br/&amp;gt;&lt;br /&gt;
Ennek akkor van értelme, ha textúrázunk, mert ilyenkor a glColor függvénnyel beállított szín felül fog íródni a textúra színével.&amp;lt;br/&amp;gt;&lt;br /&gt;
=glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)= &amp;lt;br/&amp;gt;&lt;br /&gt;
Ennek akkor van értelme, ha textúrázunk, mert ilyenkor pixel színe (anyag színe + fényezés) össze fog szorzódni a textúra színével&amp;lt;br/&amp;gt;&lt;br /&gt;
=glEnable/Disable(GL_LIGHTING)= &amp;lt;br/&amp;gt;&lt;br /&gt;
Fényezés ki/be.&amp;lt;br/&amp;gt;&lt;br /&gt;
=glEnable/Disable(GL_BLEND)= &amp;lt;br/&amp;gt;&lt;br /&gt;
Átlátszóság ki/be. &amp;lt;br/&amp;gt;&lt;br /&gt;
-- [[FodorBalint|FodorBálint]] - 2008.01.03.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
==4.) Feladat ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Egy affin modellezési transzformáció a [0,0,0],[1,1,1] AABB sarkaival a következőt teszi:&lt;br /&gt;
A [0,0,0] sarkot a [2,3,4] pontba viszi át, a [1,0,0] sarkot a [6,5,5] pontba viszi át, a [1,1,0] sarkot a [3,6,5] pontba viszi át, a [1,1,1] sarkot a [7,8,9] pontba viszi át.&lt;br /&gt;
Írja fel a transzformációt! Miért fontos az a kitétel, hogy a trafó affin(1p)? A trafó kiszámítása (3p). Egy korábbitól eltérő másik transzformációs mátrix megadása (1p).&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
AABB: Axis Aligned Bounding Box, koordinátatengelyekkel párhuzamos élű befoglaló téglatest (Sünis könyv 350. o.: Az ütközésszámítás gyorsítása) &amp;lt;br&amp;gt;&lt;br /&gt;
Affin transzformáció: lineáris transzformáció + eltolás, homogén koordinátás alak esetén egy 4x4es mátrix-szal fejezhető ki: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; M = \left[\begin{array}{rrrr} a_{11} &amp;amp;amp; a_{12} &amp;amp;amp; a_{13} &amp;amp;amp; 0 \\ a_{21} &amp;amp;amp; a_{22} &amp;amp;amp; a_{23} &amp;amp;amp; 0 \\ a_{31} &amp;amp;amp; a_{32} &amp;amp;amp; a_{33} &amp;amp;amp; 0 \\ p_{1} &amp;amp;amp; p_{2} &amp;amp;amp; p_{3} &amp;amp;amp; 1 \\  \end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ahol &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;-k a lineáris transzformációt, &amp;lt;math&amp;gt;p_{i}&amp;lt;/math&amp;gt;-k az eltolást jelentik. &amp;lt;br&amp;gt;&lt;br /&gt;
A pontokat homogén koordinátás alakban felírva kapunk néhány egyenletet:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; [0, 0, 0, 1] \cdot M = [2, 3, 4, 1] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; [1, 0, 0, 1] \cdot M = [6, 5, 5, 1] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; [1, 1, 0, 1] \cdot M = [3, 6, 5, 1] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; [1, 1, 1, 1] \cdot M = [7, 8, 9, 1] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Azért fontos, hogy a transzformáció affin, mert így a mátrixban csak 12 ismeretlen van, és mivel a 4 pontból 4*3 = 12 egyenletet tudunk felírni, így megoldható az egyenletrendszer. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; [0, 0, 0, 1] \cdot M = [p_1, p_2, p_3, 1] = [2, 3, 4, 1] &amp;lt;/math&amp;gt; ebből &amp;lt;math&amp;gt; p_1 = 2, p_2 = 3, p_3 = 4 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; [1, 0, 0, 1] \cdot M = [a_{11}+p_1, a_{12}+p_2, a_{13}+p_3, 1] &amp;lt;/math&amp;gt; ebből &amp;lt;math&amp;gt; a_{11} = 4, a_{12} = 2, a_{13} = 1 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; [1, 1, 0, 1] \cdot M = [a_{11}+a_{21}+p_1, a_{12}+a_{22}+p_2, a_{13}+a_{32}+p_3, 1] &amp;lt;/math&amp;gt; ebből &amp;lt;math&amp;gt; a_{21} = -3, a_{22} = 1, a_{23} = 0 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; [1, 1, 1, 1] \cdot M = [a_{11}+a_{21}+a_{31}+p_1, a_{12}+a_{22}+a_{32}+p_2, a_{13}+a_{23}+a_{33}+p_3, 1] &amp;lt;/math&amp;gt; ebből &amp;lt;math&amp;gt; a_{31} = 4, a_{32} = 2, a_{33} = 4 &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Megvan tehát a transzformációs mátrix összes eleme: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; M = \left[\begin{array}{rrrr} 4 &amp;amp;amp; 2 &amp;amp;amp; 1 &amp;amp;amp; 0 \\ -3 &amp;amp;amp; 1 &amp;amp;amp; 0 &amp;amp;amp; 0 \\ 4 &amp;amp;amp; 2 &amp;amp;amp; 4 &amp;amp;amp; 0 \\ 2 &amp;amp;amp; 3 &amp;amp;amp; 4 &amp;amp;amp; 1 \\  \end{array} \right] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most már csak az a kérdés, hogy hogyan lehet egy korábbitól eltérő másik transzformációs mátrix megadni?&lt;br /&gt;
&lt;br /&gt;
Ez egy homogen transzformacio. Ha a matrixot megszorozzuk 2-vel, akkor (a,b,c,d) helyett (2a,2b,2c,2d) pontot fogjuk kapni, ami ugyanaz a projektiv terben. Tehat a kapott matrixot tetszoleges konstanssal szorozva ekvivalens trafo-t kapunk. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például: &amp;lt;math&amp;gt; M^{&amp;#039;} = 2 \cdot M = \left[\begin{array}{rrrr} 8 &amp;amp;amp; 4 &amp;amp;amp; 2 &amp;amp;amp; 0 \\ -6 &amp;amp;amp; 2 &amp;amp;amp; 0 &amp;amp;amp; 0 \\ 8 &amp;amp;amp; 4 &amp;amp;amp; 8 &amp;amp;amp; 0 \\ 4 &amp;amp;amp; 6 &amp;amp;amp; 8 &amp;amp;amp; 2 \\  \end{array} \right] &amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- pluhi - 2007.01.12. &amp;lt;br&amp;gt;&lt;br /&gt;
-- [[GergelyK|Geri]] - 2007.01.12.&amp;lt;br&amp;gt;&lt;br /&gt;
-- [[CsapoT|Csapszi]] - 2007.01.15. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>