OpenGl рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдлреНрд░реАрдЧреНрд▓реБрдЯ), рдбреНрд░рд╛рдЗрдВрдЧ рдЖрджрд┐рдо

рдЕрднрд┐рд╡рд╛рджрди рд╣реИ рд╣рдмрд░реВрд╕рд░! рдЖрдЬ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ OpenGl рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

// рдиреЛрдЯ: рдЖрдк рдлреНрд░реАрдЧреНрд▓реВрдЯ (рдЧреНрд▓реВрдЯ рдХрд╛ рдПрдХ рдЦреБрд▓рд╛ рд╡рд┐рдХрд▓реНрдк) рдХреЗ рдмрдЬрд╛рдп рдЧреНрд▓реВрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ opengl (freeglut'e) рдкрд░ рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд▓рд┐рдЦ рджреВрдВрдЧрд╛ ред

рдУрдкреЗрдВрдЧрд▓ рдкрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо рдлреНрд░реАрдЧреНрд▓реВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( рдУрдкрдирдЧрд┐рд▓ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЯреВрд▓рдХрд┐рдЯ - рдУрдкреЗрдВрдЧреНрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг, рддрд╛рдХрд┐ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред Freeglut рдлрд╝рд╛рдЗрд▓реЗрдВ рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ ред рдпрд╣ рдХреИрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬрд╝ (MSVC рдФрд░ MinGW) рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред Linux рдкрд░, freeglut рдХреЛ рдХрдИ рдХрдорд╛рдВрдбреНрд╕ рдореЗрдВ, рдФрд░ рдХреБрдЫ рд╣реА рдХреНрд▓рд┐рдХ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореБрдЭреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдлреНрд░реАрдЧреНрд▓реБрдЯ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП ред

рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАред

рдФрд░ рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВред
рдЖрдорддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рдлреНрд░реАрдЧреНрд▓реВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ:
#include <GL/freeglut.h>//     void display() { /*    */ } int main(int argc, char **argv) { glutInit(&argc, argv);//   glutInitDisplayMode(GLUT_DOUBLE);//   glutInitWindowSize(400,400);//  glutInitWindowPosition(200, 200);//    //        glutInit...?,      ,      -. glutCreateWindow("Window");//  glClearColor(1, 1, 1, 0);//  //  ,    -    . glMatrixMode(GL_PROJECTION);//  glLoadIdentity();//  glOrtho(-100, 100, -100, 100, -100, 100);//c   ,    3D   ,     200 . glutDisplayFunc(display);//        . glutMainLoop();//  ,     - main,     glut' - main. return 0; } 


рдЖрдЗрдП рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
Q glutInitDisplayMode () рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

GLUT_RGB - RGB рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ (рд▓рд╛рд▓ | рд╣рд░рд╛ | рдиреАрд▓рд╛ | рдиреАрд▓рд╛ - рд▓рд╛рд▓ | рд╣рд░рд╛ | рдиреАрд▓рд╛ - рдХреНрд░рдорд╢рдГ) | рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
GLUT_SINGLE - рдПрдХрд▓ рдмрдлрд░ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд┐рдВрдбреЛред рдЗрд╕ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
GLUT_DOUBLE - рдПрдХ рдбрдмрд▓ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд┐рдбрд╝рдХреАред

рдПрдХ рдмрдлрд░ рдПрдХ рдРрд╕рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдПрдХрд▓ рдмрдлрд░ рдПрдХ рдбрдмрд▓ рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ? рджреЛрд╣рд░рд╛ рдмрдлрд╝рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рджреЛ рдмрдлрд╝рд░ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкрд╣рд▓рд╛ рдмрдлрд╝рд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдмрдлрд╝рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рдмрдлрд╝рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЙрд╕реА рддрд░рд╣, рдХреЗрд╡рд▓ рд╢реМрдХреАрдиреЛрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╛рдиреА рдмрдлрд╝рд░реНрд╕ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕реНрдХреНрд░реАрди рдкрд░ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдКрдкрд░ рд╕реЗ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдПрдХрд▓ рдмрдлрд░ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдХреНрдпреВ рдЧреНрд▓реЙрд░реНрдереЛ (рдмрд╛рдПрдВ, рджрд╛рдПрдВ, рдиреАрдЪреЗ, рдКрдкрд░, zNear, zFar) - рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
рдмрд╛рдПрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рддрдиреА рдпреВрдирд┐рдЯреЛрдВ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗ
рд╕рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдУрдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдШреБрдорд╛рдПрдВрдЧреЗ
рдиреАрдЪреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдЗрдХрд╛рдЗрдпрд╛рдБ рдУрдп рдЕрдХреНрд╖ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рдПрдБрдЧреА
рд╢реАрд░реНрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдЗрдХрд╛рдЗрдпрд╛рдБ рдУрдп рдЕрдХреНрд╖ рдХреЛ рдКрдкрд░ рд▓реЗ рдЬрд╛рдПрдБрдЧреА
zNear рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдЗрдХрд╛рдЗрдпрд╛рдБ рдУрдЬрд╝реЗрдб рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЧрд╣рд░рд╛рдИ рд╕реЗ рдШреВрдореЗрдВрдЧреА
zFar рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдЗрдХрд╛рдЗрдпрд╛рдБ рдУрдЬреЗрдб рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреА
рдЖрд╕рд╛рди рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪрд┐рддреНрд░ рдХреЛ рдзрд░рд╛рд╢рд╛рдпреА рдХрд░ рджрд┐рдпрд╛:

рдУрдкреЗрдВрдЧреНрд▓ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕:
рд╕реАрдзреЗ рдХреЛрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред
рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рдЬреЛ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддрд╛ рд╣реИ:
 #include <GL/freeglut.h> void display() { glClear(GL_COLOR_BUFFER_BIT);//  glColor3f(1.0f,0.0f,0.0f);//   glLineWidth(3);//   glBegin(GL_LINES);//     glVertex2d(-1, 0);//     (x,y) glVertex2d( 1, 0);//   glEnd();//     glutSwapBuffers();//    } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize(200, 200); glutInitWindowPosition(200, 200); glutCreateWindow("Window"); glClearColor(1, 1, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-10, 10, -10, 10, 0, 0); glutDisplayFunc(display); glutMainLoop(); return 0; } 


рдЫрд╡рд┐

GlBegin () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдбреНрд░рд╛рдЗрдВрдЧ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рдЬреИрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ:

GL_POINTS - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдмрд┐рдВрджреБ рдмрдирд╛рдПрдВрдЧреЗ
GL_LINES - рд╣рдо рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪреЗрдВрдЧреЗ
GL_TRIANGLES - рд╣рдо рдПрдХ рддреНрд░рд┐рднреБрдЬ рдмрдирд╛рдПрдВрдЧреЗ
GL_QUADS - рд╣рдо рдПрдХ рдЖрдпрдд рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ
...
рдФрд░ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рддреНрд░рд┐рдХреЛрдг, рдЪрддреБрд╖реНрдХреЛрдг рдФрд░ рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рдореВрд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
Ffl glEnd () рдбреНрд░рд╛рдЗрдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ

рдЕрдм рдПрдХ рдмрд┐рдВрджреБ, рд░реЗрдЦрд╛, рддреНрд░рд┐рднреБрдЬ рдФрд░ рдЖрдпрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП glBegin (GL_POINTS), glBegin (GL_LINES), glBegin (GL_TRIANGLES), glBegin (GL_QUADS) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

 #include <GL/freeglut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPointSize(6); glColor3f(0.0f,0.0f,0.0f); glBegin(GL_POINTS);//   glVertex2f(-0.5f, 0.2f); glEnd(); glLineWidth(3); glColor3f(1.0f,0.0f,0.0f); glBegin(GL_LINES);//   glVertex2d(-1, 1); glVertex2d( 1, -1); glEnd(); glColor3f(0.0f, 1.0f,0.0f); glBegin(GL_TRIANGLES);//   glVertex2d(0, 0); glVertex2f(0.5, 1); glVertex2d(1, 0); glEnd(); glColor3f(0.0f, 0.0f, 1.0f);//   glBegin(GL_QUADS); glVertex2d(-1, -1); glVertex2d(-1, 0); glVertex2d( 0, 0); glVertex2d( 0, -1); glEnd(); glutSwapBuffers();//    } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize(200, 200); glutInitWindowPosition(200, 200); glutCreateWindow("Window"); glClearColor(1, 1, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1, 1, -1, 1, 0, 0); glutDisplayFunc(display); glutMainLoop(); return 0; } 


рдЫрд╡рд┐

рдЗрд╕ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдореИрдВ рдмрд╛рдХреА рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА, рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдкреАрдПрдо рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╡рд░рдг рдпрд╛ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In162551/


All Articles