рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВ рд░реЛрдЬрд┐рдпрд╛ рдпреВрд░реЛрдк рдХреА рдХрдВрдкрдиреА рдореЗрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЯреАрдо рд▓реАрдбрд░ рд╣реВрдВред рд╣рдо рддреЗрд▓ рдФрд░ рдЧреИрд╕ рдЙрджреНрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░рдореБрдЦ рдЙрддреНрдкрд╛рдж рд╕реНрдЯрд╛рд░рд╕рд┐рдЯрд░ рдореЗрдВ рд╕рд╣рд╕рдВрдмрдВрдз рдкреИрдирд▓ рдирд╣реАрдВ рд╣реИ - рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрд╛рдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрдкрдХрд░рдгред рдЕрдиреНрдп, рдЕрдзрд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдп рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдЧрд┐рд░рд╛рд╡рдЯ рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред
рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП - рдореИрдВ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ - рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рд╡рд╛рд▓ рдерд╛ - рдореБрдЭреЗ рдХрд┐рд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ OpenGL рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА MapView рдФрд░ 3DS рджреГрд╢реНрдп рдореЗрдВ OpenSceneGraph рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдирдВрдЧреЗ рдирд╣реАрдВ рд╣реИ, рдФрд░ GUI рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред OSG рдЧрд┐рд░ рдЧрдпрд╛ = (?) рдПрдХ рддрдХрдиреАрдХ рдЬреЛ рджреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ - рдУрдкрди рдЧреНрд░рд╛рдл рдкрд░ GUI рдФрд░ GUI - рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкрддрд╛ рдерд╛ - Qt QML / рдХреНрд╡рд┐рдХред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рднреА рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЬреЛ рд╣рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реИ - рдЕрдВрджрд░ред
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рд╣рдордиреЗ 2013 рдХреЗ рдкрддрди рдореЗрдВ рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдХреНрдпреВрдЯреА рдкреНрд░рд╢рдВрд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдХреНрдпрд╛ рд╕реЗрдЯ рд╣реИ, рдпрд╣ рднреА рдПрдХ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдерд╛ред рдЙрд╕ рд╕рдордп, рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ: рдХреНрдпреВрдЯреА рдХреЗ 4 рд╡реЗрдВ рдпрд╛ 5 рд╡реЗрдВ (рдЕрднреА рднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ) рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдордиреЗ рдкрд╛рдБрдЪрд╡рд╛рдБ рдЪреБрдирд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рдЙрдбрд╝рд╛рди рдХреА рдКрдБрдЪрд╛рдИ рд╕реЗ рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реА рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдБ: рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ!
рдкреВрд░рд╛ рд▓реБрдХ QtGui / рд╡рд┐рдЬреЗрдЯреНрд╕ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рджреГрд╢реНрдп рдЬрд╣рд╛рдВ рдЧреНрд░рд╛рдлрд╝ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЧрд╛рдорд╛, рдкреЛрд░рд╕рд┐рдЯреА, рдкреНрд░рддрд┐рд░реЛрдз, рдЖрджрд┐) QGraphicsScene / View рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореЗрд░реА рд╕рд▓рд╛рд╣ рд╣реИ - рдЧрдВрднреАрд░ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ! рддрд░реНрдХ: рдмрд╛рд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╣ Qt рдХреЗ рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рд╣реИ) рджреГрд╢реНрдп рдХреЛ рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ ( qgraphicsview.cpp +458 рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдореЗрдВ рдКрдкрд░; qgraphicsview.cpp +3816 - рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдХреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ)ред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреБрдХрдбрд╝реЗред
рдФрд░ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ? NSISред
рд╕рдм рдХреБрдЫ рд╕рд╣реА рдерд╛, рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рдерд╛, рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдереЗ, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рд░рд╣реА рдереАред Refactoring ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рд╕рдордп рдмрд╛рдж, QGraphicsScene рдиреЗ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рд╣рдо 40,000 рдЕрдВрдХреЛрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдореЗрдВ рдирд╣реАрдВ рдереЗ, рдЬрдм рдореЛрдЯреА рд▓рд╛рдЗрдиреЗрдВ рдЪрд╛рд▓реВ рдереАрдВ - рд╕реАрдкреАрдпреВ рдкрд░ рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рди рдмрд╣реБрдд рдзреАрдорд╛ рдерд╛ред
рд░рд╛рд╕реНрддреЗ рдореЗрдВ, рд╣рдо рд╡рд┐рдЬреЗрдЯреНрд╕ рдкрд░ GUY рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдердХ рдЧрдПред рдпрд╛ рддреЛ рдХреЛрдб рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ, рдпрд╛ рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрдВ рдереЛрдбрд╝рд╛ (рдирд┐рд░реНрдорд╛рддрд╛, .рдпреВрдЖрдИ + ред Cpp рд╕реЗ)ред рдореИрдВ рдЖрдзреБрдирд┐рдХ рд╕рд╛рдорд╛рди рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреИрд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдгред
рдЙрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХреА рдЬрд┐рди рдкрд░ рд╣рдо рдХрд░реЗрдВрдЧреЗ:
- QGraphicsView / рджреГрд╢реНрдп рдкрд░ рдкреБрд░рд╛рдиреЗ рдврдВрдЧ рдХрд╛ рддрд░реАрдХрд╛;
- рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирдВрдЧреЗ QOpenGLWidget рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
- QOpenGLWidget рдкрд░ рдкреВрд░реА рд╡рд┐рдВрдбреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ GUI (рдпрд╛ рдХреБрдЫ рдвреВрдВрдвреЗрдВ);
- рдкрд┐рдЫрд▓реЗ рджреЛ рдЕрдВрдХ + OSG рдХреНрд░рдорд╢рдГ;
- Qt QML / рдХреНрд╡рд┐рдХ,
рдХреЗрд╡рд▓ рдЫрд╣ рдЕрдВрдХ; рд╣рдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдореЗрд░реЗ рдХрд░рд┐рд╢реНрдореЗ рдиреЗ рдкрд▓реНрд▓рд╛ рдЭрд╛рдбрд╝ рд▓рд┐рдпрд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ QML рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк
рдореИрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреГрд╢реНрдпрдЪрд┐рддреНрд░ / рдЧреНрд░рд╛рдлрд╝ рдЦреЛрд▓рд╛ред рджреЗрдЦрд╛ рдФрд░ рдмрдВрдж =)ред рдореИрдВрдиреЗ рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдЦреЗрд▓рд╛, рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреЛрд╖рд┐рдд рд▓рдХреНрд╖реНрдп рдХреЗ рдХрд░реАрдм рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ред
рдФрд░ рдлрд┐рд░ рдХреНрдпрд╛ рдЬрд░реВрд░рдд рдереА? рдпрд╣рд╛рдБ рд╕рд╣рд╕рдВрдмрдВрдз рдкреИрдирд▓ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╡рдХреНрд░, рддрд░рд╛рдЬреВ рдХреЗ рд▓рд┐рдП рдкрдЯрд░рд┐рдпреЛрдВ; рдЦреИрд░, рдЫреЛрдЯреА рдЪреАрдЬреЗрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда, рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг - рдмрдЯрди, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА, рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдореИрдВрдиреЗ sgengine рдХреЛ рджреЗрдЦрд╛, рд╕реАрдЦрд╛ рдХрд┐ рджреЛ рджреГрд╢реНрдп рд░реЗрдЦрд╛рдВрдХрди рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВред рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, QML / рдХреНрд╡рд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдореБрдЭреЗ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдП?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рджрд╡рд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореИрдВрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдгреЛрдВ рдореЗрдВ, рджреГрд╢реНрдп рдХреЗ рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ NKU (рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбрд┐рд╡рд╛рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ; рдмреЗрд╣рддрд░ NDC = рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЙрдкрдХрд░рдг рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ) рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдк рд╕реНрдкреЗрд╕ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЕрднреА рднреА рдПрдлрд┐рди рд╡рд┐рд░реВрдкрдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ 2 рдбреА рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ w = 1 рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рддреБрд░рдВрдд рдПрди.рдбреА.рд╕реА.
рдареАрдХ рд╣реИ, рдПрдирдбреАрд╕реА, рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдХреА рд╡рд┐рдВрдбреЛ рдХреА рдЪреМрдбрд╝рд╛рдИ 800 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИ, рддреЛ рд╢реВрдиреНрдп рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдХрд╛ NDC рд╕рдордиреНрд╡рдп -1 рд╣реИ; 799 рд╡реЗрдВ рдХрд╛ рдХреЗрдВрджреНрд░ рд╕рдордиреНрд╡рдп 1. 1. рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, ndcX = -1 + 2 * i / 799 рд╣реИред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ 100 рд╕реЗ 300 рддрдХ рдПрдХ рдЖрдпрдд рд╣реИ рдФрд░ рдореИрдВ рдкреВрд░реЗ рджреГрд╢реНрдп рдХреЛ рдПрдХ рдкреВрд░реА рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕рдореЗрдВ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рдЦрдВрдбрд┐рдд рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ ndcX100, ndcX300 рдХреА рдЧрдгрдирд╛ рдХрд░реВрдВрдЧрд╛, рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рдирдХ рд╢реАрд░реНрд╖ рдкрд░ рдлреЗрдВрдХ рджреЗрдВ рдФрд░ рдорд╛рдирдХ рдХреЗ рдмрд╛рдж
gl_Position = matrix * position;
[ndcX100 рдореЗрдВ рд░реИрдЦрд┐рдХ "рд░реИрдк" gl_Position.x; ndcX300]ред рд╣рдо рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЪрд╛рд▓ рдЖрдкрдХреЛ рджреГрд╢реНрдп рдХреЗ рдХрд┐рд╕реА рднреА рдЪрдпрдирд┐рдд рдЖрдпрдд рдореЗрдВ рджреГрд╢реНрдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреАред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдЧреНрд░рд╛рдл рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╢реБрд░реВ рд╣реБрдЖред рдЖрдк рдпрд╣рд╛рдВ рдХреЗ рдкрд▓реНрд▓реА рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдЧреНрд░рд╛рдл ; shaders/line.vsh
рдореЗрдВ рд╕рднреА рдирдордХред
рджреГрд╢реНрдп / рджреГрд╢реНрдп
рдЕрдЧрд▓реЗ рддреАрди рдорд╣реАрдиреЗ рдЯреАрдХреЗ рдХрд╛ рд▓реЗрдЦрди рдерд╛, рдпрд╣ рдП 4 = рдХреЗ 12 рдкрддреНрд░рдХ рдирд┐рдХрд▓рд╛ред рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рд╣рдордиреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдорд╡реАрд╕реА ... рдЙрд░реНрдл тАЛтАЛрдПрдорд╡реАрдкреА ... рдЙрд░реНрдл тАЛтАЛрд╢реНрд░реЗрдгреАрдмрджреНрдз рдПрдорд╡реАрд╕реА / рдПрдорд╡реАрдкреА ... рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреАрдПрд╕реА рд▓реЗ рд▓рд┐рдпрд╛ - рдпреЗ рд╕рднреА рдХрдиреНрд╡реЗрдВрд╢рди рд╣реИрдВ, рдЕрдЪреНрдЫрд╛ рдЕрдкрдШрдЯрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдордиреЗ рдПрдХ рджреГрд╢реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕реНрд░реЛрдд рдЙрдкрд▓рдмреНрдз рд╣реИрдВ - рджреГрд╢реНрдп рдирдореВрдирд╛ ред рдЗрд╕рдиреЗ QtQML / рдХреНрд╡рд┐рдХ рдкрд░ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХреАред рдХреГрдкрдпрд╛ рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдЕрднреА рднреА рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╣рд╛рдВ, рдкрд╣рд▓реЗ рд╕реЗ рдЖрдзрд╛ рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рд╛рдл рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рджреГрд╢реНрдп рдореБрдЦреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЗрд╕рдХреЗ NDC рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИред SceneCamera рдЙрд╕рдХреЗ рд╕рд╛рде рдШрдирд┐рд╖реНрда рдорд┐рддреНрд░ рд╣реИред рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рдЕрдЧрд▓реА рдЗрдХрд╛рдИ SceneItem рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ; рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ - рд▓рд╛рдЗрдиреЗрд╕реНрдЯреНрд░рд┐рдк рдХреА рддрд░рд╣ - рдФрд░ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рдЙрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, updatePaintNode
рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ SceneMaterial - FlatColorMaterial рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╢реЗрд╖ рдЗрдХрд╛рдЗрдпрд╛рдВ рднреА рдХреБрдЫ =) рдХрд░рддреА рд╣реИрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬреЛрдбрд╝рддреЛрдбрд╝, рдЙрдкрдХрд░рдгред рдХрдИ рдХрдХреНрд╖рд╛рдПрдВ QML рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЖрдк рдРрд╕реЗ C ++ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреНрдпрд╛ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ?
рджреВрд╕рд░реА рдореБрд╢реНрдХрд┐рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рдирдП рджреГрд╢реНрдп рдХреЗ рдЕрдВрджрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рд╣рдордиреЗ рд╕реЛрдЪрд╛, рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдЬрд╛рд░реА рд░рдЦрд╛ред
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн:
- рд╕рдм рдХреБрдЫ рджреГрд╢реНрдп рдХреЗ рдПрдХ рдХреЙрд▓рдо рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рд╣рдордиреЗ Qt рдХреЛ рд╕рд╣реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рд╕реНрдЯреЗрдЬ рдкрд░ рдирд┐рдпрдорд┐рдд QML рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рдЙрдирдХреЗ рдФрд░ рдШрдЯрддрд╛ (рдпрд╛ рдЕрдиреНрдп SceneItem) рдХреЗ рдмреАрдЪ z- рдХреНрд░рдо рд╕рд╣реА рд╣реЛ;
- рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдореЗрдореЛрд░реА рдЦрдкрддред
рд╡рд┐рдкрдХреНрд╖
- рдЬрдЯрд┐рд▓ urbermachine;
- рдУрдкрдирдЬреАрдПрд▓ рдФрд░ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
- рдЕрд░реНрджреНрдз рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиред
рдмреЗрд╢рдХ, рд╣рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдерд╛
Z- рдХреНрд░рдо рдХреЗ рд╕рд╛рде рдмрдЧ
рдЬрдм рд╣рдордиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдШрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рд╣рдордиреЗ рдРрд╕реА рддрд╕реНрд╡реАрд░реЗрдВ рджреЗрдЦреАрдВ:


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛, "рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд┐рдпрд╛!" рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ gl_Position.z рдХрд┐рд╕реА рддрд░рд╣ рдЧрд▓рдд рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ рдХрд┐ рд░рд╛рдд рдореЗрдВ рдХреНрдпреЛрдВред рд╣рдордиреЗ рд╣рд╛рд░ рдирд╣реАрдВ рдорд╛рдиреА: рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ Qt рд╢реЗрдбреНрд╕ рдХреЛ рд╕рд╣реА рдХрд░рддрд╛ рд╣реИ рдФрд░ gl_Position.z рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рдордиреЗ рд╕реЛрдЪрд╛ред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рдпрд╣ рд╣рдо рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рдЧрдпрд╛: рд╣рдордиреЗ z рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛, рдФрд░ Qt рдиреЗ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛! рдЗрд╕ рдкреНрд░рдХрд╛рд░, QML рдХреЗ рдЖрдЗрдЯрдо.z рдорд╛рди рдХреЛ OpenGL ( SceneMaterial.cpp +20 ) рд╕реЗ z рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдХреНрд▓рд┐рдк рдХреЗ рд╕рд╛рде рдмрдЧ: рд╕рдЪ
рдПрдХ рдмрд╛рд░ рдЪреИрдЯ рдореЗрдВ, рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдЯреАрдо рдПрдХ рд╕реНрдХреНрд░реАрди рднреЗрдЬрддреА рд╣реИ рдЬрд╣рд╛рдВ рд╕рдордиреНрд╡рдп рдЧреНрд░рд┐рдб рдХреА рдмрд╛рдИрдВ рд░реЗрдЦрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИред

рд╣рдорд╛рд░реЗ рдХреНрдпреВ рдПрдВрдб рдП рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдкреАрдбрд╝рд╛ рджреА рдФрд░ рд╕реНрдерд┐рд░ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рд▓рд┐рдП рдХрджрдо рдЙрдард╛рдП: рд╣рдордиреЗ рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ 100% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдФрд░ "рдлреНрд▓реИрд╢" рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ред Artyom рдмреИрдареЗ, рд╕реЛрдЪрд╛, рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдЬрдм clip: true
рдФрд░ рдЖрдЗрдЯрдо рдЖрдпрддрд╛рдХрд╛рд░ рд╣реИ, рддреЛ glScissor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рддрд░реНрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВ! рдХреНрдпреВрдПрдордПрд▓ рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдХрд╛ рд░реЗрдЦрд╛рдВрдХрди рдЕрдЧрд▓реЗ / рдкрд┐рдЫрд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рддрдХ рдЧрд┐рд░ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХреИрдВрдЪреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдЯ рдЧрдИ рдереАред
рд╣рдордиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛: width: Math.round(metrics.width + leftPadding + 2 * rightPadding + 0.5)
ред рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рддрд░рд╣ рдХреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдЖрдЗрдЯрдо рдореЗрдВ рд╣рдореЗрд╢рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХреЗрдбреАрдкреАрд╡реА рд▓рд╛рдКрдВрдЧрд╛

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!