OpenGL C++ na Ubuntu

0

Zainstalowałem sobie Code::Blocks, aby móc pisać w OpenGL. Stworzyłem nowy projekt (OpenGL Project), pojawił się plik z przykładowym kodem, ale kiedy chciałem skompilować, wyskoczyły błędy:

Kopiuj
/home/moja_nazwa/openGL/ss/main.c|8|fatal error: GL/glx.h: Nie ma takiego pliku ani katalogu|
||=== Build finished: 1 errors, 0 warnings ===|

Czytałem już duuuużo tutoriali, ale nie wiem, co mogę w sumie zrobić. Pomoże ktoś?

edytowany 1x, ostatnio: madmike
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:19 dni
0

sudo apt-get install libgl-dev

Kopiuj
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności       
Odczyt informacji o stanie... Gotowe
Pakiet libgl-dev jest pakietem wirtualnym zapewnianym przez:
  libgl1-mesa-swx11-dev 7.9~git20100924-0ubuntu2
  libgl1-mesa-dev 7.9~git20100924-0ubuntu2
Należy jednoznacznie wybrać jeden z nich do instalacji.

E: Package 'libgl-dev' has no installation candidate

Czyli hm, jakby nic to nie dało :/

Kopiuj
sudo apt-get install libgl1-mesa-swx11 7.9~git20100924-0ubuntu2

?

Sorry, to wyżej do usunięcia. Czy poprawnie będzie tak:

Kopiuj
sudo apt-get install libgl1-mesa-swx11-dev

?

bądź:

Kopiuj
sudo apt-get install libgl1-mesa-dev

?

Zainstalowałem:

Kopiuj
sudo apt-get install libgl1-mesa-dev

tworzę nowy projekt OpenGL, kompiluję, pojawia się inf. że projekt nie zbudowany, buduję go więc, (chociaż był zbudowany) i nie pojawia się żadne okienko, nic, ale błędu tez niby nie ma.


0

W katalogu z projektem wydaję polecenie: gcc -o -L/usr/X11/lib main main.c -lGL -lX11 dostaję: gcc: main: Nie ma takiego pliku ani katalogu

ZJ
-o jest opcją, którą ustawiasz nazwę pliku wyjściowego. Czy na pewno ma być nią -L/usr/X11/lib?
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0

A czemu masz "main main.c", a nie samo "main.c"?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

Słuchajcie ... Więc tak - nie wiem, co zrobiłem, ale działa ;)

1.Zainstalowałem Code::Blocks z Centrum Oprogramowania Ubuntu
2.Zainstalowałem za pomocą polecenia: sudo apt-get install libgl1-mesa-dev

w Code::Blocks stworzyłem nowy projekt OpenGL, wcisnąłem F9 i przykładowy kod działa. Mam jednak plik (kod znaleziony w sieci):

Kopiuj
#include <GL/glut.h>


#define window_width  640
#define window_height 480

// Main loop
void main_loop_function()
{
   // Z angle
   static float angle;
   // Clear color (screen) 
   // And depth (used internally to block obstructed objects)
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   // Load identity matrix
   glLoadIdentity();
   // Multiply in translation matrix
   glTranslatef(0,0, -10);
   // Multiply in rotation matrix
   glRotatef(angle, 0, 0, 1);
   // Render colored quad
   glBegin(GL_QUADS);
   glColor3ub(255, 000, 000); glVertex2f(-1,  1);
   glColor3ub(000, 255, 000); glVertex2f( 1,  1);
   glColor3ub(000, 000, 255); glVertex2f( 1, -1);
   glColor3ub(255, 255, 000); glVertex2f(-1, -1);
   glEnd();
   // Swap buffers (color buffers, makes previous render visible)
	glutSwapBuffers();
   // Increase angle to rotate
   angle+=0.25;
}

// Initialze OpenGL perspective matrix
void GL_Setup(int width, int height)
{

	glViewport( 0, 0, width, height );
	glMatrixMode( GL_PROJECTION );
	glEnable( GL_DEPTH_TEST );
	gluPerspective( 45, (float)width/height, .1, 100 );
	glMatrixMode( GL_MODELVIEW );
}


// Initialize GLUT and start main loop
int main(int argc, char** argv) {
	glutInit(&argc, argv);

	glutInitWindowSize(window_width, window_height);

	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

	glutCreateWindow("GLUT Example!!!");

	glutIdleFunc(main_loop_function);

	GL_Setup(window_width, window_height);
   glutMainLoop();

}

Jednak po wydaniu polecenia w konsoli:

Kopiuj
sth.cpp:1: fatal error: GL/glut.h: Nie ma takiego pliku ani katalogu
compilation terminated.

Powyższy kod kompilowałem za pomocą polecenia: g++ sth.cpp -lglut

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0

GLUTa pewnie trzeba zainstalować osobno :]


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 12 lat
0

Na ubuntu masz taki programik synaptic. Jest to ogólnie nakładka na apt-get, taki okienkowy aptitude. Jeżeli kompilator nie może znaleźć jakieś biblioteki, to wpisz w synapticu nazwę tej biblioteki i ściągnij coś, co najprawdopodobniej będzie wyglądało tak: libnazwa-dev. Zajmuje to mniej czasu niż pytanie po forach.

0

Nie jestem autorem tematu, ale chętnie się podepnę. Czym rózni się OpenGL od GLUTa? Bo nie mogę wyłapać róznicy. I to jest biblioteka, i to, czy jak?

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0

Korzystanie z GLUT jest absolutnie niepotrzebne, aby uzyskać pełnię możliwości OpenGLa. GLUT oznacza OpenGL Utility Toolkit, zawiera trochę pomocniczych funkcji będących wrapperami na OpenGLowe funkcje plus bindingi do systemowych API wyświetlania okienek czy grafiki. Spokojnie możesz się obejść bez tych pomocniczych funkcji (np możesz napisać własne funkcje do generowania kwadryk), a bindingi zależą najmocniej od docelowych platform i używanego języka - OpenGL to nie tylko C/C++ Win/Lin/Mac, ale dziesiątki innych języków i platform. GLUT jest co najwyżej dobry do zabawy na początek, ale potem lepiej przerzucić się na coś nowocześniejszego. Używanie natywnego GLUTa z pod języków zarządzanych też ma niewielki sens (problemy z przenośnością i kompatybilnością), dlatego np Javowe LWJGL czy JogAmp implementują funkcjonalność GLUTopodobną w czystej Javie.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
0

Korzystanie z GLUT jest absolutnie niepotrzebne, aby uzyskać pełnię możliwości OpenGLa.

GLUT to najprostszy sposób na uzyskanie PRZENOŚNEGO programu w OpenGL-u.

Wibowit
Pisząc w Javie może być jeszcze łatwiej.
Spine
A pisząc w Pythonie z użyciem pygame i pyopengl może być jeszcze łatwiej...
0

Słuchajcie .. kompilowałem i zrobiłem wszystko, wg tego poradnika, który znalazłem w sieci (jako załącznik), ale dla kodu, który umieściłem powyżej, kompilując, otrzymuję taki błąd;

Kopiuj
/tmp/ccU8YBFs.o: In function `GL_Setup(int, int)':
glut_file.cpp:(.text+0x1bc): undefined reference to `gluPerspective'
collect2: ld returned 1 exit status

I teraz: błąd jest w kodzie, czy ten poradnik jest do d*** i coś źle poinstalowałem? Oczywiście zamiast <GL/glut.h> dałem <GL/freeglut.h> ale to jedyna różnica w kodzie ...

0

Oczywiście robię to, bo okazało sie, że jednak musimy uzywać GLUTa :/

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0

Błąd jest na etapie łączenia (linkowania), a więc pewnie zapomniałeś podać jakiegoś parametru do linkera.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

Hm, nie bardzo wiem, jakiego ... właściwie to są moje początki z openGL nie umiem kompletnie nic :( a tu nawet nie mam jak zaczac nauki, bo narzedzia odmawiaja posluszenstwa :/

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
0

-lglu

0
Kopiuj
g++ plik.cpp -lglu
/usr/bin/ld: cannot find -lglu
collect2: ld returned 1 exit status
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
0

Polecam poczytać Ci coś o bibliotekach współdzielonych na Linuksie.

Ponieważ:

/usr/lib64/libglut.so.3.9.0

To:

-lglut

"Przez przypadek" biblioteka nazywa się libglut a flaga jest -lglut.


"(...) otherwise, the behavior is undefined".
0

Hmmm...

Kopiuj
nazwa@komputer:~/Pulpit$ g++ plik.cpp -lglut
/tmp/ccU8YBFs.o: In function `GL_Setup(int, int)':
glut_file.cpp:(.text+0x1bc): undefined reference to `gluPerspective'
collect2: ld returned 1 exit status
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0

A tej flagi -lcośtam nie daje się przypadkiem przed nazwą pliku?

Edit:
Może i nie :P Ale znalazłem makefile z wieloma dodatkami: https://visualization.hpc.mil/wiki/OpenGL_Program01_Makefile Można coś z tego wypróbować.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
0

Generalnie są trzy biblioteki: OpenGL, GLU i GLUT. freeglut to klon oryginalnego GLUT-a. Jakie są ich konkretne nazwy i w jakiej kombinacji pod Ubuntu nie wiem, ale twój błąd „undefined reference to `gluPerspective'

Kopiuj
”  sugeruje, że brakuje funkcji z biblioteki GLU.


> g++ plik.cpp -lglut

Tu widać że w ogóle nie wlinkowujesz OpenGL-a. spróbuj `-lgl`, albo `-lmesagl`, czy jakoś tak. Pod windowsem jest `-lopengl32`.

Poza tym wychodzi na to że inkludujesz freegluta a wlinkowujesz GLUT-a. To chyba też niedobrze. `-lfreeglut`.

EDIT: prawdopodobnie zadziała tak: `-lfreeglut -lGLU -lGL`

PS. jakby ktoś się zastanawiał skąd się biorą te gluty, to GL znaczy „<i>Graphics Library</i>”, GLU to „<i>GL Utility</i>” a GLUT to „<i>GL Utility Toolkit</i>”.
edytowany 7x, ostatnio: Azarien
Endrju
U mnie freeglut ma bibliotekę nazywającą się libglut a nie libfreeglut. Wydaje mi się, że wszędzie tak jest...
0

@Azarien: żadne z podanych przez Ciebie poleceń nie skutkuje. Już nie wiem, co mam poinstalować, żeby pisac w tym glucie nieszczęsnym pod Ubuntu :/ poradniki gdzieś tam niby są, ale tak mętnie wytłumaczone, że nawet jak robię coś, co tam pisze, to i tak wychodzi, że nie działa :(

1

Pomoc otrzymałem na forum Ubuntu. Jeśli ktoś by szukał rozwiązania:

Instaluję:

Kopiuj
1.sudo apt-get install libgl1-mesa-dev
2.sudo apt-get install freeglut3
3.sudo apt-get install freeglut3-dev

mam glutowy plik glut_file.cpp, kompiluję:

g++ glut_file.cpp -lGL -lGLU -lglut

i u mnie już działa :)

PR
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 lat
  • Postów:12
0

Ja pod ubuntu robie tak:

sudo apt-get install binutils-gold
albo to (pamięc nie ta :P)

sudo apt-get install freeglut3 freeglut3-dev
można też synaptikiem to zrobic ,
sciagam synaptikiem codeblocks

potem w C:B tworzymy sobie pusty projekt
potem klikamy PPM w C:B w project managment (skrajne lewe) na projekcie i wybieramy build Options

w Build Options klikamy zakładkę linker settings i w polu other linker settings (to pole z prawej) wpisujemy -lGL -lglut

potem OK klikamy i odpalamy F9

dodanie znaczników <code> - fp

edytowany 3x, ostatnio: flowCRANE
GO
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 7 lat
  • Postów:12
0

Witam , ja walczę z glutem na moim ubuntu i mam coraz to nowe problemy.

Proszę o pomoc tych co mieli podobne.

Wszystko poinstalowane a mam już problem w momencie tworzenia projektu.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)