„Számítógépes grafika és képfeldolgozás - Vizsga, 2015.01.06.” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(Új oldal, tartalma: „Amennyiben ki tudjátok egészíteni, vagy hibás számolást találtok nyugodtan változtassátok a cikket. == 1. Feladat == Írjon OpenGL programrészletet, amely az …”)
 
8. sor: 8. sor:
  
 
A javasolt OpenGL függvények: glBegin, glEnd, glVertex, glNormal, glTexCoord, glMaterial, glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, ...);
 
A javasolt OpenGL függvények: glBegin, glEnd, glVertex, glNormal, glTexCoord, glMaterial, glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, ...);
 +
 +
 
== 2. Feladat ==
 
== 2. Feladat ==
 +
Az alábbi programban az eye, lookat, Right és Up a világ-koordinátarendszerbeli kameraparaméterek, jelentésük a nevükből következően értelemszerű. Mit csinál (mit jelenít meg) a program? (3p) Alakítsa át úgy, hogy az sugárkövetéssel egy világ-koordinátarendszerben lévő ellipszoidot jelenítséen meg, amelynek súlypontja (1, 2, 3), főtengelyei a koordinátatengelyekkel párhuzamosak és hosszuk 4, 5, 6. Az ellipszoid diffúz+Blinn típusú, kd=(0.1, 0.1, 0.1), ks=(2,3,4), shininess=200. A teret irányfényforrás világítja meg az (1,2,3) irányból, melynek intenzitása (3,3,3). Jelölje meg azokat a programsorokat, amelyeket változás nélkül felhasználhat és azokat, amelyeket ki kell törölni (3p). Csak az új részeket kell megírni, a sugármetszést és a normálvektort analitikusan kell számolni (14p).
 +
 +
 +
{| class="wikitable"
 +
|-
 +
|Display függvény
 +
|Vertex shader
 +
|Pixel shader
 +
|-
 +
|<pre>
 +
void Display() {
 +
  glBegin( GL_QUADS );
 +
  Vector p = lookat-Right+Up;
 +
  glTexCoord3f(p.x, p.y, p.z);
 +
  glVertex3f(-1, 1, 0);
 +
  p = lookat-Right-Up;
 +
  glTexCoord3f(p.x, p.y, p.z);
 +
  glVertex3f(-1, -1, 0);
 +
  p = lookat + Right - Up;
 +
  glTexCoord3f(p.x, p.y, p.z);
 +
  glVertex3f(1, -1, 0);
 +
  p = lookat + Right + Up;
 +
  glTexCoord3f(p.x, p.y, p.z);
 +
  glVertex3f(1, 1, 0);
 +
  glEnd();
 +
}
 +
</pre>
 +
|<pre>
 +
void main(
 +
  in  float4 hPosIn : POSITION,
 +
  in  float3 wPosIn : TEXCOORD0,
 +
  out float4 hPosOut: POSITION,
 +
  out float3 wPosOut: TEXCOORD0 )
 +
{
 +
  hPosOut = hPosIn;
 +
  wPosOut = wPosIn;
 +
}
 +
</pre>
 +
|X
 +
|}

A lap 2015. január 13., 06:29-kori változata

Amennyiben ki tudjátok egészíteni, vagy hibás számolást találtok nyugodtan változtassátok a cikket.

1. Feladat

Írjon OpenGL programrészletet, amely az alábbi textúrázott (glEnable(GL_TEXTURE_2D)), megvilágított (glEnable(GL_LIGHTING)) diffúz harmadrendű felületet jeleníti meg, mégpedig 2*100*100 háromszögre tesszellálva. A harmadrendű felület egyenlete:

[math]xyz = 1, \quad 1 \leq x \leq 10,\quad 1 \leq y \leq 10.[/math]

A teljes textúrát rá kell húzni a felületre, amely a felület diffúz visszaverődési tényezőit tartalmazza. Feltételezheti, hogy a textúrát és a transzformációkat már feltöltöttük a GPU-ra, a szempozíció z koordinátája 1-nél nagyobb, a lookat pont az origo, a mélységbuffer algoritmus engedélyezve van, a hátsólap eldobás viszont tiltva, valamint a fényforrásokat már beállítottuk (glLight). Megoldandó viszont az anyagtulajdonságok beállítása (2p), a textúrázási környezet beállítása (1p) és a csővezeték táplálása (7p). A normálvektort analitikusan kell számítani.

A javasolt OpenGL függvények: glBegin, glEnd, glVertex, glNormal, glTexCoord, glMaterial, glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, ...);


2. Feladat

Az alábbi programban az eye, lookat, Right és Up a világ-koordinátarendszerbeli kameraparaméterek, jelentésük a nevükből következően értelemszerű. Mit csinál (mit jelenít meg) a program? (3p) Alakítsa át úgy, hogy az sugárkövetéssel egy világ-koordinátarendszerben lévő ellipszoidot jelenítséen meg, amelynek súlypontja (1, 2, 3), főtengelyei a koordinátatengelyekkel párhuzamosak és hosszuk 4, 5, 6. Az ellipszoid diffúz+Blinn típusú, kd=(0.1, 0.1, 0.1), ks=(2,3,4), shininess=200. A teret irányfényforrás világítja meg az (1,2,3) irányból, melynek intenzitása (3,3,3). Jelölje meg azokat a programsorokat, amelyeket változás nélkül felhasználhat és azokat, amelyeket ki kell törölni (3p). Csak az új részeket kell megírni, a sugármetszést és a normálvektort analitikusan kell számolni (14p).


Display függvény Vertex shader Pixel shader
void Display() {
   glBegin( GL_QUADS );
   Vector p = lookat-Right+Up;
   glTexCoord3f(p.x, p.y, p.z);
   glVertex3f(-1, 1, 0);
   p = lookat-Right-Up;
   glTexCoord3f(p.x, p.y, p.z);
   glVertex3f(-1, -1, 0);
   p = lookat + Right - Up;
   glTexCoord3f(p.x, p.y, p.z);
   glVertex3f(1, -1, 0);
   p = lookat + Right + Up;
   glTexCoord3f(p.x, p.y, p.z);
   glVertex3f(1, 1, 0);
   glEnd();
}
void main(
  in  float4 hPosIn : POSITION,
  in  float3 wPosIn : TEXCOORD0,
  out float4 hPosOut: POSITION,
  out float3 wPosOut: TEXCOORD0 )
{
  hPosOut = hPosIn;
  wPosOut = wPosIn;
}
X