<?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._01._%28keresztf%C3%A9l%C3%A9ves_vizsga%21%29</id>
	<title>2006. 06. 01. (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._01._%28keresztf%C3%A9l%C3%A9ves_vizsga%21%29"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=2006._06._01._(keresztf%C3%A9l%C3%A9ves_vizsga!)&amp;action=history"/>
	<updated>2026-05-17T15:04:44Z</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._01._(keresztf%C3%A9l%C3%A9ves_vizsga!)&amp;diff=138295&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgGrafVizsga20060601}}  [http://info.sch.bme.hu/document.php?cmd=download_proc&amp;tmp_page=&amp;doc_id=12066 infosite alapján]  __TOC__  ==1.)== &lt;b…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=2006._06._01._(keresztf%C3%A9l%C3%A9ves_vizsga!)&amp;diff=138295&amp;oldid=prev"/>
		<updated>2012-10-21T20:16:31Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|SzgGrafVizsga20060601}}  [http://info.sch.bme.hu/document.php?cmd=download_proc&amp;amp;tmp_page=&amp;amp;doc_id=12066 infosite alapján]  __TOC__  ==1.)== &amp;lt;b…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|SzgGrafVizsga20060601}}&lt;br /&gt;
&lt;br /&gt;
[http://info.sch.bme.hu/document.php?cmd=download_proc&amp;amp;tmp_page=&amp;amp;doc_id=12066 infosite alapján]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==1.)==&lt;br /&gt;
&amp;lt;b&amp;gt;Phong árnyalás (vigyázat, nem Phong BRDF modell)&lt;br /&gt;
* elv&lt;br /&gt;
* mi a különbség a Gouranud árnyaláshoz képest?&lt;br /&gt;
* milyen koordinátarendszerben vannak a pontok és vektorok&lt;br /&gt;
* az openGL-ben hogyan lehet bekapcsolni?&lt;br /&gt;
&amp;lt;/b&amp;gt;&lt;br /&gt;
===Megoldás 1.)===&lt;br /&gt;
* elv és különbség a Gouraud-hoz képest: sünis könyv 209-210 oldalon &amp;lt;br&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Phong-árnyalás&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;Gouraud-árnyalás&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
|Az árnyalási egyenletben szereplő, a fényforrás és a kamera irányába mutató egységvektorokat, illetve &amp;#039;&amp;#039;&amp;#039;a normálvektort interpolálja&amp;#039;&amp;#039;&amp;#039; a háromszög csúcspontjaiban érvényes adatokból, az árnyalási egyenletet minden pixelre külön értékeli ki. A műveleteket ezen vektorok világ-koordinátarendszerbeli koordinátáin kell végrehajtani. ||A háromszögek csúcspontjaiban értékeli ki a fényforásból odajutó fény visszaverődést. Az illuminációs képlet alkalmazásánál az eredeti felület normálvektorával dolgozik, azaz a tesszeláció során kiadott pontokban a normálvektort is meg kell határozni. A háromszög belső pontjainak &amp;#039;&amp;#039;&amp;#039;színét&amp;#039;&amp;#039;&amp;#039; a csúcspontok színéből &amp;#039;&amp;#039;&amp;#039;lineárisan interpolálja&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|}&lt;br /&gt;
* Világkoordinátarendszer&amp;lt;br&amp;gt;&lt;br /&gt;
* nem lehet (csak GL_FLAT (konstan árnyalás) és GL_SMOOTH (Gouraud árnyalás) van )&amp;lt;br&amp;gt;&lt;br /&gt;
==2.)==&lt;br /&gt;
&amp;lt;b&amp;gt;A z=0 síkon egy r sugarú, textúrázott golyó gurul az x tengely mentén v sebességgel. A t=0 időpillanatban éppen az origó felett van, a textúra kép felső része a gömb tetéjen z=2r, az alsó rész a gömb alján van z=0. Írjon egy c függvényt, mely az openGL-lel kirajzoltatja a golyót a saját színével (azaz illumináció nélkül) a t időpillanatban GL_QUADS primitívek felhasználásával. A golyó textúráját már átadtuk az openGL-nek a ==text== textúra azonosítóra hivatkozva. A kamera az 1 0 0 pontban van, mindig a gömb közepére néz, függőleges iránya 0 0 1 látószöge 90 fok, az ablak szélesség/magasság aránya 1, az első vágósík távolsaga 0.1, a hátsóé 1000. A következő függvények használata javasolt: &lt;br /&gt;
&amp;lt;/b&amp;gt;&lt;br /&gt;
==glLoadIdentity, glRotatef, ...== &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;(A golyó mozgásállapotának meghatározása 1p, a gömb tesszellációja 5p transzformációk beállítása 4p)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Megoldás 2.)===&lt;br /&gt;
&lt;br /&gt;
Vö.: &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;kamerabeállítás - Render()&amp;#039;&amp;#039;&amp;#039; süni 23-25. oldal&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;gomb animáció - Animate()&amp;#039;&amp;#039;&amp;#039; süni 324. oldal&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;gömb explicit egyenlete - getX(),getY(), getZ()&amp;#039;&amp;#039;&amp;#039; süni 71. oldal.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;paraméteres felületek tesszellációja - Drawit()&amp;#039;&amp;#039;&amp;#039; süni 101-102 oldal&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Gomb {&lt;br /&gt;
&lt;br /&gt;
float x0, y0, z0; // kezdeti poz&lt;br /&gt;
float x, y, z;	 // aktual poz&lt;br /&gt;
float R;			 // gomb sugar &lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
	Gomb (float x00,float y00,float z00,float vx0,float vy0,float R0){&lt;br /&gt;
			x0=x00; y0=y00; z0=z00; &lt;br /&gt;
			vx=vx0; vy=vy0;&lt;br /&gt;
			R=R0;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
	float getX(int u, int v){&lt;br /&gt;
		return x0+R*cos(2*PI*u)*sin(PI*v);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	float getY(int u, int v){&lt;br /&gt;
		return y0+R*sin(2*PI*u)*sin(PI*v);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	float getZ(int u, int v){&lt;br /&gt;
		return z0+R*cos(PI*v);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void Animate(float t){&lt;br /&gt;
			x=x0+vx*t;&lt;br /&gt;
			y=y0+vy*t;&lt;br /&gt;
			z=R;  &lt;br /&gt;
			}&lt;br /&gt;
	void Drawit(int M, // u felosztások száma&lt;br /&gt;
					int N){ // v felosztások száma&lt;br /&gt;
&lt;br /&gt;
		for (int i=0; i&amp;amp;lt;M; i++){&lt;br /&gt;
				for (int j=0; j&amp;amp;lt;N; j++){&lt;br /&gt;
		//az i,j négyzet négy csúcsa&lt;br /&gt;
		glBegin(GL_QUADS);&lt;br /&gt;
&lt;br /&gt;
		//normálvektor kiszámítása&lt;br /&gt;
		float nx=getX((i+0.5)/M,(j+0.5)/N)-x0;&lt;br /&gt;
		float ny=getY((i+0.5)/M, (j+0.5)/N)-y0;&lt;br /&gt;
		float nz=getZ((i+0.5)/M,(j+0.5)/N)-z0;		&lt;br /&gt;
		float sum=sqrt(nx*nx+ny*ny+nz*nz);&lt;br /&gt;
		&lt;br /&gt;
		glNormal3f(nx/sum, ny/sum, nz/sum);&lt;br /&gt;
&lt;br /&gt;
		glTexCoord2f( i/M,	 j/N);	 glVertex3fv(getX( i/M,		j/N),	 getY( i/M,	  j/N),	  getZ( i/M,	  j/N));&lt;br /&gt;
		glTexCoord2f((i+1)/M, j/N);	 glVertex3fv(getX((i+1)/M,	j/N),	 getY((i+1)/M,  j/N),	  getZ((i+1)/M,  j/N));&lt;br /&gt;
		glTexCoord2f( i/M,	(j+1)/N); glVertex3fv(getX( i/M,	  (j+1)/N), getY( i/M,	 (j+1)/N),  getZ( i/M,	 (j+1)/N));&lt;br /&gt;
		glTexCoord2f((i+1)/M, j+/N);	glVertex3fv(getX((i+1)/M,  (j+1)/N), getY((i+1)/M, (j+1)/N),  getZ((i+1)/M, (j+1)/N));&lt;br /&gt;
		glEnd();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Gombablak : public Application {&lt;br /&gt;
&lt;br /&gt;
Gomb * gomb&lt;br /&gt;
float time;&lt;br /&gt;
&lt;br /&gt;
public: &lt;br /&gt;
	 Gombablak() : application (&amp;quot;gomboc rajzolo moka&amp;quot;, 300, 300) {time=0;}&lt;br /&gt;
	 void Init();&lt;br /&gt;
	 void Render()&lt;br /&gt;
			{&lt;br /&gt;
			 glClearColor(0,0,0,0);									 // képernyő törlése&lt;br /&gt;
			 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); &lt;br /&gt;
			 glDrawBuffer(GL_BACK);									 // hátsó buffer használata&lt;br /&gt;
			 glMatrixMode(GL_PROJECTION);							 //projekciós mátrix mód&lt;br /&gt;
			 glLoadIdentity();&lt;br /&gt;
			 gluPerspective(90,1, 1, 1000)							// látószög, ablak arány , első vágósík , hátsó vágósík.&lt;br /&gt;
			 glMatrixMode(GL_MODELVIEW);							  // modell-nézeti mátrix&lt;br /&gt;
			 glLoadIdentity();&lt;br /&gt;
			 gluLookAt(1.0, 0.0, 0.0 ,								 // szem pozició  &lt;br /&gt;
						  gomb.x, gomb.y, gomb.z,					  // mindig a labda közepét nézzük&lt;br /&gt;
						  0.0, 0.0, 1.0)								  // függőleges irány&lt;br /&gt;
						  &lt;br /&gt;
			 gomb.Drawit(100,100);									  // mondvacsinált paraméterek az M és N-re	&lt;br /&gt;
			 SwapBuffers(wglGetCurrentDC());						 //duplabuffer csere&lt;br /&gt;
			 wglMakeCurrent(NULL,NULL);&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
	 Do_a_Step(float dt){&lt;br /&gt;
			time+=dt;&lt;br /&gt;
			labda(Animate(time);&lt;br /&gt;
			Render();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3.)==&lt;br /&gt;
&amp;lt;b&amp;gt;Adott a következő csúcspont árnyaló (Vertex Shader) és pixel árnyaló (pixel Shader)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct inputs{&lt;br /&gt;
	float4 pos:POSITION;&lt;br /&gt;
	float3 normal:NORMAL;&lt;br /&gt;
	float2 uv:TEXCOORD;&lt;br /&gt;
}&lt;br /&gt;
struct outputs{&lt;br /&gt;
	float4 hpos:POSITION;&lt;br /&gt;
float4 color:COLOR0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float 4 main(in float3 color:COLOR0):COLOR&lt;br /&gt;
{&lt;br /&gt;
	 float 4 c;&lt;br /&gt;
	c.xyz=color.xyz;&lt;br /&gt;
	c.w=1;&lt;br /&gt;
	return c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
outputs main(inputs IN)&lt;br /&gt;
{&lt;br /&gt;
	output OUT;&lt;br /&gt;
	OUT.hpos.x=IN.uv.x*IN.Pos.z;&lt;br /&gt;
	OUT.hpos.y=IN.uv.y*IN.Pos.z;&lt;br /&gt;
	OUT.hpos.z=IN.normal.z;&lt;br /&gt;
	OUT.hpos.w=IN.Pos.z;&lt;br /&gt;
	OUT.color=normalize(IN.normal);&lt;br /&gt;
	return OUT;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mit rajzol fel az ilyen árnyalók mellett a következő openGL program:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GlMatrixMode(GL_MODELVIEW);&lt;br /&gt;
GlloadIdentity();&lt;br /&gt;
GlLookAt(100, 200, 300,  0,0,0,  0,1,0);&lt;br /&gt;
GlMatrixMode(GL_PROJECTION);&lt;br /&gt;
GlLoadIdentity();&lt;br /&gt;
GluPerspective(90, 1, 0.1, 100);&lt;br /&gt;
GlNormal3d(2,0,0);&lt;br /&gt;
GlBegin(GL_QUADS);&lt;br /&gt;
GlTexCoord2f(0,0);	glVertex3f(100,100,100);&lt;br /&gt;
GlTexCoord2f(0,1);	glVertex3f(-20, 30, 150);&lt;br /&gt;
GlTexCoord2f(1,1);	glVertex3f(220, -30, -110);&lt;br /&gt;
GlTexCoord2f(1,0);	glVertex3f(-30, 100, -150);&lt;br /&gt;
GlEnd();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Válasz a kérdésre, rövid indoklással 5p&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===Megoldás 3.)===&lt;br /&gt;
&lt;br /&gt;
A PixelShader semmit nem csinál, csak beállítja az átlátszatlanságot 1-re: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	c.xyz=color.xyz;&lt;br /&gt;
	c.w=1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A VertexShader megváltoztatja a csúcspont koordinátait :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	OUT.hpos.x=IN.uv.x*IN.Pos.z;&lt;br /&gt;
	OUT.hpos.y=IN.uv.y*IN.Pos.z;	&lt;br /&gt;
	OUT.hpos.z=IN.normal.z;		  //3.koord. = normál vektor 3. koordinátája&lt;br /&gt;
	OUT.hpos.w=IN.Pos.z;			  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
és a színét is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OUT.color=normalize(IN.normal); //látjuk, hogy a szín csak normálvektortól függ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A program négyszöget rajzol, és közös normálvektor (2,0,0) van. Ennek normalizáltja (1,0,0) tehát négyszög csúcsa piros szín lesz.&lt;br /&gt;
&lt;br /&gt;
A csúcs koordináta számítás:&lt;br /&gt;
&lt;br /&gt;
Pl első csúcsra: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  GlTexCoord2f(0,0);	glVertex3f(100,100,100); //(u,v)=(0,0) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	OUT.hpos.x=IN.uv.x*IN.Pos.z = 0*100=0 &amp;lt;br&amp;gt;&lt;br /&gt;
	OUT.hpos.y=IN.uv.y*IN.Pos.z = 0*100=0 &amp;lt;br&amp;gt;&lt;br /&gt;
	OUT.hpos.z=IN.normal.z		= 0 &amp;lt;br&amp;gt;&lt;br /&gt;
	OUT.hpos.w=IN.Pos.z			= 100&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből az első csúcs: (0,0,0,100) -&amp;gt; (0,0,0)&lt;br /&gt;
&lt;br /&gt;
A többi hasonlóan kiszámíható: (0,1,0) (1,1,0) és (1,0,0)&lt;br /&gt;
&lt;br /&gt;
-- [[NandorG]] - 2006.12.31.&amp;lt;br&amp;gt;&lt;br /&gt;
-- [[HoaiNam|nam]] - 2007.01.06.&amp;lt;br&amp;gt;&lt;br /&gt;
-- [[AdamO|adamo]] - 2007.05.28.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>