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: Mon Sep 26 20:10:11 Central Europe Daylight Time 2011