рдпрд╣ рдкрд╛рда OpenGL - GLM рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИред рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рддрд╛рдХрд┐ рд▓реЗрдЦрдХ рдХреА рд░рд╛рдп рдореЗрдВ, рд╕реВрдЪрдирд╛ рд╢реВрдиреНрдп рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рдЕрдЪреЗрддрди рдорди рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред
рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдп рдЕрдкрдиреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд░реВрдк рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдереЗ, рдФрд░ рдирдП рдорд╛рдирдХреЛрдВ рдУрдкрдирдЬреАрдПрд▓ 3 (4, рдИрдПрд╕) рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЧрдгрд┐рдд рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред рдФрд░ рдЬреЛ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрджрд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рджрд┐рдпрд╛ред рд╢реЗрдбрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЕрд╕реАрдорд┐рдд рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреНрдпреВрдмреНрд╕ рдФрд░ рд╣рдореНрдореЙрдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рдореЛрдбрд╝реЗрдВ?
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдореИрдЯреНрд░рд┐рд╕ рдФрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рд╕рднреА glRotate, glScale, glTranslate, рдЖрджрд┐ред рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЧрдарди рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВред рдлрд┐рд░ рд╣рдо рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдФрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдирд╛ред рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдЖрднрд╛рд░реА, рдмрдЧ, рдЧрд▓рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрджрд┐ рдирд╣реАрдВред рджреВрд╕рд░рд╛ рдПрдХ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣рд╛рдБ рдкреНрд░рд╢реНрди рдЙрдарддрд╛ рд╣реИ - рдФрд░ рдХреМрди рд╕рд╛? рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ 3x3 рдФрд░ 4x4 рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрджрд╡рд╛рд░ рдЬреАрдПрд▓рдПрдо рд╣реИред
рдпрд╣рд╛рдБ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП:
glm.g-truc.netрдореБрдЭреЗ рдпрд╣ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн "GLSL + рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ = рдУрдкрдирдЬреАрдПрд▓ рдЧрдгрд┐рдд (GLM)" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рд╕рд╛рдЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рд╢реАрд░реНрд╖рдХ рдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИред рдпрд╣реА рд╣реИ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА GLSL рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реИ (OpenGL рдХреЗ рд▓рд┐рдП shader рднрд╛рд╖рд╛), рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ "рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ" рднреА рд╣реИрдВред
рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рднреА рдЖрдзреБрдирд┐рдХ рд╕реА ++ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реАрдпреВрдбреАрдПрдП рдЬреИрд╕реА рдЪреАрдЬ рдХреЗ рд╕рд╛рде рднреА рдФрд░ рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдпрд╛ рдбреАрдПрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рднрд╛рдЧ glm.hpp - рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ, рджреВрд╕рд░рд╛ рднрд╛рдЧ ext.hpp рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ - рдЬреЛ рдХрдИ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд░реЛрдЯреЗрдЯ, рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди, рд╕реНрдХреЗрд▓, рд▓реБрдХ рдФрд░ рдХрдИ рдЕрдиреНрдпред рдпрджреНрдпрдкрд┐ рдкреНрд░рд▓реЗрдЦрди рдЕрд▓рдЧ рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
#include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp>
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЬреАрдЯреАрд╕реА - рдорд╛рдирдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдВрд╕реНрдХрд░рдг рдпрд╛ ext.hpp (рд╕реНрдерд┐рд░) рд╣реЗрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ
рдЬреАрдЯреАрдПрдХреНрд╕ - рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
VIRTREV - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ
рдЦреИрд░, рдЪреВрдВрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд▓рд╕рд╕ рдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд╛рдорд╕реНрдерд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдЧреНрд▓рдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓
glm.g-truc.net/glm.pdf рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмреЛрд▓рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред
#include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> void foo(){ glm::vec4 Position = glm::vec4(glm:: vec3(0.0f), 1.0f); glm::mat4 Model = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); Model = glm::rotate(Model,45,0,1,0); glm::vec4 Transformed = Model * Position; }
рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рдЬреАрдПрд▓рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг
#include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> using namespace glm; void foo(){ vec4 v(0.0f); mat4 m(1.0f); ... glVertex3fv(value_ptr(v)) glLoadMatrixfv(value_ptr(m)); }
рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рд░рдВрдЧ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рднреА рд╣реИ, рдкрд╛рдкред рдФрд░ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рд╣реИред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдХреНрд╖рдо рдХреЛрдб рд╣реИред
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдПрдХ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
template <typename T> GLM_FUNC_QUALIFIER detail::tmat4x4<T> translate ( detail::tmat4x4<T> const & m, detail::tvec3<T> const & v ) { detail::tmat4x4<T> Result(m); Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; return Result; }
рдКрдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, GLM рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЧреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ CORE_PROFILE рдХреЗ рддрд╣рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреБрд░рд╛рдиреЗ рд╕рдордп рдореЗрдВ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЛ shader рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЖрдзреБрдирд┐рдХ рдорд╛рдирдХреЛрдВ рдХреЗ рдХрд░реАрдм рд▓рд╛рдПрдЧрд╛, рдФрд░ рд╡реИрд╕реЗ рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЖрдкрдХреЛ рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓реЗрдЧрд╛ред