# Bevezetés a 3D modellezésbe

## Kapcsolódó anyagrész

- Mélységellenőrzés

  - Példaprogram: `kup.c` (kúp modellezése)

  - Poligonok kirajzolása
    - A poligonok vetületi képeinek kirajzolása a 2D ablakba a definiálásuk sorrendjében történik.
    - Emiatt a később definiált, de a nézőpontunktól távolabbi poligon felül fogja rajzolni az őt átfedő közelebbit.
    - Mélységellenőrzés alkalmazásával: az OpenGL minden kirajzolt képponthoz megjegyzi, hogy milyen távolságra volt a poligondarab a nézőpontunktól. Később, ha ugyanarra a képpont helyre újabb pont esik, akkor a rajzolás csak akkor fog megtörténni, ha ennek a távolsága kisebb.

  - Mélységellenőrzéshez szükséges lépések
    - `main()`: `glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );`
    - `SetupRC()`: `glEnable( GL_DEPTH_TEST );`
    - `RenderScene()`: `glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );`

  - Poligon megjelenítési módok összefoglalása:

  - További megjelenítési lehetőségek: `kup2.c` illetve kapcsolódó részletes magyarázat.

## GLUT modellező függvények

- Alakzatok: gömb, kocka, kúp, tórusz, dodekaéder, oktaéder, tetraéder, ikozaéder, teáskanna.
- Kitöltési módok: kitöltött (Solid), drótvázas (Wire).
- Függvények leírása (angolul): ../../GLUTSpec3/node80.html
- Példaprogramok
  - `GLUTObjects.c`
  - `GLUTObjects2.c`
  - Használat
    - Kurzor mozgató nyilak: forgatás
    - Shift + kurzor mozgató nyilak: objektum, kitöltési mód váltás
    - F1-F4: függvény paraméterének növelése
    - Shitf + F1-F4: függvény paraméterének csökkentése

## Keretprogramok

- `alap1.c`: 2D modellezésre; RenderScene, SpecialKeys, ChangeSize (párhuzamos vetítés)
- `alap2.c`: 3D modellezésre; alap1 + Keyboard, Timer, Idle, párhuzamos és perspektív vetítés, objektumok körülforgatása
- `alap3.c`: 3D modellezésre; alap2 + menürendszer

## Feladatok

1. Téglatest, henger modellezése grafikus primitívek használatával (`GL_TRIANGLES`, `GL_QUADS`, `GL_TRIANGLE_STRIP`, `GL_QUAD_STRIP`).

2. Oszlop modellezése (csonkakúpokból összerakva).

   Ötlet:

   - Készíts olyan függvényt, amely a palást modellezését végzi. Ennek meg lehessen adni a két alapkör középpontját (jelölje ezeket `(x1, y1, z1)` és `(x2, y2, z2)`), a két alapkör sugarát (lehetnek különbözők is!), valamint a szabályos sokszög csúcspontszámát. Az alapkörök pontjait az `Y=y1` és `Y=y2` síkokban modellezd.
   - Az alapkörök modellezése egy másik függvénnyel történhet, hasonló módon.

3. Oszlopcsarnok modellezése.

   - Részletes leírás.