https://github.com/naghim/fft-lab09
https://github.com/naghim/fft-lab09
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/naghim/fft-lab09
- Owner: naghim
- Created: 2023-03-23T13:24:27.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-27T09:49:56.000Z (almost 2 years ago)
- Last Synced: 2025-01-08T02:53:07.521Z (about 1 year ago)
- Language: C++
- Size: 10.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Labor 9
## OpenGL
A mai labororán az OpenGL-t fogjuk használni és ezzel fogunk elemenseket megjeleníteni, mozgatni. Az OpenGL (Open Graphics Library) egy részletesen kidolgozott szabvány. Olyan API-t takar, amely segítségével egy egyszerű, szabványos felületen keresztül megvalósítható a grafikus kártya kezelése és a háromdimenziós grafika programozása. Az interfész több ezer különböző függvényhívásból áll, melynek segítségével a programozók szinte közvetlenül vezérelhetik a grafikus kártyát, segítségükkel 3 dimenziós alakzatokat rajzolhatnak ki, és a kirajzolás módját szabályozhatják. Széleskörűen használják a virtuális valóság létrehozatalában, a tudományos élet különböző területein, és szimulátorok esetében is.
### OpenGL összekötése QT-vel
A projektfájlt (`.pro`) egészítsük ki a következőkkel:
`QT += opengl`
, illetve `LIBS += -lOpengl32`
A headerbe írjuk be az alábbi könyvtárakat:
```
#include
#include
#include
#include
```
### Példa program
Az `OpenGLTriangle` mappában található egy példa program, amely megjelenít OpenGL segítségével egyetlen egy színes háromszöget. A példaprogram segítségével megfigyelhető, hogy hogyan működik egy kezdetleges Qt megvalósítású OpenGL program. Ha a billentyűzettel a W és S betűket lenyomjuk, a háromszög közelebb, illetve távolabb kerül a kamerától (valójában a kamera pozíciója változik, nem a háromszögé).
Ajánlott statikus megjelenítés esetén, hogy ne updateljük a frameet mindig, csak akkor, amikor változik is valami a képernyőn. Az OpenGL-t megkérhetjük, hogy frissítse a képet a `requestUpdate` függvénnyel. Amennyiben folyamatosan változik a kép, ajánlott beállítani az automatikus újrarendelést a `setAnimating` függvény segítségével.
## Feladatok
1. Írjunk egy programot, mely OpenGL segítségével megjelenít és kiszínez egy téglalapot és egy háromszöget.

2. Írjunk egy programot, mely OpenGL segítségével megjelenít és kiszínez egy kockát.
- Készítsük el mind a 6 oldalát, s lásssuk el más-más színnel.
- Ezek után forgassuk meg az alakzatunkat.

A perspektíva beállításához segédfüggvény:
```cpp
void glPerspective( GLdouble fov, GLdouble aspectRatio, GLdouble zNear, GLdouble zFar )
{
GLdouble rFov = fov * 3.14159265 / 180.0;
glFrustum( -zNear * tan( rFov / 2.0 ) * aspectRatio,
zNear * tan( rFov / 2.0 ) * aspectRatio,
-zNear * tan( rFov / 2.0 ),
zNear * tan( rFov / 2.0 ),
zNear, zFar );
}
```
3. Írjunk egy programot, mely OpenGL segítségével megjelenít egy megvilágított színes [tetraédert](https://hu.wikipedia.org/wiki/Tetraéder), melyet az „wasdqe” és „rt” billentyűk segítségével mozgatni és forgatni tudunk:
- előre-hátra mozgatás (w-s)
- jobbra-balra mozgatás (a-d)
- fel-le mozgatás (q-e)
- forgatás balra (r)
- forgatás jobbra (t)