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ť. .!!!
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)
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 .
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.
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.
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
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.
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 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.
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?
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.
!!!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/
#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;
}