„SzgGrafVizsga20120613” változatai közötti eltérés
Nincs szerkesztési összefoglaló |
|||
| 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 100%-os eredményt ad: | |||
Csúcspont árnyaló: | |||
void vertex(in float4 position : POSITION, | |||
out float4 oPosition : POSITION, | |||
out float4 posTexcoord : TEXCOORD0) | |||
{ | |||
if (position.x == 0.0) //x irányú nyújtás | |||
position.x = -1.0; | |||
if (position.y == 0.0) //y irányú nyújtás | |||
position.y = -1.0; | |||
oPosition = position; //végső pozíció kiadása (erre rajzol majd) | |||
posTexcoord = oPosition; //pozíció a fragmens shadernak | |||
} | |||
Képpont árnyaló: | |||
void fragment(in float4 position : TEXCOORD0, | |||
out float4 oColor : COLOR) | |||
{ | |||
float P = position.x * position.x + position.y * position.y; //x^2 + y^2 | |||
float innerR = 0.7 * 0.7; //r^2 | |||
float outerR = 0.9 * 0.9; //R^2 | |||
if (P >= innerR && P <= outerR) //a pontnak az r sugarú körön kívül és az R sugarú körön belül kell lennie | |||
oColor = float4(1, 1, 1, 1); | |||
else | |||
oColor = float4(0, 0, 0, 1); | |||
} | |||
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. | |||
Ezzel a két programmal, a megadott vertexekkel a következő képet kaptam: | |||
[[:File:grafika_vertex_shader_korgyuru.png]] | |||
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== | ||