Ako na OpenGL - tutorial

Programovacie jazyky, rady, poradňa...
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

  • 1.0 Úvod
Cavte, chcel by som ukazat moj projekt na ktorom pracujem vo svojom volnom case. Jedna sa o OpanGL a GLSL tutorialy. V clanku by som chcel ukazat, ako skompilovat zdrojovy kod pre vsetky bezne operacne systemy a vytvorit graficke okno v ktorom budem renderovat objekty. Zameriam sa hlavne na operacne systemy Linux a Windows. Zatial bude pouzitá OpenGL verzia 2.0.

Tutoriály nebudú umiestnené na tomto fóre, ako bolo spočiatku myslené, ale na stránkach sourceforge.net. Tu je vytvorený kompletný wiki systém založený na aplikácii Trac, kde sa dočítate všetky potrebné informácie. Priami odkaz na OpenGL tutoriály.

Tu nechávam priamu diskusiu k OpenGL. Vaše dotazy môžte písať aj na fórum tutoriálov. Priamy odkaz na projekt na sourceforge.

!!!Ak by mal niekto záujem sa podieľať na písaní týchto tutoriálov, budem rát, ak sa tu budú zhromažďovať aj iné zdrojové kódy od iných autorov, kt. mozem dat casom aj pristup pre zapisovanie na SVN,TRAC. Je to čisto dobrovoľná činnosť. :).!!!
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

pouzitie OpenGL je so SFML skoro rovnake ako v SDL, neurobis to radsej s nim, je modernejsie, viac OOP a rychlejsie co povies? inak super napad urobit tie tutorialy lebo na nehe su akoby zastarale veci (glaux) :)
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

Sam sa chystam prejist s SDL na SFML, ale az ked bude SFML na linuxackych repozitaroch. Momentalne nemam na to cas. V lete sa do toho pustim po skuskovom :).
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

SFML na linuxe ide v pohode, zadas len

Kód: Vybrať všetko

sudo apt-get install libsfml-dev
sudo apt-get install libglu-dev
//skusane na Linux Mint a Ubuntu
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

super, ak uz je sfml na repozitaroch, nesledujem to momentalne. Ako vravim v lete sa do toho pustim :). Ak uz to mas v linuxe spravene, tak si stiahni z nehe neaky SDL kod a skus ho spustit :). Vo windowse je to komplikovanejsie.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

ide to, SDL a OpenGL v CodeBlocks je funkcne :)
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

Codeblocks nepouzivam, tak super. Podarilo sa ti nieco vykreslit?
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

skusal som NeHe 2.cast vykreslenie bieleho trojuholnika a stvorca
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

skus tie zdrojaky, co som dal hore.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

funguju :), testovane na Ubuntu 10.10 cez Code::Blocks 10.05

//autoeditácia príspevku (07 Mar 2011, 16:54)
ale strasne pomaly sa to otaca, zvacsuje a pohybuje,je to v poriadku?
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

pisal som to asi dve hodiny, treba sa s tym pohrat, asi je tam iba velky sleep, skus si ho zemenit v Environment.cpp vo funkcii main(), je tam asi sleep(0.1), co je vela, daj tam 0.001. A iba to ide pomaly aleba to seka, lebo to je rozdiel. AK to neseka a iba ide pomaly, to je v poho, to znamena ze sa inkremantuje pohyb po malych castiach. Musim to este pozriet, lebo to troska zere viac procesor ako som cakal. Aky mas komp?

Pockaj, dorabam opitimalizaciu pre step, nieco tam mam na chu*a, dam vediet.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

ja viem ze povacsinou je to cakanim ale stalo sa mi uz aj ze SFML program mi na linuxe daval 70fps a na windowse 3000fps tak preto sa pre istotu pytam
komp
amd athlon 64 3800+ 2.41ghz jednojadro
radeon x1600 256mb
ram 2 gb
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

dal som hore novu verziu, optimalizoval som step a draw. Step sa vykresluje 4x rychlejsie ako draw, tak to aj ma byt. Vytazenie procesora je skoro o 40% nizsie ako predtym, co je super. Ale pouzil som na sleep procaku boost kniznice, mal by si ju mat standardne v GCC, ak ju tam nemas, tak ju nainstaluj. Skus to skompilovat a povec ako to ide.

V environment.cpp daj pozor na

Kód: Vybrať všetko

boost::this_thread::sleep(boost::posix_time::milliseconds(2.5));
je to z
#include "boost/thread/thread.hpp"
ak to skompilujes tak super, malo by to ist fajn.

//autoeditácia príspevku (09 Mar 2011, 14:44)
Skus teraz, boost som odstranil, ked si mal s tym problem a na sleep som pouzil standardnu C++ funkciu, vsetko by malo ist teraz fajn a bezat na standardnych C++ funkciach. Stiahni to a napis ako to ide.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

funguje :)
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

reDo napísal:ja viem ze povacsinou je to cakanim ale stalo sa mi uz aj ze SFML program mi na linuxe daval 70fps a na windowse 3000fps tak preto sa pre
Kompiloval som to pod windows a zistil som kde som mal chybu. To rozne FPS bolo v nastaveniach tvojej karty, preto mne to islo rychlo a tebe pomali. Tento problem som odstranil, ako? Precitaj si all tutorial 1. Dorobil som nove casovanie. Dalej bol tam zly DEPTH Testing, ked si rotoval kockami, zle sa prekryvali. Skus ako ti to pojde vo windowse aj v linuxe, malo by to byt rovnake. Nemalo by to skoro vobec zrat procak. V nastaveniach grafiky si mozes vypnut alebo zapnut synchronizaciu ramcov s monitorom a vidiet rozdiel. Dufam, ze raz niekto na tom postavi daky program a niekomu tie lekcie nieco daju, mas to objektovo orientovane skus to. Bol by som rad, keby ste to skusili viaceri a povedali, kde ste mali problem.
Kompilovane pod g++ 4.6.0 v Linuxe aj Windowse.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

Skusal som Lekcia č.2: Vykreslenie kocky, Linux Mint 10 a CodeBlocks 10.05, plne funkcne ;)

//autoeditácia príspevku (09 Júl 2011, 22:06)
mam jednu otazku co je do buducnosti lepsie sa ucit, OpenGL alebo DirectX, s ohladom na pracu v nejakej firme a pod lebo vacsina hier pouziva DirectX?
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

Prerabam kod do SFML, uz mam vytvorene okno, potom to tu dam.
OpenGL je certifikovany priemyselny standard, pouziva sa vsade a je free. Co Direct3D nie je, ten ti pojde iba na Windows OS. OpenGL sluzi iba na renderovanie. Ak potrebujes pracovat so sietou, zvukom, oknom ..., musis pouzivat rozne dalsie kniznice ako SDL,SFML. DirectX tvori jeden velky uceleny balik, ktory ma v sebe vsetko, co len potrebujes rendering,zvuk,siet,obraz,okno. Toto je hlavny dvovod preco sa pouziva na hry a este preto lebo Microsoft plati firmam, aby kodili hlavne pre ich platformu, preto ma o nieco lepsiu podporu od vyrobcov kariet.
Co sa tyka funkcnosti je to uplne to iste ci OpenGL alebo Direct3D, funkcnost ti skor urcuje samotna graficka karta, co dokaze.
Programovanie je v OpenGL jednoduchsie a nie je objektove, co je vyhoda. Direct3D je dost velky bordel a rovnaky kod ma aj 2x viac riadkov ako v OpenGL.
OpenGL je priemyselny standard, to znamena ze musi byt stabilny a dost nezavisli od verzii. To znamena, ze staru verziu kodu spustit pod novym OpenGL, v direct3D to nie je mozne, preto sa v priemysle a pod. moc nepouziva. Hlavna vyhoda OpenGL je, ze ho spustis na hociktorej platforme (Linux,Windows,Mac ...) v PC, mobile atd. Kod v OpenGL mozes po nakodeni predat. Microsoft Licencia take nieco neumoznuje, hlavne pri C#.

Co sa tyka tej prace vo firmach, to je rozne, ale prevysuje OpenGL. Direct3D su fakt hlavne tie hry. Ale ako vravim, moze to byt rozne.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

ok dakujem to mi staci ako jasna volba pre OpenGL ;)
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa johny3212 »

!!!Dalej v priprave!!!
1. Webový softvér na sourceforge Trac, kt. sluzi na riadenie projektov, chyb, problémov s dôrazom na jednoduchosť použitia. Bude tu vytvoreny wiki system, kde budu neskor presunute tutorialy.
https://sourceforge.net/apps/trac/opengltutorials/wiki
2. System pre spravu revizii zdrojovych kodov tutorialov, kde sa mozete priamo z vasho IDE (codeblosks,eclipse) pripojit na server so zdrojovymi kodmi a mat pod palcom neustale najnovsi kod a lekcie bez nutnosti pouzitia web rozhrania.
https://opengltutorials.svn.sourceforge ... tutorials/

//autoeditácia príspevku (14 Júl 2011, 22:51)
Uz to tam mas to SFML na stiahnutie, malo by to ist dobre. Skus tuto novu verziu vo windowse a napis, ja nemam na to cas prave :).
https://sourceforge.net/projects/opengltutorials/files/

Rovnako je spojazdneny SVN repozitar s kodmi, ak to vies pouzivat:
https://opengltutorials.svn.sourceforge ... ltutorials
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: Ako na OpenGL - tutorial

Príspevok od používateľa reDo »

Funguje, CodeBlocks 10.05, Windows XP SP3

//autoeditácia príspevku (26 Júl 2011, 11:46)
skusam vytvorit nejaky zakladny program ale nefunguje, neviete preco?

Kód: Vybrať všetko

#include <SFML/Window.hpp>

int InitGL(void)										// All Setup For OpenGL Goes Here
{
	glShadeModel(GL_SMOOTH);							// Enable Smooth Shading
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);				// Black Background
	glClearDepth(1.0f);									// Depth Buffer Setup
	glEnable(GL_DEPTH_TEST);							// Enables Depth Testing
	glDepthFunc(GL_LEQUAL);								// The Type Of Depth Testing To Do
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);	// Really Nice Perspective Calculations
	return 1;										// Initialization Went OK
}

int DrawGLScene(void)									// Here's Where We Do All The Drawing
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
	glLoadIdentity();									// Reset The Current Modelview Matrix
	glTranslatef(-1.5f,0.0f,-6.0f);						// Move Left 1.5 Units And Into The Screen 6.0
	glBegin(GL_TRIANGLES);								// Drawing Using Triangles
		glVertex3f( 0.0f, 1.0f, 0.0f);					// Top
		glVertex3f(-1.0f,-1.0f, 0.0f);					// Bottom Left
		glVertex3f( 1.0f,-1.0f, 0.0f);					// Bottom Right
	glEnd();											// Finished Drawing The Triangle
	glTranslatef(3.0f,0.0f,0.0f);						// Move Right 3 Units
	glBegin(GL_QUADS);									// Draw A Quad
		glVertex3f(-1.0f, 1.0f, 0.0f);					// Top Left
		glVertex3f( 1.0f, 1.0f, 0.0f);					// Top Right
		glVertex3f( 1.0f,-1.0f, 0.0f);					// Bottom Right
		glVertex3f(-1.0f,-1.0f, 0.0f);					// Bottom Left
	glEnd();											// Done Drawing The Quad							
	return 1;										// Everything Went OK
}

int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML OpenGL");

    InitGL();

    // Start game loop
    while (App.IsOpened())
    {
        // Process events
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();

            // Escape key : exit
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                App.Close();

            // Resize event : adjust viewport
            if (Event.Type == sf::Event::Resized)
                glViewport(0, 0, Event.Size.Width, Event.Size.Height);
        }

        DrawGLScene();
        App.Display();
    }

    return 0;
}
Napísať odpoveď