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.
Dodaj komentarz