Archiwum kwiecień 2011


kwi 04 2011 Notka pierwsza
Komentarze: 0

Nie będę wymyślał ani udawał że jestem "programistą", więc konkretnie.Moim celem jest dzielenie się wiedzą i przy okazji utrwalanie własnej wiedzy pisząć tego bloga.Wybrałem na początek mojej przygody z programowaniem bibliotekę SFML-Simple and fast multimedia Library.Posiada ona obsługę zdarzeń ,wyświetlania sprite'ów oraz wspomaganie OpenGL jak przy SDL, ale dla mnie jest ona łatwiejsza i lepsza.Posiada również obsługę sieci oraz dźwięku.

Koniec głupot, na początek powiem skąd zaczerpnąć wiedzę podstawową o SFML znajduję się ona na stronie oficjalnej SFML oraz na stronie Polsko języcznej http://cpp0x.pl/kursy/.Po co mam pisać zbędne tutoriale jak obsługiwać zdarzenia itp jak jest ich pełno.Tak samo jeżeli chodzi o sam OpenGL ja osobiście uczę sie z tutoriala Nehe http://nehe.gamedev.net/, jest też w sieci wersja przetłumaczona na Polski wystarczy wpisać w googlach "Nehe pl".Więc po co zakładam tego bloga jeżeli podaję tylko linki do innych tutków ? Ano po to żeby pomóc takim jak ja używania SFML  z Opengl.Trudno w necie wyszukać takie porady ,trzeba samemu się uczyć.

 

Uczę się SFML od 2 dni, umiem tworzyć okno czy obsługiwać zdarzenia.Jest to bardzo łatwe więc pokażę odrazu jak zrobić prosty program wyświetlający sześcian.

Oczekuję że już masz zainstalowane biblioteki SMFL oraz skonfigurowane linkery które powinny wyglądać tak :

-lopengl32 -lglu32 -lglaux

-lsfml-system
-lsfml-window
-lsfml-graphics

Więc do dzieła.

Na początku oczywiście wczytanie bibliotek :

 

#include <iostream>     
#include <SFML/Graphics.hpp>
using namespace std;      

Przechodzimy do głownego bloku programu czyli:

 

int main()

{

 

Następnie tworzymy okno w SFML jest to banalne:

 

sf::RenderWindow App(sf::VideoMode(1024,768,32),"Naglowek", sf::Style::Fullscreen);                

//tworzenie okna

 

Czyli podajemy rozdziałkę ilość bitów, napis na pasku programu i ostanią informację na temat fullscreen'u(sf::Syle::Fullscreen jest niewymagane).

ok mamy okno.Teraz ustawiamy naszą perspektywę:


glMatrixMode(GL_PROJECTION);    //nie wiem do konca o co w tym chodzi ,ale jest potrzebne 
glLoadIdentity();                                   
gluPerspective(90.f, 1.f, 1.f, 500.f);   //omówię to poźniej

 

glShadeModel(GL_SMOOTH);// do ładnego wygładzania kolorów to jest shader

 

sf::Clock Clock;   //jest to zegar odlicza nam czas bedzie potrzebne do obracania modeli

 

Przechodzimy do głownej pętli programowej:

while (App.IsOpened())  //Główna pętla
{
sf::Event Event;
while (App.GetEvent(Event)) //Pętla do zdarzeń jak zamknięcie itd
{

if (Event.Type == sf::Event::Closed)
App.Close();


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


if (Event.Type == sf::Event::Resized)
glViewport(0, 0, Event.Size.Width, Event.Size.Height);



}
 

 App.SetActive();  //odpalamy okno
 glClear(GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT);  //czyścimy buffer

glMatrixMode(GL_MODELVIEW); //włączamy widok nowego obiektu 
glLoadIdentity();
glTranslatef(-0.f, 0.f, 0.f);//ustawiamy jego położenie

glRotatef(Clock.GetElapsedTime() * 50, 1.f, 0.f, 0.f);// to bedzie obracalo szescian na osi x
glRotatef(Clock.GetElapsedTime() * 30, 0.f, 1.f, 0.f);//to no Y
glRotatef(Clock.GetElapsedTime() * 90, 0.f, 0.f, 1.f);//a to na z

 

Teraz rysujemy nasz sześcian:

glBegin(GL_QUADS);


glVertex3f(-50.f, -50.f, -50.f);  //są to wierzchołki 4 pierwsze 1 sciany zaczynamy od lewego górnego
 glVertex3f(-50.f, 50.f, -50.f); // w funkcji podajemy wspolrzedne x,y,z
glVertex3f( 50.f, 50.f, -50.f);// pobaw sie tymi jednostkami a zrozumiesz ocb
glVertex3f( 50.f, -50.f, -50.f);

glVertex3f(-50.f, -50.f, 50.f);
glVertex3f(-50.f, 50.f, 50.f);
glVertex3f( 50.f, 50.f, 50.f);
glVertex3f( 50.f, -50.f, 50.f);

glVertex3f(-50.f, -50.f, -50.f);
glVertex3f(-50.f, 50.f, -50.f);
glVertex3f(-50.f, 50.f, 50.f);
glVertex3f(-50.f, -50.f, 50.f);

glVertex3f(50.f, -50.f, -50.f);
glVertex3f(50.f, 50.f, -50.f);
glVertex3f(50.f, 50.f, 50.f);
glVertex3f(50.f, -50.f, 50.f);

glVertex3f(-50.f, -50.f, 50.f);
glVertex3f(-50.f, -50.f, -50.f);
glVertex3f( 50.f, -50.f, -50.f);
glVertex3f( 50.f, -50.f, 50.f);

 glVertex3f(-50.f, 50.f, 50.f);
 glVertex3f(-50.f, 50.f, -50.f);
 glVertex3f( 50.f, 50.f, -50.f);
 glVertex3f( 50.f, 50.f, 50.f);

glEnd();

 

konczymy petle i program

 

App.Display();//rysuj
}

return EXIT_SUCCESS;//KONIEC
}

 

Nie jestem pewien czy to dziala bo nie moge sprawdzic tego co tutaj napisalem poniewaz siedze na PC z karta ATI radeon HD5770 z najnowszym sterownikiem ,ktory cos nie obsluguje SFML nie wiem czemu.Powinno dzialac jak nie to mozna sugerowac sie tutkami ktore podalem na wstepie mozna wyciagnac z nich wniski i porownac do tego co tutaj natworzylem.