„SzgGrafVizsga20120613” változatai közötti eltérés

Gabesz852 (vitalap | szerkesztései)
Nincs szerkesztési összefoglaló
Nagy Marcell (vitalap | szerkesztései)
a autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat
 
(7 közbenső módosítás, amit 2 másik szerkesztő végzett, nincs mutatva)
2. sor: 2. sor:


==1. Feladat==
==1. Feladat==
Írjon Cg nyelven olyan csúcspont-árnyaló és képpont-árnyaló programokat, amelyekkel az alábbi [[OpenGL]] kód egy teljes képernyőt feledő téglalapot rajzol.
Írjon Cg nyelven olyan csúcspont-árnyaló és képpont-árnyaló programokat, amelyekkel az alábbi [[OpenGL]] kód egy teljes képernyőt lefedő téglalapot rajzol.


glBegin(GL_QUADS);
glBegin(GL_QUADS);
14. sor: 14. sor:
glVertex2f(1.0f, 0.0f);
glVertex2f(1.0f, 0.0f);


glEnd;
glEnd();


A képpont színe legyen fekete, kivéve egy (normalizált eszközkoordinátákban) origó középpontú, 0.7 belső sugarú és 0.2 széles körgyűrűben, ahol a szín legyen fehér.
A képpont színe legyen fekete, kivéve egy (normalizált eszközkoordinátákban) origó középpontú, 0.7 belső sugarú és 0.2 széles körgyűrűben, ahol a szín legyen fehér.


(15 pont)
(15 pont)
Egy megoldás, amely közel jó eredményt ad:<br/>
'''Csúcspont árnyaló:'''<br/>
void vertex(in float4 position : POSITION,<br/>
            out float4 oPosition : POSITION,<br/>
      out float4 posTexcoord : TEXCOORD0)<br/>
{<br/>
if (position.x == 0.0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//x irányú nyújtás<br/>
position.x = -1.0;<br/>
<br/>
if (position.y == 0.0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//y irányú nyújtás<br/>
position.y = -1.0;<br/>
<br/>
oPosition = position;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//végső pozíció kiadása (erre rajzol majd)<br/>
posTexcoord = oPosition;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pozíció a fragmens shadernak<br/>
}<br/>
<br/>
'''Képpont árnyaló:'''<br/>
<br/>
void fragment(in float4 position : TEXCOORD0,<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out float4 oColor : COLOR)<br/>
{<br/>
float P = position.x * position.x + position.y * position.y;&nbsp;&nbsp;&nbsp;&nbsp;//x<sup>2</sup> + y<sup>2</sup><br/>
float innerR = 0.7 * 0.7;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//r<sup>2</sup><br/>
float outerR = 0.9 * 0.9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//R<sup>2</sup><br/>
<br/>
if (P >= innerR && P <= outerR)&nbsp;&nbsp;&nbsp;//a pontnak az r sugarú körön kívül és az R sugarú körön belül kell lennie<br/>
oColor = float4(1, 1, 1, 1);<br/>
else<br/>
oColor = float4(0, 0, 0, 1);<br/>
}<br/>
<br/>
Mivel a fragmens shader alapból nem kapja meg a pozíciókat, csak a textúrakoordinátákat, ezért trükközni kell egy kicsit. A vertex shaderből a módosított pozícióvektort visszaadom, mint egy textúrakoordinátát, így már elérhető a fragmens shaderből is. Azért kell mindenképpen átadni, mert a vertex shader csak a csúcspontokat kezeli, tehát az csak a négy koordinátát kapja meg, és nyilván a négy sarok nincs benne a gyűrűben, tehát ha ott végeznénk a számításokat, akkor az egész kép fekete lenne. A fragmens shader viszont az összes képpontot kezeli, így ott elvégezhető a számolás.<br/>
Ezzel a két programmal, a megadott vertexekkel a következő képet kaptam:<br/>
<br/>
[[File:grafika_vertex_shader_korgyuru.png]]<br/>
<br/>
A hiba okát nem tudom, elvileg minden klappol. Javítás jöhet.
--[[Szerkesztő:Gabesz852|Gabesz852]] ([[Szerkesztővita:Gabesz852|vita]]) 2014. január 22., 15:12 (UTC)


==2. Feladat==
==2. Feladat==
26. sor: 67. sor:


==Bónusz kérdések (1 pont darabja)==
==Bónusz kérdések (1 pont darabja)==
a) Melyik a legtelítettebb szín és miért?
a) Melyik a legtelítettebb szín és miért?<br />
 
<br />
b) Nevezzen meg egy Go folytonos interpoláló görbét, ami teljesíti a konvex burok tulajdonságait is!
A fehér, mert az minden színt tartalmaz. Ha prizmába belelövünk egy fehér fénynyalábot, a szivárvány színeire bontva jön ki a másik oldalon.<br />
 
<br />
c) Mi a környezet-leképezés (environment mapping)?
b) Nevezzen meg egy G<sub>0</sub> folytonos interpoláló görbét, ami teljesíti a konvex burok tulajdonságait is!<br />
 
<br />
d) Mi a különbség a teljes visszaverődés és az ideális visszaverődés között?
G<sub>0</sub> folytonosság: két görbeszakasz értéke intervallumhatáron megegyezik.<br />
 
Konvex burok tulajdonság: nem lép ki a kontrollpontok alkotta konvex sokszög határából.<br />
 
Interpoláló: érinti a kontrollpontokat.<br />
Idő: 60 perc
Ezeket a tulajdonságokat teljesíti pl. a törtvonal is (simán összekötöd a csomópontokat egyenes szakaszokkal).<br />
 
<br />
 
c) Mi a környezet-leképezés (environment mapping)?<br />
<br />
Ideális tükröket lehet így szimulálni. Külön leképzéssel meghatározzuk, hogy mi látszik a tükörirányban, majd a képet textúraként rátesszük a tükröző objektumra.<br />
<br />
d) Mi a különbség a teljes visszaverődés és az ideális visszaverődés között?<br />
<br />
Ideális visszaverődés: csak ideális tükörnél fordul elő; a beesési irány, a felületi normális és a kilépési irány egy síkban van, és a beesési szög megegyezik a kilépési szöggel.<br />
Teljes visszaverődés: az optikailag sűrűbb anyagból a fény nem tud kilépni a ritkább anyagba. Amikor sugárkövetésnél a fénytörési irányt számolod, és a gyökjel alatti tag (1-(1-cos<sup>2</sup>alfa)/(n<sup>2</sup>)) negatív, akkor áll fenn. A tört fény mennyisége is hozzáadódik a visszaverődéshez. Így működik az üvegszál.<br />
<br />
Idő: 60 perc<br />
<br />
<br />
-- Main.voros - 2012.06.13.
-- Main.voros - 2012.06.13.
--[[Szerkesztő:Gabesz852|Gabesz852]] ([[Szerkesztővita:Gabesz852|vita]]) 2014. január 22., 15:40 (UTC)




[[Category:Infoalap]]
[[Category:Infoalap]]
A lap eredeti címe: „https://vik.wiki/SzgGrafVizsga20120613