Kako 'spremiti' kompajler za OpenGL

Kako 'spremiti' kompajler za OpenGL

offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

--- Spremanje kompajlera za OpenGL pod Windowsom ---

----------------- 0. korak -----------------
Prvo, evo koji su sve fajlovi potrebni (podelicu ih u 3 grupe):

- gl.h
- glu.h
- glut.h (opciono, mada preporucujem koriscenje GLUT-a)

- opengl32.dll (vec ga imate u sistemskom direktorijumu Windowsa)
- glu32.dll (takodje ga imate u sistemskom direktorijumu Windowsa)
- glut32.dll (opciono)

- opengl32.lib
- glu32.lib
- glut32.lib (opciono)

----------------- 1. korak -----------------

Generalno, svaki normalan kompajler vec ima gl.h i glu.h.
Dakle, verovatno vam samo treba glut.h, i njega mozete skinuti sa http://www.xmission.com/~nate/glut.html (treba vam ona binarna verzija, koja sadrzi, header fajl, dll fajl, i lib fajl za VC++).
Sa tog sajta cete skinuti ZIP fajl u kojem cete naci glut.h, koji trebate da iskopirate u direktorijum /include/GL vaseg kompajlera. Ako ne znate koji je to direktorijum, potrazite na disku fajl gl.h i pogledajte u kom direktoriju se on nalazi - u tom treba i ovaj.

Ako pak nemate gl.h i glu.h, onda:
1) ili skinite Mesa biblioteku - http://www.mesa3d.org/. Trebalo bi da je iskompajlirate, a ako vam to ne podje za rukom onda procitajte drugi predlog.
2) ili skinite http://download.microsoft.com/download/win95upg/info/1/W95/EN-US/Opengl95.exe - tu cete naci gl.h i glu.h.
Prvi predlog NE preporucujem pocetnicima, jer ne verujem da ce uspeti da iskompajliraju Mesa biblioteku. Za pocetnike preporucujem drugi predlog!


----------------- 2. korak -----------------

Dalje, opengl32.dll i glu32.dll 99% vec imate u sistemskom direktorijumu Windowsa. Ako ih nemate, skinite ih sa http://download.microsoft.com/download/win95upg/info/1/W95/EN-US/Opengl95.exe (ovaj link smo vec gore davali) i iskopirajte ih u sistemskom direktorijumu Windowsa.
Fajl glut32.dll se nalazi u onom GLUT-ovom ZIP fajlu koji ste vec skinuli, i njega iskopirajte u sistemski direktorijum Windowsa (najcesce je to c:\windows\system)

----------------- 3. korak -----------------

I na kraju treba kreirati .lib fajlove.
LIB fajlovi sadrze spisak funkcija koji neki DLL sadrzi. Kompajleru je potreban taj spisak da bi znao koje funkcije (koje pozivas iz programa) postoje u odredjenom DLL-u.

Kod VC++a su .lib fajlovi vec kreirani, ili se kreiraju automatski, tako da ako koristite VC++ nista ne trebate da radite u ovom koraku.
Ovo pricam napamet (tako sam cuo), jer nemam kod sebe VC++ da ovo proverim.
Moguce je jedino (ako koristite VC++) da vam nedostaje glut32.lib, a njega imate u onom GLUT-ovom ZIP fajlu koji ste skinuli. Iskopirajte ga u /lib direktorijum VC++a (putanja je skoro ista kao do /include, samo sto se ne zavrsava sa /include nego sa /lib)
Ako kojim slucajem nemate opengl32.lib i glu32.lib - skinite http://download.microsoft.com/download/win95upg/info/1/W95/EN-US/Opengl95.exe (ovaj link smo vec davali gore) - tu cete ih naci, pa ih samo iskopirajte /lib direktorijum VC++a.

Kreiranje .lib fajlova kod Borlandovog kompajlera se postize komandom implib [imefajla].lib [imefajla].dll (koju naravno treba ukucati u command promptu).
Generalno, treba otkucati sledece ako koristite Borlandov kompajler:
implib opengl32.lib opengl32.dll
implib glu32.lib glu32.dll
implib glut32.lib glut32.dll

Kada pravite ove .lib fajlove, vodite racuna da vam .dll fajlovi (koje navodite) budu u direktorijumu u kojem se nalazite. Fajlove opengl32.dll i glu32.dll imate u sistemskom direktorijumu Windowsa, pa ili ih iskopirajte u direktorijum u kome se nalazite, ili u komandoj liniji navedite putanju do DLLa (ovako: implib glu32.lib c:\windows\system32\glu32.dll). Fajl glut32.dll imate u onom GLUT-ovom ZIP fajlu koji ste skinuli...
Kreirane .lib fajlove zatim treba iskopirati u /lib direktorijum vaseg kompajlera (putanja je skoro ista kao do /include, samo sto se ne zavrsava sa /include nego sa /lib).

Verovatno je i kod ostalih kompajlera slican postupak kreiranja .lib fajla (mozda cak i potpuno isti).

----------------- 4. korak -----------------
Svo 'spremanje kompajlera' je gotovo, i sada treba videti kako izgleda jedan OpenGL program:

Citat:
#if (defined(__WIN32__) || defined(WIN32))
#include <windows.h>
#endif

#include <stdio.h>
#include <stdlib.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

GLfloat boja1[] = { 0.3, 0.7, 0.0, 1.0 };
GLfloat boja2[] = { 0.0, 0.2, 0.8, 1.0 };
float i=0;

void draw(void)
{
i++;
if (i>360) i=0;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glTranslatef (0, 0, 50);
glMaterialfv(GL_FRONT, GL_DIFFUSE, boja1);
glBegin (GL_QUADS);
glTexCoord2f (0.0,0.0);
glVertex3f (-10.0, -10.0, 20.0);
glTexCoord2f (1.0, 0.0);
glVertex3f (10.0, -10.0, 35.0);
glTexCoord2f (1.0, 1.0);
glVertex3f (10.0, 10.0, 0.0);
glTexCoord2f (0.0, 1.0);
glVertex3f (-10.0, 10.0, 0.0);
glEnd ();
glPopMatrix();

glPushMatrix();
glTranslatef (0, 0, 50);
glRotatef(i, 1, 0, 0);
glRotatef(i, 0, 1, 0);
glMaterialfv(GL_FRONT, GL_DIFFUSE, boja2);
glutSolidTorus (1, 3, 3, 3);
glPopMatrix();

glutSwapBuffers();
}

void light (void)
{
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
glLightfv (GL_LIGHT0, GL_POSITION, light_position);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}

void reshape (int width, int height)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 1000.0f);
gluLookAt(0, 0, -1, 0, 0, 0, 0, 1.0, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}

int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE |GLUT_RGB|GLUT_DEPTH);
glutEnterGameMode();
glutDisplayFunc(draw);
glutSetCursor(GLUT_CURSOR_NONE);
reshape(640,480);
light();
glutKeyboardFunc(keyboard);
glutIdleFunc(draw);
glutMainLoop();
return 0;
}


Znate vec kako se kompajlira...
Ako koristite Borland C/C++ FREE compiler (koga mozete skinuti sa ftp://ftpd.borland.com/download/bcppbuilder/freecommandLinetools.exe - 8.5 MB), to ide ovako (u command promptu): bcc32 primer.c
Ako se bcc32 ne odaziva, verovatno niste procitali readme.txt Smile koji zahteva da se rucno konfigurisu putanje do kompajlera i linkera.

Za ucenje OpenGL-a preporucujem odlican tutorijal na adresi: http://cs-sdl.sourceforge.net/index.php/Red_Book_Table_of_Contents
Srecno!!!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

--- Spremanje kompajlera za OpenGL pod Linuxom ---

Ukratko, treba vam MesaLIB (skinite je sa http://www.mesa3d.org/) i glut-lib ( http://www.xmission.com/~nate/glut.html - skinuti source code distribuciju). Iskompajlirajte obe biblioteke, i to je to.
Ako koristite RedHat, imate sve to vec iskompajlirano - nadjite na instalacionim CD-ima mesa-devel RPM fajl, i instalirajte ga. MADA, ja mislim da je mesa-devel po defaultu vec instaliran!
Kompajliranje OpenGL programa ide ovako: gcc primer.c -o primer -lGL -lGLU -lglut
Naravno, kompajlirani program se startuje sa ./primer Smile, a inace, source code je isti kao i za Win, sve je 100% portabilno.

Jos samo da kazem da je za brze 2D/3D perfomanse neophodno skinuti drajvere za graficku karticu. Sto se tice NVidia kartice, njihove drajvere cete naci na sajtu www.nvidia.com, pa tamo pod Drivers / Linux...
Bez tih drajvera cete imate oko 3 frejma po sekundi (ja sa drajverima imam oko 200-300 frejma po sekundi) Smile
Srecno!



offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

--- Kako 'spremiti' VC++ za OpenGL ---

Ako imate VC++, samo ubacite glut.h u /include i glut32.lib i /lib.
To je sve.
Iz 2 koraka se instalira opengl na VC++ !!!

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

-- Kako koristiti OpenGL u Delphi-u --

Delphi vec sadrzi OpenGL unit koji omogucava upodrebu OpenGL komandi.

Jedan jednostavan program u Delphi-u koji koristi OpenGL bi izgledao ovako:

Inicijalizacija moze da se uraditi u OnCreate eventu forme:
procedure TForm1.FormCreate(Sender: TObject); var   PixelFormat: GLuint;   PFD: PixelFormatDescriptor; begin   ZeroMemory(@PFD, SizeOf(PFD));   with PFD do   begin     nSize := SizeOf(PFD);     nVersion := 1;     dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or       PFD_DOUBLEBUFFER;     iPixelType := PFD_TYPE_RGBA;     cColorBits := 24;     cDepthBits := 16;     iLayerType := PFD_MAIN_PLANE;   end;   PixelFormat := ChoosePixelFormat(Canvas.Handle, @PFD);   SetPixelFormat(Canvas.Handle, PixelFormat, @PFD);   hRC := wglCreateContext(Canvas.Handle);   wglMakeCurrent(Canvas.Handle, hRC);   glShadeModel(GL_SMOOTH);   glClearColor(0, 0, 0, 0);   glClearDepth(1.0);   glEnable(GL_DEPTH_TEST);   glDepthFunc(GL_LEQUAL);   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); end;

PFD se mora podesiti na zeljeni format pre poziva ChoosePixelFormat i SetPixelFormat funkcija.
hRC je globalna promenljiva u kojoj ce se cuvati rendering context.

Postavljanje matrica za projekciju se moze uraditi u OnResize eventu:
procedure TForm1.FormResize(Sender: TObject); begin   if Height = 0 then     Height := 1;   glViewport(0, 0, Width, Height);   glMatrixMode(GL_PROJECTION);   glLoadIdentity;   gluPerspective(45, Width / Height, 0.1, 100.0);   glMatrixMode(GL_MODELVIEW);   glLoadIdentity; end;

Crtanje u OnPaint eventu:
procedure TForm1.FormPaint(Sender: TObject); begin   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);   glLoadIdentity();   glTranslate(0, 0, -5);   glBegin(GL_QUADS);     glColor3f(0.0,1.0,0.0);     glVertex3f( 1.0, 1.0,-1.0);     glVertex3f(-1.0, 1.0,-1.0);     glVertex3f(-1.0, 1.0, 1.0);     glVertex3f( 1.0, 1.0, 1.0);     glColor3f(1.0,0.5,0.0);     glVertex3f( 1.0,-1.0, 1.0);     glVertex3f(-1.0,-1.0, 1.0);     glVertex3f(-1.0,-1.0,-1.0);     glVertex3f( 1.0,-1.0,-1.0);     glColor3f(1.0,0.0,0.0);     glVertex3f( 1.0, 1.0, 1.0);     glVertex3f(-1.0, 1.0, 1.0);     glVertex3f(-1.0,-1.0, 1.0);     glVertex3f( 1.0,-1.0, 1.0);     glColor3f(1.0,1.0,0.0);     glVertex3f( 1.0,1.0,-1.0);     glVertex3f(-1.0,1.0,-1.0);     glVertex3f(-1.0,-1.0,-1.0);     glVertex3f( 1.0,-1.0,-1.0);     glColor3f(0.0,0.0,1.0);     glVertex3f(-1.0, 1.0, 1.0);     glVertex3f(-1.0, 1.0,-1.0);     glVertex3f(-1.0,-1.0,-1.0);     glVertex3f(-1.0,-1.0, 1.0);     glColor3f(1.0,0.0,1.0);     glVertex3f( 1.0, 1.0,-1.0);     glVertex3f( 1.0, 1.0, 1.0);     glVertex3f( 1.0,-1.0, 1.0);     glVertex3f( 1.0,-1.0,-1.0);   glEnd();   SwapBuffers(Canvas.Handle); end;

I zatvaranje rendering context-a u OnDestroy eventu:
procedure TForm1.FormDestroy(Sender: TObject); begin   wglMakeCurrent(Canvas.Handle,0);   wglDeleteContext(hRC); end;

Pogledajte Nehe za vise OpenGL primera.

Ko je trenutno na forumu
 

Ukupno su 1021 korisnika na forumu :: 53 registrovanih, 5 sakrivenih i 963 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., aramis s, babaroga, bladesu, Bobrock1, BORUTUS, Bubimir, darios, Denaya, doktor1964, DonRumataEstorski, DragoslavS, dule10savic, FOX, Frunze, havoc995, hooraay, ivan1973, JimmyNapoli, karevski, Karla, kolle.the.kid, kybonacci, laurusri, Marko Marković, Mcdado, mercedesamg, Mi lao shu, mikrimaus, mile23, milenko crazy north, miodrag, Mixelotti, nemkea71, Nobunaga, Oscar, pacika, Panter, Pohovani_00, radoznao, sasa87, Simon simonović, slonic_tonic, Smiljke, solic, SR-3m, Srki94, ss10, stagezin, stalja, Vlada78, zdrebac, 125