dodání ihned! nové
Pouze tento týden sleva až 80 % na e-learning týkající se PHP. Zároveň využij akce až 30 % zdarma při nákupu e-learningu. Více informací.
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
PHP week

Lekce 1 - 3D grafika v OpenGL a C++ - Úvod a instalace Nové

Vítejte u první lekce z on-line kurzu OpenGL, ve kterém se naučíte používat moderní OpenGL 4.6. Probereme si úplné základy, pokročilé použití knihovny a na konci si i naprogramujeme vlastní hru :)

Co je to OpenGL

OpenGL je tzv. grafické API, jinak-li rozhraní pro tvorbu aplikací počítačové grafiky. Je multiplatformní, takže ho můžeme používat třeba na Linuxu nebo Windows. Hlavní rolí OpenGL je umožnění interakce programu s grafickým procesorem, aby mohl využít jeho hardwarově-zrychleného vykreslování a výpočtů. OpenGL staví na architektuře klient-server, kde klient (program) posílá příkazy serveru (grafický procesor) a ten je vykonává. To je jeden z důvodů, proč se v OpenGL nepoužívá objektově orientované programování. OpenGL je navíc open source, takže je v něm možné vytvářet soukromé i komerční aplikace.

Instalace

Bohužel si nemůžeme všechno nainstalovat jedním klinutím. Všechny komponenty si musíme stáhnout a propojit s programem jednotlivě. V instalaci budeme používat knihovny pro 64-bitový Windows, ovšem jiné platformy by neměly být problém.

Vývojové prostředí

Jako naše vývojové prostředí budeme používat Visual Studio. Doporučuji použít nejnovější vydání Visual Studio 19, ovšem starší verze by měly fungovat bez problémů. Nejnovější verzi si můžete stáhnout na https://visualstudio.microsoft.com/cs/ . Ve Visual Studio Installer si nezapomeňte dostáhnout modul Vývoj desktopových aplikací pomocí C++.

Pokud již máte nainstalované Visual Studio a potřebný modul, vytvořte si nový projekt a zvolte si Console App. Konzoli budeme používat pro prozatímní debuggování a až budeme tvořit naší hru, tak si jí v nastavení vyřadíme z kompilace. Po vytvoření projektu na něj klikněte pravým tlačítkem a zvolte Properties. Zde budeme připojovat OpenGL k našemu projektu.

Potřebné knihovny a jejich stažení

Pro vývoj v OpenGL budeme potřebovat tři hlavní knihovny:

  • GLEW - umožňuje používání správné verze OpenGL pro každou implementaci
    • u sekce Downloads zvolte Binaries a tu stáhněte
  • GLFW - umožňuje jednoduše zpracovávat vstupy a vytvářet okna
    • zase budeme stahovat binárky, pro nás to bude 64-bit Windows binaries
  • GLM - umožňuje používání pokročilých matematických výpočtů
    • zvolte si nejnovější verzi a dole u kolonky Assets stáhněte .zip archiv (ne source code)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

pokud si nejste jistí, co stáhnout, tak dám všechny potřebné archivy dolů ke stažení

Propojení knihoven s projektem

Po stažení všech potřebných knihoven si pro ně vytvořte složku, odkud je budeme importovat. Zvolte si lokaci, která je pevná a nezmění se. Do této složky si rozbalte všechny tři archivy a přejmenujte je pouze na zkratky glew, glfw a glm.

Nyní se vraťme na okno Properties, které jsme si předtím otevřeli. Nahoře si nastavte Platform na svou platformu, v našem případě 64x.

Include directories

Nejdříve musíme kompileru přidat cesty ke kódu, který budeme includovat. V Properties okně najeďte na Configuration Properties -> C/C++ -> General -> Additional Include Directories, klikněte do volného místa napravo, klikněte na šipku a zvolte <Edit...>. Tím se nám otevře nové okno. Zvolte první tlačítko New Line, klikněte na ... a přidejte následující složky:

  • C:\...\knihovny\glew\include
  • C:\...\knihovny\glfw\include
  • C:\...\knihovny\glm

Následně zvolte OK a v Properties okně Použít.

Library directories

Dále musíme linkeru ukázat, kde se nachází jednotlivé knihovny. Proces bude stejný jako v předchozím kroku, ale následující složky budeme přidávat do Configuration Properties -> Linker -> General -> Additional Library Directories a hodnoty budou pouze dvě:

  • C:\...\knihovny\glew\lib\Release\x64 (poslední složka závisí na platformě)
  • C:\...\knihovny\glfw\lib-vc2019 (poslední složka závisí na použité verzi Visual Studia)

Aditional dependencies

Jako poslední krok musíme ještě přidat názvy samotných knihoven, které chceme používat. Proces bude zase velice podobný předchozím krokům. Přesuňme se na Configuration Properties -> Linker -> Input -> Additional Dependencies a po otevření okna se zde místo tlačítek nachází pouze textové pole, do kterého vložíme tyto odřádkované hodnoty:

  • opengl32.lib
  • glew32.lib
  • glfw3.lib
  • glfw3dll.lib

Tímto bychom měli mít všechno potřebné nastaveno. Nezapomeňte kliknout na tlačítko Použít, ať se nám všechny změny uloží. Nyní zavřeme okno Properties a vrátíme se do Visual Studia.

Před psaním kódu se ještě musíme ujistit, že se kód kompiluje pro naší platformu. To zjistíme tak, že se podíváme na druhý řádek lišty (nahoře), kde uvidíme dvě drop-down menu. Jejich hodnoty by měly být defaultně nastaveny na Debug a x86. Druhou hodnotu musíme nastavit na tu platformu, na kterou jsme linkovali knihovny. Pokud tam bude nesprávná platforma, tak by se objevil problém hned po naincludování OpenGL souborů, protože by je kompiler nenašel.

Pro ověření správnosti instalace si můžete zkusit naincludovat hlavičkové soubory knihoven:

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>

using namespace glm;

int main(void)
{

}

Pokud jste postupovali správně, kód by neměl ukazovat žádné chyby a měl by se bez problémů zkompilovat.

Tímto jsme si úspěšně stáhli a otestovali všechny klíčové moduly. Pokud se vám nepovedlo stáhnout správné knihovny, jsou níže ke stažení.

V další lekci, 3D grafika v OpenGL a C++ - Vytvoření okna, si popíšeme souřadnicový systém a otevřeme si naše první okno.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1x (10.51 MB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

Všechny články v sekci
OpenGL - 3D grafika v C++
Přeskočit článek
(nedoporučujeme)
3D grafika v OpenGL a C++ - Vytvoření okna
Článek pro vás napsal Richard Bleier
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Aktivity

 

 

Komentáře

Avatar
Miroslav Vojtek
Redaktor
Avatar
Miroslav Vojtek:10. listopadu 23:21

Ahoj super, že se někdo pustil po dlouhé době do tutoriálů pro Opengl. Jsem zvědav jak vyřešíš rychlost rotační matice pro GLM knihovnu, protože pokud vím tak jim to možná blbne doteď. Tedy problém je, že nastavená rychlost otáčení objektu je rozdílná, když to pustíš na rozdílně výkonných PC a i když tomu dáš výpočet synchronizace času snímku tzv. frameTime.

Odpovědět
10. listopadu 23:21
Programování je také evoluce
Avatar
Richard Bleier
Tým ITnetwork
Avatar
Odpovídá na Miroslav Vojtek
Richard Bleier:12. listopadu 0:09

Ahoj,

díky, že tě zaujaly moje OpenGL tutoriály. Pokusím se je psát pravidelně :-)

Co se týče tvého dotazu ohledně synchronizace rychlosti rotace, tak bych tento problém nejspíše vyřešil pomocí tzv. delta time. Knihovna GLFW obsahuje funkci glfwGetTime(), která ti vrátí aktuální time-stamp. Při odečtení času na začátku a konci cyklu získáš delta time, kterým vynásobíš rychlost rotace a tím vypočteš přesnou hodnotu (nejen) rotace. Podle mého názoru jde o poměrně přesný a spolehlivý způsob synchronizace.

pozn.: Jako alternativní knihovna pro měření času by se dala použít <chrono>, avšak záleží na implementaci.

 
Odpovědět
12. listopadu 0:09
Avatar
Miroslav Vojtek
Redaktor
Avatar
Miroslav Vojtek:12. listopadu 13:51

Ano ať už použiješ jakoukoliv metodu pro výpočet aktuálního snímku, tak i přesto s GLM funkcí pro rotaci se to neotáčí stejně rychle. Proto jsem se musel vzdát knihovny GLM a dát tam upravené pro vlastní použití zdrojové kódy (vektory, matice, a další) od jiných autorů a už to běželo tak jak mělo. Prostě tam GLM má někde myslím bug a asi v použití výpočetní přesnosti pro daný výpočet rotační matice. Ono jak jsem pracoval s tou knihovnou tak tam byly ještě pár drobností, které mně vadily. Jinak je to skvělá knihovna, přehledná a rychle použitelná.

Odpovědět
12. listopadu 13:51
Programování je také evoluce
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Patrik Valkovič
Člen IT Redactor Gang
Avatar
Odpovídá na Miroslav Vojtek
Patrik Valkovič:12. listopadu 18:25

Já používal rotační matici a nebyl s tím problém :D A těch pár bajtů navíc už dnes není zase takový deal.

Odpovědět
12. listopadu 18:25
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Miroslav Vojtek
Redaktor
Avatar
Odpovídá na Patrik Valkovič
Miroslav Vojtek:12. listopadu 20:30

Ahoj a používal si vlastní rotační matici nebo tu přes GLM knihovnu a nebo ještě původní už zastaralou glRotatef?

Odpovědět
12. listopadu 20:30
Programování je také evoluce
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.