# OpenGL fordítás segédlet

## OpenGL rövid ismertető

- C nyelvű programkönyvtár
  - Több száz C függvény és definíció összessége.

- Feladatai
  - Egyszerű grafikus elemek (egyenesek, háromszögek, négyszögek, poligonok, stb.) segítségével 3D tárgyak (felszínek) modellezése.
  - Geometriai transzformációk (elforgatás, eltolás, skálázás) segítségével ezek térben való elhelyezése.
  - Vetítési paraméterek megadásával (kamera helye, iránya, vetítés módja) 2D-re leképezés.
  - Megvilágítás modellezése.
  - Poligonokra képek feszítése, átlátszóság, köd modellezése.
  - Kvadratikus objektumok, paraméteres felszínek.
  - Árnyékolás.
  - Stb.

- Nem feladata viszont
  - Képek ablakban való megjelenítése.
  - Interakció a felhasználóval (billentyűlenyomás, egérkattintás, ablak átméretezés, stb.).

- Ezekre megoldás
  - Saját magunk oldjuk meg.
    - Nem portábilis (erősen függ az operációs rendszertől).
    - Megtanulása nehézkes lehet.
  - GLUT függvénykönyvtár használata.
    - Platformfüggetlen.
    - Könnyen megtanulható, használható.

## OpenGL megtalálható

- Számos platformon elérhető: pl. Windows, Linux, Unix, Mac OS.
- Hardveresen általánosan támogatott.
- OpenGL ES: Weben (webGL szabvány) és beágyazott rendszereken (okostelefonok: iOS, Android, Java ME).

## OpenGL + GLUT telepítése

- Az OpenGL a legtöbb operációs rendszerbe integrálva megtalálható (Windows, Linux, Mac OS X).
- A GLUT telepítésére általában szükség van.
- A grafikus hardver használatához meghajtóprogramot szükséges lehet telepíteni.
- Angol nyelvű leírás többféle rendszerhez (Visual Studio, Dev-C++, Unix): http://www.zeuscmd.com/tutorials/opengl/02-SettingUpYourEnvironment.php

- LINUX GLUT
  - freeglut3 és freeglut3-dev csomagok megkeresése és telepítése szükséges.
- Windows
  - A legcélszerűbb megoldás egy Linux rendszerű virtuális gépet beüzemelni és azon dolgozni.
  - GLUT Windows rendszeren
    - FreeGLUT Windows port (folyamatosan fejlesztik): http://www.transmissionzero.co.uk/software/freeglut-devel/
    - Nate Robins féle verzió (régi): glut-3.7.6-bin.zip.
  - Borland C/C++ 5.5 parancssori fordító
    - A GLUT használatra előkészített csomag elkérhető a gyakorlatvezetőktől.
  - Microsoft Visual Studio
    - Újabb verziók esetén szükséges lehet a GLEW csomag üzembe helyezése, mert az OpenGL támogatás megszünt. Segítséget nyújt pl. az alábbi YouTube videó (angol nyelven): Tutorial 1 - Setting up an OpenGL Project in Visual Studio 2010. GLEW használata esetén a forráskód elején el kell helyezni az

          #include <GL/glew.h>

      sort.
    - MS Visual Studio 6.0
    - Visual Studio .NET 2003, Visual Studio C++ 2005, Visual Studio C++ 2005 Express Edition
  - Visual Studio, Dev-C++, Unix (angol nyelvű leírás): http://www.zeuscmd.com/tutorials/opengl/02-SettingUpYourEnvironment.php
- Mac OS X
  - A rendszer tartalmazza a GLUT csomagot is.
  - A forráskód elején az `#include <GL/glut.h>` helyett `#include <GLUT/glut.h>` kell.
  - A fordítás a `Makefile` segítségével történik, ahogyan Linuxon is.
  - Újabb MacOS rendszereken szükség lehet a következők előzetes telepítésére:
    - XQuartz: X-Window környezet Mac-re. Korábbi változatokhoz: lista
    - XCode: fordítási környezet. Parancssori eszközök beállítása: Xcode -> Preferences (CMD + ,) Downloads ful, Components: Command Line Tools.

## OpenGL programok fordítása

- LINUX
  - Makefile használatával: `simple.c` példaprogram fordítása esetén.

        #	Makefile for OpenGL examples

        APPS = simple
        OBJ = $(APPS).o
        SRC = $(APPS).c

        CFLAGS = $(C_OPTS) -I/usr/include
        LIBS = -L/usr/X11R6/lib -lX11 -lXi -lglut -lGL -lGLU -lm -lpthread

        application:$(APPS)

        clean:
        	rm -f $(APPS) *.raw *.o core a.out

        realclean:	clean
        	rm -f *~ *.bak *.BAK

        .SUFFIXES: c o
        .c.o:
        	$(CC) -c $(CFLAGS) $<

        $(APPS): $(OBJ)
        	$(CC) -o $(APPS) $(CFLAGS) $(OBJ) $(LIBS)

        depend:
        	makedepend -- $(CFLAGS) $(SRC)

    Az `APPS` után kell megadni a program kiterjesztés nélküli nevét.

    Bizonyos Linux disztribúciók esetén az `-lXi` kapcsoló szerkesztési hibát okoz. Ekkor ezt a kapcsolót el kell távolítani a `Makefile`-ból!

  - Parancssorból: `make`
  - `./simple`

- Windows
  - A GLUT telepítés leírásánál megtalálható.

- Kapcsolat más programozási nyelvekkel
  - Wikipedia