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 1353 korisnika na forumu :: 41 registrovanih, 11 sakrivenih i 1301 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., aleksmajstor, Alibaba1981, babaroga, bladesu, Bobrock1, bojank, bojankrstc, bojanM84, ccoogg123, cemix, Dimitrise93, Dorcolac, dragoljub11987, FileFinder, GenZee, Griffon vulture, havoc995, ikan, ILGromovnik, JOntra, kovinacc, Kubovac, kuntalo, kybonacci, ljuba, madza, maiden6657, Mercury, Mihajlo, Milos ZA, milutin134, Misirac, opt1, pein, shone34, Valter071, W123, zillbg, zzapNDjuric99, Čivi