# Példaprogramok az OpenGL megjelenítési módokra

## OpenGL poligon módok

Példaprogramok: `kup.c` és `kup2.c`

Az OpenGL a síkidomok két lapját megkülönbözteti, az előlapokra és a hátlapokra más-más megjelenítési beállításokat adhatunk meg. Az előlapok/hátlapok a síkidomok modellezésekor a csúcspontjaik megadási sorrendje alapján definiálódnak.

Az előlapok vagy a hátlapok megjelenítése kikapcsolható. Célszerű abban az esetben használni, amikor biztosak vagyunk abban, hogy a kérdéses lapok biztosan nem jelenhetnek meg.

Az OpenGL síkidomok modellezésekor az előlapokra és a hátlapokra az alábbi megjelenítési beállításokat biztosítja:

1. A síkidomok területe kitöltve jelenik meg. A kitöltés lehet a csúcspontokhoz rendelt színek átmenetéből képzett (`GL_SMOOTH`) vagy egyszínű (`GL_FLAT`).

   `glShadeModel( GL_SMOOTH );` | `glShadeModel( GL_FLAT );`

2. Csak a síkidomok körvonalai jelennek meg.

   Előlapok és hátlapok `glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );` | Csak előlapok `glPolygonMode( GL_FRONT, GL_LINE );` `glEnable( GL_CULL_FACE );` `glCullFace( GL_BACK );`

3. Csak a síkidomok csúcspontjai jelennek meg. Ritkán alkalmazzuk.

   `glPointSize( 5.0 );` `glPolygonMode( GL_FRONT_AND_BACK, GL_POINT );`

## 3D megjelenítés a poligonmódok felhasználásával

Példaprogram: `kup2.c`

| Megjelenítés csak körvonalakkal. Probléma: a 3D hatás nehezen érvényesül.
| Megjelenítés csak az előlapok körvonalaival. Probléma: a takarásban lévő objektumok körvonalai is megjelennek.
| Megjelenítés kitöltött poligonokkal. Probléma: ha a szomszédos oldalak színe egyezik, akkor a közöttük futó él nem jelenik meg. Lehetséges megoldás: szomszédos oldalak színe legyen különböző. Ez viszont a GLUT modellező függvényeivel nem oldható meg.
| Megjelenítés kitöltött és drótvázas együttesen. Megoldás: először kitöltötten modellezünk, majd a PolygonMode függvénnyel drótvázasra váltunk, más modellezési színt állítunk be, és kirajzolunk mindent újra. Célszerű a modellező függvényeket külön függvényben elhelyezni. Az alábbi függvényhívásokat célszerű a program elején megadni a mélységellenőrzés problémájának kiküszöböléséhez:
      // Avoid flickering wire model
      glEnable( GL_POLYGON_OFFSET_FILL );
      glPolygonOffset( 1.0, 2.0 );

Last modified: Sun Oct 23 11:17:05 Central Europe Daylight Time 2011