��������
�� ������� �������������, ������������ 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
|