Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
������� ������ �������� ���������

���������������� GLUT: ���� � ��������

����� Miguel Angel Sepulveda


��������

�������������

��������� �������

������ ��������



�������� �������� GLUT
����� GLUT
��������� GLUT-3.6

��������

�� ������� �������������, ������������ OpenGL ���� ������� ����������� �� �����-���� ���������� ������� ���������� ������. � ���������� �� �������� �����������, ������������������� � ����������� ��������� � ���������� ����- � ����������� ����������. ���������� ������� ���������� ������ ������ ���� ����������� �� �������� � ����������� ����. ���������� OpenGL ��������������� � ������� �������� ����� �������������� ����������, ��������, ���������� GLX ��������� �������������� ����� OpenGL � �������� X-Window. 

���������� ������ ������ OpenGL (GLUT, �� GL Utility Toolkit) - ��� ��������� ��� �������������, ��������� �� ������ ANSI C � FORTRAN ���������� OpenGL, �� ��������� �� ������� ���������� ������. ���������� ���� �������� Mark J. Kilgard � ������� ����� �������� �����, ����������� ������������� OpenGL. ��������� ������������� GLUT �� ����� ����������� ������������ ������ ��������� ��� ������ � ������ ���������� �� ���������. ���������� OpenGL, ������������ GLUT ����� ���� � ��������� ���������� � ��������� �� ���������, ��� �������������� ��������� ��������� ����. GLUT ����������� ��������� ��������� ���� ���������� � ��������� ���������� OpenGL. 

���������� GLUT ������������ �������� � ����� � ��������. ���������� ������ ����������� � ��������� ������������� �������������. ����� �������, ��������� ����� ������� ��������� ����� ������ �� LinuxFocus �������������� ��������. �� �������� ������� ���������� ������������ ��������� ������������, ��������������� �������. ���� ���� ���������� �������, ����������� GLUT, � ���, ����� ��� �� ����� �� �������� ���������� �������� � ����������� � �� ��������������, � ���������� � ����� ������ �� OpenGL � ���� �������. �� ��� �� ��������, ��� ������ ��������� ����� � ����� ����� �������� ����� ������������� �������������� � ����� OpenGL-Linux. � ����� ������, ����������� ����� ��������� ������������ �� GLUT �������� ������� ������������. 

����������� ��������� GLUT ������������ ����� �������� ������� (state machine), ��� � ��� OpenGL. ��� ������, ��� GLUT �������� ��� ���������� ���������, ������� ���������� �� ����� ���������� ����������. ��������� ��������� ������ GLUT ���� ������� � ����� ��������, ����� ������������� ����������� ����������. ��������� ����� �������� �������� ���� ���������� ���������, ��� �������������� ������������� ����������. ������ ��� ��� ������ ������� GLUT ������ ���� ��������� � ����������� �� �������� ���������� ���������. ������� GLUT ������ � ������� �������� ����������. ��� �� ���������� ����������, � ������������� ����������� � ���������� ������� �������� ��������� �� ��������� ������� � ����������� �������. 

������� GLUT ����� ���� ���������������� �� ��������� ����� �������� ����� ����������������: 

  • ������������� 
  • ������ ��������� ������� 
  • ���������� ������ 
  • ���������� ����������� 
  • ���������� ���� 
  • ����������� ���������� (callback) ������� 
  • ���������� ��������������� �������� ������ 
  • ������ ��������� 
  • ����������� ������� 
  • ����������� �������������� ����� 
� ���� ������ �� ����������� � ���������� ��������� �������������, ��������� ������� � ���������� ������, ������� ���������� ��� ������� ���������� ��������� OpenGL. 

�������������

������ ��������� OpenGL, ������������ GLUT, ������ ���������� � ������������� GLUT-������. ��� ������� ������������� ����� ������� glutInit-. ������� ���������������� ������� ���������� glutInit
������������� 
  glutInit(int **argcp, char **argv); 
  argcp - ��� ��������� �� ��� �� ���������� ���������� argc ������� ������� ��������� (main). ����� �������� �� �������, ��������, �� ������� ��������� argcp, ����� ����������, ��� ��� glutInit ��������� ��� ����� ��������� ������, ����������� � ���������� GLUT, ��������, � ������� X-Window ��� �����, ����������� � ���������� ������, ������������� � GLUT
  argv - ��� ��� �� ���������� ���������� argv ������� �������.  

glutInit ����������� �� ������������� ���������� ��������� GLUT � ������� ������ � �������� ���������� ������. ���� ����� ���� ��������� �������, ������� ����� ���� ������� ����� glutInit; ��� ������ �� �������, ������� ����� ������� glutInit-. ������ ������� ����� ���� ������������ ��� ��������� ���������� ��������� ����.  ��������: 
������������� 
  glutInitWindowPosition(int x, int **y); 
  glutInitWindowSize(int width, int **height); 
  x,y  = ������� ���� �� ������ � �������� (������ - ������� ������ �������� ���� ����) 
  width,height  - ������ � ������ ���� � ��������. 

���� ��� ���� �������, ������� ������������ ����������� �� ���� ����������� OpenGL, glutInitDisplayMode()
������������� 
  glutInitDisplayMode(unsigned int mode); 
  mode - ��� ����� ��������� ������, ������� ����� ���� ������� � ������� �������� ���-���������� ������� GLUT (������ ����� ������������ ����� �������� �����). ��������� �������� �������: 
GLUT_RGBA  ����� RGBA. ������������ �� ���������, ���� �� ������� ���� ������ GLUT_RGBA ��� GLUT_INDEX. 
GLUT_RGB  �� ��, ��� � GLUT_RGBA. 
GLUT_INDEX  ����� ��������������� ������. �������� GLUT_RGBA. 
GLUT_SINGLE  ���� � ��������� �������. ������������ �� ���������. 
GLUT_DOUBLE  ���� � ������� �������. �������� GLUT_SINGLE. 
GLUT_ACCUM  ���� � �������������� �������. 
GLUT_ALPHA  ���� � �����-����������� � �������� �������. 
GLUT_DEPTH  ���� � ������� �������. 
GLUT_STENCIL  ���� � ������� ����������. 
GLUT_MULTISAMPLE  ���� � ���������� multisampling. 
GLUT_STEREO ������-����. 
GLUT_LUMINANCE ������ ���� � ��������� ("luminance") ������� ������. 
�� ������������, ���� ��������� �� ��������� ������� ������� ��� �����������, ���� ��� ������ �� ������ �� ���. ������� ��������� � ���������� ��������.  ������ - ������� ������������� ��� ���������� � ����� ������: 

#include <GL/glut.h> 

void main(int argcp, char **argv){ 

/* ��������� �������� � ��������� ���� */ 
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* ����� ������ ����:  
   ��������� ����� � RGBA ������� */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); 

/* ������������� ��������������� ��������� GLUT */ 
glutInit(&argcp, argv);  

.....������� ����; 

}; 

������ - ������ ������������ ���������: 

#include <GL/glut.h> 

void main(int argcp, char **argv){ 

/* ��������� �������� � ��������� ���� */ 
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* ����� ������ ����:  
   ������� ����� � RGBA ������� */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 

/* ������������� ��������������� ��������� GLUT */ 
glutInit(&argcp, argv);  

.....��� ������� ����; 

}; 

�� ����� ������������ � ���� ���� �������� �� ���� ����, ��� ����� �������� GLUT ��� ������. ������� �������� �������� � ���, ��� �� ������ ������ ���� ���������������� � ������ �������� ������, ��� �������� ��� ��������, ��� ��� ��������� ������ �������� ��� ����� ������ � ������������ ������������������. 

��������� �������

��� �� ��� ��������� ����, GLUT ������������ ����� �������� ������� (��������� - ������ ���������). ������ �� �������, ��� GLUT ���������� � ��� ���������-����������� ��������. ��� ��������, ��� ���� ��������� ������ ��� ���������������� ����, ������� ����������� ����� ��������������� ������������� � ������������, ���� �� ������, ��� �������, ����������� GLUT �� ����� �������������. � �������� ���������: ������ ����, �������� ����, ��������� ������� ����, ������������ �������, ������� �������, � ���� �������� ���������� "������" (idle) �������, ����� ������ �� ���������! ������ �� ��������� ������� ������ ���� ���������������� � ����� �� ���������� ��������� GLUT ��� ����, ����� �� ������� ��� � ���������������� ����� ����������� ������������� �������� ������ ������������� ���� ��� ����� �������. 
 
��������, �� ����� ���������������� "������ �����" ��� �������, �� ������� ����� ������� GLUT. ������� �������������� ����� ����������� ���������� (callback) �������. ��� ��� ����� ������� glut[�������]Func, � ������ ������ ���� �� ����� glutMouseFunc. ����������� ���������� ������� ��������� ��������� GLUT ������������ ������������� �������, ������� ������ ���� ������� ��� ����������� ���� ��� ����� �������. ����� �������, ���� � ������ ��� ����������� ��������� MyMouse ������� ����������, ��� ������ �� ������ ����� ������ ����, (��� ������, ���.), �� � ���� ���������������� ��� ���������� ������� ����� glutInit() � ������� ������� main() � ������� ����������� "glutMouseFunc(MyMouse);" . 

������� �� �����, ����� ���������� ������� � ������� ��������� � GLUT. ��� ��� ������ �����, ��� ����� ����������� ���� ��������� ������� � ����� ����������, �� ������ ������� ��������� ��������� ������� � GLUT, � ������ - glutMainLoop(). ��� ������� ������� �� ������������, ���� ��������� �� �������� ������ � ����������� ����. � ������ ���������� OpenGL ������� main() ������ ������������� ������� glutMainLoop(). ��������, � ��������� ������ ������� � ���������: 

#include <GL/glut.h> 

void main(int argcp, char **argv){ 

/* ������������� GLUT */ 
glutInit(&argcp, argv);  
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* �������� ���� */ 
glutCreateWindow("My OpenGL Application"); 

/* ����� ������:  
   ������� ����� � RGBA ������� */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
 

/* ����������� ���������� ������� */ 
..... 

/* ������ ��������� ��������� ������� */ 
glutMainLoop(); 
}; 

��������, ��� � ������� � ��� ����� �������, ������� ����� ����� �� ��������. ��� - ���� �� ������� ���������� ������ GLUT, glutCreateWindow(char **name). ��� ��� ��� �������� �������� � ��������� OpenGL � GLUT - ���������� ��������� �� �������� �������, ����� ������, ��� ��� ������! (Create Window - ������� ����). ������� ����������� � �������� �������� ������� ���� ��� ���������� OpenGL ����������� ������� ���������� ������. ���� ����� ����� ���������, ������� ���������� � �������� ���������� ��������� �������. � ������� X-Window ���� ��������� �������� � ����� ������� ���� ��������� ����. ������ ���������� ������ GLUT �������� � ���� ����� ������ �������, � ������� ��� ����� �� ������� �������� ����������. ������ �� ��� ���������� ���� ����� �������. � ����� ������� ������� ���������� ����������������� �������, ����� ��������, ��� ��� ����� ���� �������� � ����� ������ glutInit(). 

�������� � ��������... � ���� ����������� ��� ���������� �������, ������� �������������� � ����� ������������ ���������. ������ - glutDisplayFunc, ������� ������������� ������� ��������� ��� �������� ����, ������ - glutIdleFunc, ������� ������������� ������� ��������� ������� �������. ��� ��������������� ������� � �������� ��������� ���������� ������� ���� void *(void). � �������, �� ������� ������������� ��� ���������� ������� � ����� ��������� ������������ ���������, void MyDisplay(void), ������� ����������� � ������ ���������� OpenGL ��� ��������� ���������� ����� � ����, � void MyIdle(void), ������� ����� ���������� ������ ���, ����� ��� ������� �� ������������, ������� ������� - ������, ����� �������� ��������� ������� GLUT �������� � ��������� ��� ����������� ���� (glutMainLoop()) � �� ������� �� ������ ������ �������, �� ���������� � MyIdle. ������ � ������ �������������� ���������� ������� ��� ������� ������� � ������������ ���������? ������ ��� ���� �� ������ �������� �����-���� �� ����������� (������), ������������ �� ����� ��������, ���������� �� �������� ������������, ������ ������������ ������� (���������� ������� ������� �������) ������� ����� ���������� ��� ����� � ������� ������ ���������� OpenGL, ����� �������� ����� ������, ��� ��� ����� ���������� �������� MyDisplay()

������ ��������

�������, ����� ���� ��������� ������������ ���������: 
#include <GL/glut.h> 

void MyIdle(void){ 
/* ���, ������� ������ ����������, ������������ ��������� ���� */ 
.... 
}; 

void MyDisplay(void){ 
/* ��� OpenGL, ������� ���������� ���� */ 
.... 
/* ����� ��������� �� ������������ (��������) ������ */ 
glutSwapBuffers(); 
}; 

void main(int argcp, char **argv){ 

/* ������������� GLUT */ 
glutInit(&argcp, argv);  
glutInitWindowSize(640, 480); 
glutInitWindowPosition(0, 0); 

/* �������� ���� */ 
glutCreateWindow("My OpenGL Application"); 

/* ����� ������:  
   ������� ����� � RGBA ������� */ 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 

/* ����������� ���������� ������� */ 
glutDisplayFunc(MyDisplay) 
glutIdleFunc(MyIdle) 

/* ������ ��������� ��������� ������� */ 
glutMainLoop(); 
}; 

��������, ��� � ����� ������� MyDisplay � ������� ����� ����� ������� GLUT, glutSwapBuffers(). (Swap Buffers - ����� �������). ��� ����� ������� ��� ��������. �� ���������� ���� � ������� ������������, ���� ����� ������������ � ������ - ����������. � ����� ������ ���������� OpenGL �� ��������� ����������� ������ ����������� � ����������� ������. ����� ������� glutSwapBuffers ���������� ������, ��������� ���� ������� ����� ����, ��� ��� ��� ������������. ��� ���������� ������ � ������������ ��������, ��� ��� �� ��������� ������������� ����� ������, ��� ����� �� ������ ����������� ����. 

������� ��������� ���������� ��� ����, ����� ������ ������ ����������� ���������� OpenGL. �� �������� ������ ���������� OpenGL � ������� MyDisplay, ������� ���������� ���������� ����������... �� ��� ��� ������ ������� ;-). 

� ��������� ������ �� ���������������� GLUT �� ��������� � �������������� ����������� ������ ���������� ������ � GLUT, �������� - ��� ����� ������� ��������� ���� ������ ������ ����. �� ������ ����� ������������� ����, ������� ����������� �������������. 

�������: Vladas Lapinskas


���������� ����������:
© 1998 Miguel Angel Sepúlveda
This website is mantained by Miguel A Sepulveda.