• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

OpenGL - Pierwszy program.

Object Storage Arubacloud
0 głosów
849 wizyt
pytanie zadane 28 kwietnia 2017 w C i C++ przez Knayder Nałogowiec (37,640 p.)

Witam, dzisiaj odebrałem książkę do nauki OpenGL, mianowicie "OpenGL Księga Eksperta Wydanie VII".

W pierwszym dziale, uczę się stworzyć pierwsze okno i wyczyścić jego bufor. Taka prosta funkcja.

Autor zaleca używać (Prawdopodobnie napisanego przez niego) frameworka "sb7". Jest to klasa, która ma być bazową klasą naszej.
W książce podany był link do przykładowych programików, tego frameworke i parę innych plików potrzebnych do OpenGL. Dodatkowo plik .txt z informacją jak zbudować projekt: (Korzystam z windowsa)
 

OpenGL. Superbiblia - jak zbudować kod źródłowy
=====================================================

Kod źródlowy korzystuje narzędzie CMake. Przykłady korzystają również z biblioteki GLFW,
której kopia znajduje się w folderze `extern`. Można skorzystać z innej kopii biblioteki,
ale pozostawiamy to jako ćwiczenie. Oto instrukcje dla obsługiwanych platform.

Windows / Microsoft Visual Studio 2013
--------------------------------------

Zainstaluj CMake. Pliki binarne są dostępne na stronie http://www.cmake.org/.
Upewnij się, że CMake znajduje się na ścieżce wykonania.
Uruchom wiersz poleceń i przejdź do folderu z kodem.




### Budowanie GLFW

Jeśli zamierzasz skorzystać z biblioteki GLFW z archiwum, wejdź do folderu biblioteki GLFW,
czyli `extern/glfw-3.0.4` i wpisz:

    cmake -G "Visual Studio 12" .

(Tak, to nie błąd - Visual Studio 12 to 2013)

Otwórz plik GLFW.sln w Visual Studio i zbuduj wersje Debug i Release biblioteki.

Skopiuj i zmień nazwę wynikowych bibliotek glfw3:

* Skopiuj `glfw-3.0.4/src/Debug/glfw3.lib` do folderu `lib` i **zmień nazwę na glfw3_d.lib**.
* Skopiuj `glf3-3.0.4/src/Release/glfw3.lib` do folderu `lib`, ale nie zmieniaj nazwy.




### Budowanie przykładów

Uruchom wiersz poleceń i przejdź do folderu z kodem. Wpisz:

    cmake -G "Visual Studio 12" ..

Otwórz wynikowy plik projektu superbible7.sln w Visual Studio.

Przykłady po zbudowaniu znajdą się w folderze `bin`.

Linux
-----

Podobnie jak w systemie Windows, projekt używa CMake do budowania plików.
Zastosuj metodę instalacji narzędzia odpowiednią dla dystrybucji systemu Linux.
W przypadku dystrybucji bazujących na wersji Debian (na przykład Ubuntu lub Mint),
wykonaj następujące polecenie:

    sudo apt-get install cmake

Konieczne jest też zaspokjenie zależności. Potrzebne będą nagłówki i biblioteki GL i
GLX (najczęściej znajdują się w pakiecie Mesa) oraz biblioteka GLFW.
Choć można zastosować bibliotekę w wersji dołączonej do kodu, najczęściej
łatwiej będzie skorzystać z wersji dystrybuowanej wraz z systemem Linux.

Po przygotowaniach wejdź do folderu "build" w folderze z kodem źródłowym
i wykonaj polecenia:

    cmake ..
    make

Pliki zostaną skompilowane do folderu 'bin'.

Inne platformy
---------------

Kod prawdopodobnie uda się uruchomić na innych platformach, jeśli nie są
wyjątkowo nietypowe, ale nic poza Windowsem (visual Studio) i Linuksem
nie zostało przetestowane. Musisz również znaleźć odpowiedni sterownik
OpenGL 4.x dla używanej platformy. CMake nie powinien mieć trudności
z przygotowaniem kodu źródłowego do kolpilacji w innych środowiskach,
na przykład Code::Blocks lub Eclipse, ale nie było to testowane.


*Pamiętaj: NAWET JEŚLI UDA SIĘ SKOMPILOWAĆ KOD NA ULUBIONEJ PLATFORMIE,
POTRZEBNE BĘDĄ RELATYWNIE NOWE STEROWNIKI OpenGL 4.x, ABY JE URUCHOMIĆ.
PROSZĘ NIE OBWINIAĆ AUTORÓW KSIĄŻKI, ŻE KOMPUTER NIE OBSŁUGUJE OpenGL 4.x.
DZIĘKUJĘ*

Uruchamianie przykładów
-------------------

Przykłady uruchamiaj z folderu bin, bo wiele z nich do działania wymaga
elementów znajdujących się w podfolderze media folderu bin.

Zrobiłem wszystko co było napisane w poradniku, wszystko się kompiluje (0 błędów, ale z 3 skip'y). Jednak gdy próbuję uruchomić jakiś przykładowy exec (Były tam pliki źródłowe przykładowych programów, które się dobrze skompilowały) to nie ma żadnych errorów, ani nic, a okno się nie pojawia. Nic się nie pojawia.
Ktoś może wie dlaczego?

Zastąpiłem kod jednej aplikacji, kodem który był napisany w książce i który powinien uruchomić okno i wyświetlić jego zawartość na czerwono. Tak samo jak poprzednio, program się kompiluje bez problemów, aczkolwiek nie pojawia się żadne okno, a program od razu się zamyka (O ile w ogóle się otworzył).
 

#include <sb7.h>

class myApp : public sb7::application {
public:
	void render(float deltaTime) {
		static const GLfloat red[] = { 1.f, 0.f, 0.f, 1.f };
		glClearBufferfv(GL_COLOR, NULL, red);
	}
};

DECLARE_MAIN(myApp);

Pozdrawiam.

komentarz 28 kwietnia 2017 przez criss Mędrzec (172,590 p.)
Raczej ciężko cokolwiek powiedzieć nie wiedząc jak wygląda sb7::application I makro DECLARE_MAIN

1 odpowiedź

+2 głosów
odpowiedź 28 kwietnia 2017 przez criss Mędrzec (172,590 p.)
wybrane 29 kwietnia 2017 przez Knayder
 
Najlepsza

W swojej klasie myApp zdefiniowałeś metode void render(float), a w sb7::application zdefiniowana jest void render(double). To sprawia, że zamiast nadpisywać metode z klasy bazowej, tworzysz jej przeładowanie. W makrze DECLARE_MAIN jest wywołanie metody run(), a ta z kolei wywołuje render(double), która w klasie bazowej jest pusta (nic nie robi), a przez ciebie nie została nadpisana

Problemu by nie było, gdyby:

  • autor zadeklarował metode render w sb7::application jako czysto wirtualną (=0) - kompilator nie pozwoliłby utworzyć obiektu myApp, bo czysto wirtualna metoda z klasy bazowej nie została zaimplementowana
  • gdybyś ty używał słowa kluczowego override w deklaracjach nadpisywanych metod - kompilator by cie wtedy poinformował, że w klasie bazowej nie ma metody render(float)

Także wystarczy, że zmienisz typ argumentu w swojej metodzie na double. A najlepiej jakbyś dorzucił jeszcze override i pamiętał o korzystaniu z niego :)

komentarz 29 kwietnia 2017 przez criss Mędrzec (172,590 p.)
Prosz :) Też się trochę dowiedziałem
komentarz 30 czerwca 2017 przez jpacanowski VIP (101,940 p.)
Próbuję wrócić do OpenGL po kilku latach i stworzyć prosty silnik 3D... Mam dylemat czy brać się za ten nowszy OpenGL... Może ktoś z was mnie jakoś przekonać czemu miałbym się uczyć tego nowego OpenGL w którym trzeba tyle linii kodu wklepać aby wyświetlić sam trójkąt i jeszcze ta kupa w postaci kodu w łańcuchu znaków, podczas gdy w starym OpenGL to tylko kilkanaście linii kodu aby wyświetlić trójkąt?

Jeszcze jedno... Czym się różni OpenGL od OpenGL ES? Wiem, że OpenGL ES to na urządzenia przenośne, chodzi mi czy oba się różnią trochę od siebie, czy może po prostu ES to tylko okrojony z niektórych funkcji OpenGL?
komentarz 30 czerwca 2017 przez Knayder Nałogowiec (37,640 p.)
Myślę że najlepiej jakbyś założył nowy temat na forum. Tak jak to zrobiłeś teraz sprawia, że zobaczę to tylko ja oraz Criss
komentarz 30 czerwca 2017 przez jpacanowski VIP (101,940 p.)
Tu na forum nikt nie odpowiada, a przynajmniej na moje pytania, więc sobie odpuszczę z zakładaniem nowego tematu...
komentarz 1 lipca 2017 przez criss Mędrzec (172,590 p.)

Bardziej zaawansowane pytania zadawaj na SO. To jest forum dla początkujących, stąd też małe szanse na odpowiedź :P Możesz napisać na ircu. Wydaje mi się, że adrian się całkiem orientuje w tych tematach.

Nowy OpenGL pozwala na znacznie więcej w kwestii optymalizacji. Dlatego myślę, że jeśli chcesz się brać za silnik graficzny, to obowiązkowo modern OpenGL.
Druga sprawa, którą ja się kierowałem w podobnym dylemacie, to - po co mam się uczyć po pierwsze gorszego, a po drugie - wychodzącego z użycia. IMO bez sensu. Z tego, co zauważyłem, to starszy OpenGL jest podtrzymywany w projektach tylko dlatego, że za jego czasów został napisany, a przenoszenie wiązałoby się z wieloma zmianami, na które nie można sobie pozwolić ot tak ze względu na popularność danego projektu (ilość osób/apek korzystających z niego) (patrz: SFML).

Na drugie pytanie nie odpowiem, bo pewnie pisałbym głupoty.

Podobne pytania

0 głosów
1 odpowiedź 484 wizyt
pytanie zadane 29 grudnia 2015 w C i C++ przez Ditrix Mądrala (5,650 p.)
0 głosów
0 odpowiedzi 147 wizyt
pytanie zadane 25 kwietnia 2023 w OpenGL, Unity przez RufinB Obywatel (1,830 p.)
0 głosów
0 odpowiedzi 215 wizyt
pytanie zadane 18 lutego 2023 w C i C++ przez Hardwell Dyskutant (8,980 p.)

92,540 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...