рдЕрдкрдиреЗ рдЧреНрд░рд╛рдлрд┐рдХ рдПрдбрд╡реЗрдВрдЪрд░ рдХреЗ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк OpenGL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЖрдк рдЬреЛ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреИрд╕реЗ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕рд░рд▓ рд░реЗрдЦрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдкрд╛рда рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 128 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рддрдм рдЖрддреА рд╣реИрдВ рдЬрдм рдкрд╛рддреНрд░ рдКрдБрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдСрдлрд╕реЗрдЯ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред рдЖрдк рдХрд╣рд╛рдВ рд░рд╣рддреЗ рд╣реИрдВ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЛ 128 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг, рдЧрдгрд┐рддреАрдп рдпрд╛ рд╕рдВрдЧреАрдд рд╡рд░реНрдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЬреИрд╕реЗ рд╣реА рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рда рдХреЛ рдЦреАрдВрдЪрдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрд╣рд╕рд╛рд╕ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдУрдкрди-рд▓реЗрдЧ рдЬреИрд╕реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪреВрдВрдХрд┐ рдУрдкрдирдЬреАрдПрд▓ рдкрд╛рда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдХреА рд╕рднреА рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рд╣рдо рдкрд░ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдХреЛрдИ рдЧреНрд░рд╛рдлрд┐рдХ рдЖрджрд┐рдо "рд╕рд┐рдВрдмрд▓" рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЦреБрдж рд╣реА рдЗрд╕рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ: GL_LINES
рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреНрд░рддреАрдХ GL_LINES
, рдкреНрд░рддреАрдХреЛрдВ рдХреЗ 3 рдбреА рдореЙрдбрд▓ рдмрдирд╛рдПрдВ, рдпрд╛ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдлреНрд▓реИрдЯ рдЪрддреБрд╖реНрдХреЛрдг рдкрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВред
рдЕрдХреНрд╕рд░, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЙрдлреА рдкреАрдиреЗ рдФрд░ рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реЛрддреЗ рд╣реИрдВ ред рдЗрди рдмрдирд╛рд╡рдЯ рд╡рд╛рд▓реЗ рдЪрддреБрд░реНрднреБрдЬреЛрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдЙрддрдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рд╕рд╣реА рдмрдирд╛рд╡рдЯ рдХреЛ рдЪреБрдирдирд╛ред рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо рдХреБрдЫ рддрд░реАрдХреЗ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рдлреНрд░реА рдЯрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЙрдиреНрдирдд рд▓реЗрдХрд┐рди рд▓рдЪреАрд▓реЗ рдЯреЗрдХреНрд╕реНрдЯ рд░реЗрдВрдбрд░рд░ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗред
рд╕рд╛рдордЧреНрд░реАрднрд╛рдЧ 1. рдЖрд░рдВрдн рдХрд░рдирд╛ рднрд╛рдЧ 2. рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд╢ рднрд╛рдЧ 3ред 3 рдбреА рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рднрд╛рдЧ 4. рдЙрдиреНрдирдд OpenGL рд╕реБрд╡рд┐рдзрд╛рдПрдБ рднрд╛рдЧ 5. рдЙрдиреНрдирдд рдкреНрд░рдХрд╛рд╢ рднрд╛рдЧ 6. рдкреАрдмреАрдЖрд░ рдХреНрд▓рд╛рд╕рд┐рдХ: рд░реЗрдЦрд╛рдкреБрдВрдЬ рдлрд╝реЙрдиреНрдЯ
рдбрд╛рдпрдирд╛рд╕реЛрд░ рдХреЗ рд╕рдордп рдореЗрдВ рдПрдХ рдмрд╛рд░ , рдЯреЗрдХреНрд╕реНрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЙрдиреНрдЯ (рдпрд╛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ) рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдФрд░ рдмрд┐рдЯрдореИрдк рдлрд╝реЙрдиреНрдЯ рдирд╛рдордХ рдПрдХ рдмрдбрд╝реА рдмрдирд╛рд╡рдЯ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рдкрд╛рддреНрд░реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдЗрд╕ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдХреБрдЫ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдг рд╣реИрдВред рдЗрди рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЧреНрд▓рд┐рдлрд╝ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд▓рд┐рдлрд╝ рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкрд╛рддреНрд░ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдкрд╛рдЯ рдХреНрд╡рд╛рдб рдкрд░ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рднрд╛рдЧ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо "рдУрдкрдирдЬреАрдПрд▓" рдкрд╛рда рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рд░реЗрдЦрд╛рдкреБрдВрдЬ рдлрд╝реЙрдиреНрдЯ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдмрдирд╛рд╡рдЯ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдзреНрдпрд╛рди рд╕реЗ рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдХрдИ рдЪрддреБрд╖реНрдХреЛрдгреЛрдВ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╕рдореНрдорд┐рд╢реНрд░рдг рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдмрд┐рдЯрдореИрдк рдлрд╝реЙрдиреНрдЯ рдХреЛрдбрд╣реЗрдб рдмрд┐рдЯрдореИрдк рдлрд╝реЙрдиреНрдЯ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдЯрдореИрдк рдлреЛрдВрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА rasterized рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЙрдиреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдмрд┐рдЯрдореИрдк рдлрд╝реЙрдиреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд░реНрдгреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдиреЗ рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓реЗрдЯреЗрдб рдХрд┐рдирд╛рд░реЗ рдЬрд▓реНрджреА рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд┐рдЯрдореИрдк рдлреЛрдВрдЯ рдЕрдХреНрд╕рд░ рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдореВрд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рддрдХрдиреАрдХ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рдереА (рдФрд░ рдЕрднреА рднреА рдЕрдкрдиреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддреА рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рддрдХ, рдкрд╛рда рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ FreeType рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлрд╝реЙрдиреНрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЖрдзреБрдирд┐рдХрддрд╛: рдлреНрд░реА рдЯрд╛рдЗрдк
FreeType рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬреЛ рдлреЙрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрд┐рдЯрдореИрдкреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрд╛рддреА рд╣реИ, рдФрд░ рдХреБрдЫ рдлреЙрдиреНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЗрд╕ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕, рдЬрд╛рд╡рд╛, рдХреНрдпреВрдЯреА, рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлрд╝реЙрдиреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд╛рдлреА рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддреА рд╣реИред
рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлрд╝реЙрдиреНрдЯ рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬреЛ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрдгрд┐рддреАрдп рд╕реВрддреНрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ред рд╡реЗрдХреНрдЯрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдкрд╕рдВрджреАрджрд╛ рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдлрд╝реЙрдиреНрдЯ рдЫрд╡рд┐ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлреЛрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЧреНрд▓рд┐рдлрд╝ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
FreeType рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдпрд╛ рддреЛ FreeType рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рд╛рдЗрдЯ рдкрд░, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рддреЛ precompiled рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ freetype.lib
рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд╣рд╛рдБ рджреЗрдЦрдирд╛ рд╣реИред
рдлрд┐рд░ рд╕рд╣реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ:
#include <ft2build.h> #include FT_FREETYPE_H
рдЪреВрдВрдХрд┐ FreeType рдХреЛ рдереЛрдбрд╝реЗ рдЕрдЬреАрдм рддрд░реАрдХреЗ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореВрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ), рдЖрдк рдЗрд╕рдХреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рдЬрдбрд╝ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред FreeType рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, #include <3rdParty/FreeType/ft2build.h>
) рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдШрд░реНрд╖ рдХреЛ рднрдбрд╝рдХрд╛ рд╕рдХрддрд╛ рд╣реИред
FreeType рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлрд╝реЙрдиреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдЯрдореИрдк рдЫрд╡рд┐ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЧреНрд▓рд┐рдлрд╝ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкреНрд░рд╛рдкреНрдд рдореАрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рд╡рдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд▓рд┐рдлрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯрдореИрдк рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд╝реЙрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ FreeType рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд╝реЙрдиреНрдЯ рдХреЛ рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ FreeType рдлрд╝реЙрдиреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлрд╝реЙрдиреНрдЯ arial.ttf
рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ C: / Windows / рдлрд╝реЙрдиреНрдЯреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
FT_Library ft; if (FT_Init_FreeType(&ft)) std::cout << "ERROR::FREETYPE: Could not init FreeType Library" << std::endl; FT_Face face; if (FT_New_Face(ft, "fonts/arial.ttf", 0, &face)) std::cout << "ERROR::FREETYPE: Failed to load font" << std::endl;
рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реА рдЯрд╛рдЗрдк рдХрд╛рд░реНрдп рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдиреЙрдирдЬрд░реЛ рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдлреЗрд╕ рдлреЙрдиреНрдЯ рдлреЗрд╕ рд▓реЛрдб рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдлреЙрдиреНрдЯ рд╕рд╛рдЗрдЬрд╝ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ:
FT_Set_Pixel_Sizes(face, 0, 48);
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЧреНрд▓рд┐рдлрд╝ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреМрдбрд╝рд╛рдИ рдХреЛ 0 (рд╢реВрдиреНрдп) рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рд╣рдо рдлреНрд░реА рдЯрд╛рдЗрдк рдХреЛ рд╕реЗрдЯ рдКрдВрдЪрд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪреМрдбрд╝рд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдлреЗрд╕ рдлреНрд░реА рдЯрд╛рдЗрдк рдореЗрдВ рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИред рд╣рдо FT_Load_Char
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХреБрдЫ рдЧреНрд▓рд┐рдлрд╝ рдХреЛ рд╕рдХреНрд░рд┐рдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдо рдЧреНрд▓рд┐рдлрд╝ X
рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:
if (FT_Load_Char(face, 'X', FT_LOAD_RENDER)) std::cout << "ERROR::FREETYTPE: Failed to load Glyph" << std::endl;
FT_LOAD_RENDER
рдХреЛ рдПрдХ рдбрд╛рдЙрдирд▓реЛрдб рдлрд╝реНрд▓реИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдХреЗ, рд╣рдо FreeType рдХреЛ рдПрдХ 8-рдмрд┐рдЯ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдмрд┐рдЯрдореИрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
face->glyph->bitmap;
рдлреНрд░реА рдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рднрд░реА рд╣реБрдИ рдЧреНрд▓рд┐рдлрд╝ рдмрд┐рдЯрдореИрдк рдлрд╝реЙрдиреНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреА рдирд╣реАрдВ рд╣реИрдВред FreeType рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдПрдХ рдмрд┐рдЯрдореИрдк рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдг рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреНрд▓рд┐рдлрд╝ рдХреА рдПрдХ рдмрд┐рдЯрдореИрдк рдЫрд╡рд┐ .
рдЧреНрд▓рд┐рдлрд╝ X
рдХреЗ рдмрд┐рдЯрдореИрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, FreeType рдХреБрдЫ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдХрд┐рд╕ рдЖрдХрд╛рд░ рдФрд░ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреАрдЪреЗ рдПрдХ рдЫрд╡рд┐ рджрд┐рдЦрд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлреНрд░реАрдЯрд╛рдЗрдк рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд▓рд┐рдлрд╝ рдмреЗрд╕рд▓рд╛рдЗрди (рдПрдХ рддреАрд░ рдХреЗ рд╕рд╛рде рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛) рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдХреБрдЫ рдмреЗрд╕рд▓рд╛рдЗрди ( X
) рдкрд░ рд╣реИрдВ, рдХреБрдЫ рдиреАрдЪреЗ ( g
, p
) рд╣реИрдВред рдпреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдмреЗрд╕рд▓рд╛рдЗрди рдкрд░ рдЧреНрд▓рд┐рдлрд╝ рдХреА рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдСрдлрд╝рд╕реЗрдЯреНрд╕ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрдЧрд▓реЗ рдЧреНрд▓рд┐рдлрд╝ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рддрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рд╕реВрдЪреА рд╣реИ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
- рдЪреМрдбрд╝рд╛рдИ : рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдЧреНрд▓рд┐рдлрд╝ рдХреА рдЪреМрдбрд╝рд╛рдИ,
face->glyph->bitmap.width
рджреНрд╡рд╛рд░рд╛ face->glyph->bitmap.width
- рдКрдБрдЪрд╛рдИ : рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдЧреНрд▓рд┐рдлрд╝ рдХреА рдКрдБрдЪрд╛рдИ,
face->glyph->bitmap.rows
рджреНрд╡рд╛рд░рд╛ face->glyph->bitmap.rows
- рдмреЗрдпрд░рд┐рдВрдЧрдПрдХреНрд╕ : рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдБ рдмрд┐рдВрджреБ рдХреА рдХреНрд╖реИрддрд┐рдЬ рдСрдлрд╕реЗрдЯ рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖,
face->glyph->bitmap_left
рджреНрд╡рд╛рд░рд╛ face->glyph->bitmap_left
- рдмрд┐рдпрд░рд┐рдВрдЧ : рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдБ рдмрд┐рдВрджреБ рдХреА рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдСрдлрд╕реЗрдЯ рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖,
face->glyph->bitmap_top
рджреНрд╡рд╛рд░рд╛ face->glyph->bitmap_top
- рдЕрдЧреНрд░рд┐рдо : рдореВрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ 1/64 рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ рдЕрдЧрд▓реЗ рдЧреНрд▓рд┐рдлрд╝ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдХреНрд╖реИрддрд┐рдЬ рдСрдлрд╕реЗрдЯ,
face->glyph->advance.x
рджреНрд╡рд╛рд░рд╛ face->glyph->advance.x
рд╣рдо рдПрдХ рдкреНрд░рддреАрдХ рдХреЗ рдЧреНрд▓рд┐рдлрд╝ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рдореАрдЯреНрд░рд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдмрдирд╛рд╡рдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд╣рдо рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рдХреЛ рдХрд╣реАрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ рдФрд░ рдЬрдм рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддреЛ рдЙрдирд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗред рд╣рдо рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо std::map
рдореЗрдВ рд╕рдВрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ:
struct Character { GLuint TextureID;
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ 128 рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдмрдирд╛рд╡рдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдкреНрд░рдХрд╛рд░ std::map
Characters
рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдбреЗрдЯрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
рд▓реВрдк рдХреЗ рдЕрдВрджрд░, рдкрд╣рд▓реЗ 128 рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЧреНрд▓рд┐рдлрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдмрдирд╛рд╡рдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╣рдо GL_RED
рдЙрдкрдпреЛрдЧ internalFormat
рдФрд░ format
рдмрдирд╛рд╡рдЯ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЧреНрд▓рд┐рдлрд╝-рдЬрдирд┐рдд рдмрд┐рдЯрдореИрдк рдПрдХ 8-рдмрд┐рдЯ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдЫрд╡рд┐ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ 1 рдмрд╛рдЗрдЯ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рд╣рдо рдмрд┐рдЯрдореИрдк рдмрдлрд░ рдХреЛ рдмрдирд╛рд╡рдЯ рд░рдВрдЧ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХ рдмрдирд╛рд╡рдЯ рдмрдирд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рд░рдВрдЧ рдХреЗ рд▓рд╛рд▓ рдШрдЯрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдпрджрд┐ рд╣рдо рдмрдирд╛рд╡рдЯ рд░рдВрдЧреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1 рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ OpenGL рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рди рднреВрд▓реЗрдВ:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
рдУрдкрдирдЬреАрдПрд▓ рдХреЛ 4-рдмрд╛рдЗрдЯ рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмрдирд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЙрдирдХрд╛ рдЖрдХрд╛рд░ 4 рдмрд╛рдЗрдЯреНрд╕ (рдЬреИрд╕реЗ 8 рдмрд╛рдЗрдЯреНрд╕, 4000 рдмрд╛рдЗрдЯреНрд╕, 2048 рдмрд╛рдЗрдЯреНрд╕) рдпрд╛ (рдФрд░) рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рддрд┐ 4 рдмрд╛рдЗрдЯреНрд╕ (рдЬреИрд╕реЗ рдЖрд░рдЬреАрдмреАрдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо 1 рдмрд╛рдЗрдЯ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд┐рд╕реНрддреГрддред рдЕрдирдкреИрдХ рдПрд▓рд╛рдЗрдирдореЗрдВрдЯ рдСрдлрд╝рд╕реЗрдЯреНрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ (рдХреНрдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рдЕрдиреБрд╡рд╛рдж рд╣реИ?) 1 рд╕реЗ, рд╣рдо рдЙрди рдСрдлрд╕реЗрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реАрдЧрдлреЙрд▓реНрдЯ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреА рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рд╣рдордиреЗ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ рдлреНрд░реА рдЯрд╛рдЗрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
FT_Done_Face(face);
shaders
рдЧреНрд▓рд┐рдлрд╝ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реАрд░реНрд╖ рд╢реИрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
#version 330 core layout (location = 0) in vec4 vertex;
рд╣рдо рдПрдХ vec4
рдореЗрдВ рдкреНрд░рддреАрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдмрдирд╛рд╡рдЯ рдХрд╛ рд╕рдордиреНрд╡рдп vec4
ред рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рд╡рдЯ рд╕рдордиреНрд╡рдпрдХ рдХреЛ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
#version 330 core in vec2 TexCoords; out vec4 color; uniform sampler2D text; uniform vec3 textColor; void main() { vec4 sampled = vec4(1.0, 1.0, 1.0, texture(text, TexCoords).r); color = vec4(textColor, 1.0) * sampled; }
рдЯреБрдХрдбрд╝рд╛ shader 2 рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ - рдЧреНрд▓рд┐рдлрд╝ рдХреА рдПрдХ рдореЛрдиреЛрдХреНрд░реЛрдо рдЫрд╡рд┐ рдФрд░ рд╕реНрд╡рдпрдВ рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рд░рдВрдЧред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд░рдВрдЧ рдореВрд▓реНрдп рдХрд╛ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдбреЗрдЯрд╛ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд╛рд▓ рдШрдЯрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ r
рдШрдЯрдХ рдХреЛ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВред рд░рдВрдЧ рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ, рдкрд░рд┐рдгрд╛рдореА рд░рдВрдЧ рдЧреНрд▓рд┐рдлрд╝ рдФрд░ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд╕рдЪреНрдЪреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдЧрд╛ред рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░рдВрдЧ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯ рдХрд▓рд░ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рднреА рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рддрдВрддреНрд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдорд┐рд╢реНрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдСрд░реНрдереЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдЧрд╛ред рдкрд╛рда рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдСрд░реНрдереЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╕рднреА рд╢реАрд░реНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
glm::mat4 projection = glm::ortho(0.0f, 800.0f, 0.0f, 600.0f);
рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдХреЛ 0.0f
рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЦрд┐рдбрд╝рдХреА рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рдКрдкрд░ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, y
рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реНрдХреНрд░реАрди рдХреЗ рдиреАрдЪреЗ ( y = 0
) рд╕реЗ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ ( y = 600
) рддрдХ рдорд╛рди рд▓реЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдбреЙрдЯ (0, 0)
рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдВ рдХреЛрдиреЗред
рдЕрдВрдд рдореЗрдВ, рдЪрддреБрд╖реНрдХреЛрдг рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП VBO рдФрд░ VAO рдмрдирд╛рдПрдВред рдпрд╣рд╛рдВ рд╣рдо рд╡реАрдмреАрдУ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╡рд░реНрдгреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗрдВред
GLuint VAO, VBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 6 * 4, NULL, GL_DYNAMIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), 0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0);
рдПрдХ рд╕рдорддрд▓ рдЪрддреБрд░реНрднреБрдЬ рдХреЗ рд▓рд┐рдП 4 рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдХреЗ 6 рд╕рд┐рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо 6 * 4 = 24
рдореЗрдореЛрд░реА рдлрд╝реНрд▓реЛрдЯреНрд╕ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдо рдмрд╣реБрдд рдмрд╛рд░ рд╢реАрд░реНрд╖ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо GL_DYNAMIC_DRAW
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╛рда рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рдкрд╛рда рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреАрдХ рдХреЗ рдЕрдиреБрд░реВрдк Character
рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреАрдХ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЪрддреБрд╖реНрдХреЛрдг рдХреЗ рдЖрдпрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЪрддреБрд╖реНрдХреЛрдг рдХреА рдЧрдгрдирд╛ рдХреЗ рдЖрдпрд╛рдореЛрдВ рд╕реЗ, рдордХреНрдЦреА рдкрд░ рд╣рдо 6 рдХреЛрдиреЗ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ glBufferSubData
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реАрд░реНрд╖ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, RenderText
рдлрдВрдХреНрд╢рди RenderText
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛:
void RenderText(Shader &s, std::string text, GLfloat x, GLfloat y, GLfloat scale, glm::vec3 color) {
рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдореВрд▓, рдЖрдХрд╛рд░ рдФрд░ рдЪрддреБрд░реНрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдХреА рдЧрдгрдирд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдореАрдЯреНрд░рд┐рдХ рдХреЛ scale
рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, VBO рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдХреНрд╡рд╛рдб рдбреНрд░рд╛ рдХрд░реЗрдВред
рдХреЛрдб рдХреА рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдХреБрдЫ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
GLfloat ypos = y - (ch.Size.y - ch.Bearing.y);
рдХреБрдЫ рд╡рд░реНрдгреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ p
рдФрд░ g
, рдХреЛ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ RenderText
рдлрд╝рдВрдХреНрд╢рди рдХреЗ y
рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдЯреАрдХ рдСрдлрд╕реЗрдЯ y_offset
рдХреЛ рдЧреНрд▓рд┐рдлрд╝ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдСрдлрд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рджреВрд░реА рдкрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рджреВрд░реА рд▓рд╛рд▓ рддреАрд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдИ рдЧрдИ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, y_offset = bearingY - height
рдФрд░ ypos = y + y_offset
ред
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рда рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
RenderText(shader, "This is sample text", 25.0f, 25.0f, 1.0f, glm::vec3(0.5, 0.8f, 0.2f)); RenderText(shader, "(C) LearnOpenGL.com", 540.0f, 570.0f, 0.5f, glm::vec3(0.3, 0.7f, 0.9f));
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдпрд╣рд╛рдВ рд╣реИ (рдореВрд▓ рд▓реЗрдЦрдХ рдХреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ)
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реЗ рдЪрддреБрд░реНрднреБрдЬ рдЦреАрдВрдЪреЗ рдЧрдП рд╣реИрдВ, рд╕рдореНрдорд┐рд╢реНрд░рдг рдмрдВрдж рдХрд░реЗрдВ:

рдЗрд╕ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЪрддреБрд░реНрднреБрдЬ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рдКрдкрд░ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╡рд░реНрдг, рдЬреИрд╕реЗ (
рдФрд░ p
рдиреАрдЪреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдХреНрдпрд╛?
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЯреНрд░реВ рдЯрд╛рдЗрдк рдлреЛрдВрдЯ рдХреЛ рдлреНрд░реА рдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рднрд┐рдиреНрди рдЪрд░рд┐рддреНрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкрд░ рд▓рдЪреАрд▓рд╛, рд╕реНрдХреЗрд▓реЗрдмрд▓ рдФрд░ рдХреБрд╢рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рднрд╛рд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рд╡рдЯ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЙрддреНрдкрд╛рджрдХ рдмрд┐рдЯрдореИрдк рдлрд╝реЙрдиреНрдЯ рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рд╡рдЯ рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓реЗрдирд╛ рд╣реИ: рдлреНрд░реА-рд╕реНрдХрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдЧреНрд▓рд┐рдлрд╝ рд╕реЗ рдПрдХ рд░рд╛рд╕реНрдЯрд░ рдлрд╝реЙрдиреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдмрдирд╛рд╡рдЯ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕реЗ рд░реЗрдВрдбрд░рд░ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ рдФрд░ рдмрдирд╛рд╡рдЯ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рдлреНрд░реА рдЯрд╛рдЗрдк рдореЗрдВ рдПрдХ рдФрд░ рджреЛрд╖ рд╣реИ: рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рдЧреНрд▓рд┐рдлрд╝, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЧреНрд▓рд┐рдлрд╝ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рдиреЗ рдкрд░, рд╕реНрдХреНрд░реАрди рдкрд░ рдХрджрдо рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдШреБрдорд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЧреНрд▓рд┐рдлрд╝ рдзреБрдВрдзрд▓реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИред рд╡рд╛рд▓реНрд╡ рдиреЗ (рд╡реЗрдм рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд▓рд┐рдВрдХ) рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рджреВрд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдерд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдФрд░ 3 рдбреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ред
рдкреБрдирд╢реНрдЪ : рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрдмрд╛рджрд▓реЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░ рд╣реИ ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдЧрдВрднреАрд░ рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!