рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ C ++ рдФрд░ рд╡рд▓реНрдХрди рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ Minecraft рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВ рд╣реЛрдкрд╕рди рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ , рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реА ++ рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдерд╛ред рдмрджрд▓реЗ рдореЗрдВ, рд╡рд╣ рд╢реЗрди рдмреЗрдХ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛, рдЬреЛ рдХрд┐ Minecraft рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рдХрд╛ рд╕реНрд░реЛрдд Infiniminer рдерд╛, рдЬрд┐рд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рд╕рдВрднрд╡рддрдГ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦрдирди рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛редрдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП GitHub рднрдВрдбрд╛рд░ рдпрд╣рд╛рдБ рд╣реИ ред рдкреНрд░рддреНрдпреЗрдХ рджрд┐рди рдХрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЯреИрдЧ рд╣реЛрддрд╛ рд╣реИредрдмреЗрд╢рдХ, рдореИрдВрдиреЗ рд╕рдЪрдореБрдЪ Minecraft рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдереАред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рд╢реИрдХреНрд╖рд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред рдореИрдВ vulkan-tutorial.com рдпрд╛ рд╕рд╛рд╢рд╛ рд╡рд┐рд▓реЗрдо рдХреЗ рдбреЗрдореЛ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреБрдЫ рдореЗрдВ рд╡рд▓реНрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ ред рдЗрд╕рд▓рд┐рдП, рдореБрдЦреНрдп рдЬреЛрд░ рд╡рд▓реНрдХрди рдЗрдВрдЬрди рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рд╣реИ, рди рдХрд┐ рдЦреЗрд▓ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкрд░редрдХрд╛рд░реНрдп
рд╡рд▓реНрдХрди рдкрд░ рд╡рд┐рдХрд╛рд╕ рдУрдкреЗрди рд╡реАрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ Minecraft рдХреА рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЦреЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдХреЛрдИ рдореЙрдм рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рдХреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рд▓рд╛рд▓ рдкрддреНрдерд░ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рдмреНрд▓реЙрдХ рднреМрддрд┐рдХреА рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐ред рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереЗ:- рдПрдХ рдЗрд▓рд╛рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдирд╛
- рд╕рд╛рдиреА
- рдкреНрд░рдХрд╛рд╢
- рдПрдХ рдЗрд▓рд╛рдХреЗ рдЬрдирд░реЗрдЯрд░ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдирд╛
- рдЗрд▓рд╛рдХреЗ рдмрджрд▓рдиреЗ рдФрд░ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдирд╛
рдореБрдЭреЗ рдЦреЗрд▓ рдореЗрдВ рдПрдХ рдЬреАрдпреВрдЖрдИ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рднреА рдЬреАрдпреВрдЖрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рд╡рд▓реНрдХрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдереЗредрдкреБрд╕реНрддрдХрд╛рд▓рдп
рдмреЗрд╢рдХ, рдореИрдВ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╡рд▓реНрдХрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдореИрдВ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЕрд░реНрдерд╛рддреН:- VulkanWrapper - Vulkan API рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЕрдкрдирд╛ C ++ рд░реИрдкрд░
- GLFW - рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП
- VulkanMemoryAllocator - рд╡рд▓реНрдХрди рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- рдЬреАрдПрд▓рдПрдо - рдЧрдгрд┐рдд рд╡реИрдХреНрдЯрд░ рдФрд░ рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд▓рд┐рдП
- entt - рд╕рдВрдХреЗрддреЛрдВ / рд╕реНрд▓реЙрдЯ рдФрд░ рдИрд╕реАрдПрд╕ рдХреЗ рд▓рд┐рдП
- stb - рдЗрдореЗрдЬ рд▓реЛрдбрд┐рдВрдЧ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬ рдХреЗ рд▓рд┐рдП
- FastNoise - 3 рдбреА рд╢реЛрд░ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдкрд╣рд▓рд╛ рджрд┐рди
рдкрд╣рд▓реЗ рджрд┐рди, рдореИрдВрдиреЗ рдПрдХ рд╡рд▓реНрдХрди рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдФрд░ рдПрдХ рдЗрдВрдЬрди рдХрдВрдХрд╛рд▓ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдПрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ vulkan-tutorial.com рд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ ред рдпрд╣ рднреА рдПрдХ рд╢реАрд░реНрд╖ shader рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рднрдВрдбрд╛рд░рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд╛рд▓ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрд╢рди рдХреЛ рдЯреНрдпреВрди рдХрд░рдирд╛ рднреА рдирд╣реАрдВ рдЖрддрд╛ рдерд╛ред рдмрд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдиреНрд╡реЗрдпрд░ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рддреНрд░рд┐рдХреЛрдг рдЦреАрдВрдЪрдирд╛редрддреНрд░рд┐рдХреЛрдг рдХреЗ рд░реЗрдВрдбрд░рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдФрд░ рдПрдХ рдЧреЗрдо рд▓реВрдк рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред GUI рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдлреНрд░реЗрдо рджрд░ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИредрдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: VoxelEngine
рдФрд░ VoxelGame
редрджреВрд╕рд░рд╛ рджрд┐рди
рдореИрдВрдиреЗ рд╡рд▓реНрдХрди рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд▓реНрдХрди рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рддреА рд╣реИ: рдореЗрдореЛрд░реА рдкреНрд░рдХрд╛рд░, рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдореЛрд░реА рдвреЗрд░ рдФрд░ рджреНрд╡рд┐рддреАрдпрдХ рдЖрд╡рдВрдЯрдиредрдЕрдм рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдерд╛, рддреЛ рдореИрдВрдиреЗ рдореЗрд╖ рдФрд░ рд╢реАрд░реНрд╖ рдмрдлрд╝рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдИрдВред рдореИрдВрдиреЗ рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЗ рд░реЗрдВрдбрд░рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рд╡рд╣ рдореЗрд╖реЛрдВ рдХреЗ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗ, рдФрд░ рдЫрд╛рдпрд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд╣реАрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрд╖ рдбреЗрдЯрд╛ рдХреЛ рддреНрд░рд┐рдХреЛрдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдХреЗ GPU рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИрддреАрд╕рд░рд╛ рджрд┐рди
рдореИрдВрдиреЗ рдПрдХ рдЧреНрд░рд╛рдлрд╝ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЬреЛрдбрд╝рд╛ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрдЧ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдореЗрд░реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреНрд░рд╛рдл рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд▓реНрдХрди рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА рд╣реИредрд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреНрд░рд╛рдлрд╝ рдореБрдЭреЗ рдиреЛрдбреНрд╕ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдиреЛрдбреНрд╕ GPU рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдп рд╣реИрдВред рдкрд╕рд▓рд┐рдпрд╛рдВ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рдмрдлрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЧреНрд░рд╛рдл рдбрдмрд▓ рдмрдлрд╝рд░рд┐рдВрдЧ рдХрдорд╛рдВрдб рдмрдлрд╝рд░ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд┐рдЫрд▓реЗ рдлрд╝реНрд░реЗрдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдиреЛрдбреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдмрдлрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдХрдиреНрд╡реЗрдпрд░ рдмреИрд░рд┐рдпрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрд╛рдзрд╛рдПрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХрддрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реЗрдорд╛рдлреЛрд░ рдбрд╛рд▓реЗрдВредрдиреЛрдбреНрд╕ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддреЗ рд╣реИрдВ ред рддрдм рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреНрд░рд╛рдл рд╕рд╛рдордпрд┐рдХ рдЫрдБрдЯрд╛рдИ рдХрд░рддрд╛ рд╣реИ редрдиреЛрдбреНрд╕, рдЬреЛ рдЫрд╛рдВрдЯреЗ рдЧрдП рдиреЛрдбреНрд╕ рдХреА рдПрдХ рдлреНрд▓реИрдЯ рд╕реВрдЪреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЙрди рд╕рднреА рдиреЛрдбреНрд╕ рдХреЗ рдмрд╛рдж рдЪрд▓рд╛ рдЬрд╛рдП рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИредрдЗрдВрдЬрди рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЛрдб рд╣реЛрддреЗ рд╣реИрдВред AcquireNode
рдПрдХ рдмрдлрд░ рдЪреЗрди (рд╕реНрд╡реЗрдкрдЪреИрди) рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, TransferNode
рд╕реАрдкреАрдпреВ рд╕реЗ рдЬреАрдкреАрдпреВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд PresentNode
рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЫрд╡рд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИредрдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ preRender
, render
рдФрд░ postRender
, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред AcquireNode
рдХреЗ рджреМрд░рд╛рди рдмрдлрд╝рд░реНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИ preRender
ред PresentNode
рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд╕рдордп рдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ postRender
редрдореИрдВрдиреЗ рддреНрд░рд┐рдХреЛрдг рд░реЗрдВрдбрд░рд░ рдХреЛ рд░рд┐рдлрд▓реЗрдХреНрдЯ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕рдм рдХреБрдЫ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд░реЗрдВрдбрд░ рдЧреНрд░рд╛рдл рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдХреЗ рдмреАрдЪ рдПрдХ рдХрд┐рдирд╛рд░рд╛ рд╣реИ AcquireNode
рдФрд░TriangleRenderer
рд╕рд╛рде рд╣реА рд╕рд╛рде TriangleRenderer
рдФрд░ PresentNode
ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлреНрд░реЗрдо рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рдмрдлрд░ рдЪреЗрди рдХреА рдЫрд╡рд┐ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХреА рдЧрдИ рд╣реИредрдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЬрди рдХреЗ рдЕрдВрджрд░ рдХрд╕рдо рдмрджрд▓ рдЧрдИ рд╣реИрджрд┐рди 4
рдореИрдВрдиреЗ рдПрдХ рдХреИрдорд░рд╛ рдФрд░ рдПрдХ 3 рдбреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдпрд╛ред рдЕрдм рддрдХ, рдХреИрдорд░рд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдмрдлрд░ рдФрд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреВрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИредрдореИрдВ рдЙрд╕ рджрд┐рди рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд▓реНрдХрди рдХреЗ рд╕рд╛рде 3 рдбреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдирд▓рд╛рдЗрди рд╕рд╛рдордЧреНрд░реА рдУрдкрдирдЬреАрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд▓реНрдХрди рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред OpenGL рдореЗрдВ, рдХреНрд▓рд┐рдк рд╕реНрдкреЗрд╕ рдХрд╛ Z рдЕрдХреНрд╖ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ [-1, 1]
, рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╣реИ Y = 1
ред рд╡рд▓реНрдХрди рдореЗрдВ, Z рдЕрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ [0, 1]
, рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╣реИ Y = -1
ред рдЗрди рдЫреЛрдЯреЗ рдЕрдВрддрд░реЛрдВ рдХреЗ рдХрд╛рд░рдг, рдорд╛рдирдХ GLM рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВредGLM рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИGLM_FORCE_DEPTH_ZERO_TO_ONE
, Z рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, Y рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреЗрд╡рд▓ (1, 1)
рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ рддрддреНрд╡ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рдмрджрд▓рдХрд░ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (GLM 0 рд╕реЗ рдЕрдиреБрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)редрдпрджрд┐ рд╣рдо рд╡рд╛рдИ рдЕрдХреНрд╖ рдХреЛ рдлреНрд▓рд┐рдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╢реАрд░реНрд╖ рдбреЗрдЯрд╛ рдХреЛ рдлреНрд▓рд┐рдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╛рдИ рдЕрдХреНрд╖ рдХреА рдирдХрд╛рд░рд╛рддреНрдордХ рджрд┐рд╢рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редрдЕрдм 3 рдбреА рдореЗрдВ!рджрд┐рди 5
рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдФрд░ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдХреИрдорд░рд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЗрдирдкреБрдЯ рд╕рд┐рд╕реНрдЯрдо рдмрд╣реБрдд рдкрд░рд┐рд╖реНрдХреГрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ GLFW рдЗрдирдкреБрдЯ рдХреА рд╡рд┐рд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░рддреЗ рд╕рдордп рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдереАредрдХреАрдмреЛрд░реНрдб рдФрд░ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ GLFW рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкрддрд▓реА рдЖрд╡рд░рдг рд╣реИ, рдЬреЛ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ entt
редрдмрд╕ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП - рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдкрд╕рди рдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджрд┐рди 1 рдХрд┐рдпрд╛редрджрд┐рди 6
рдореИрдВрдиреЗ voxel рдмреНрд▓реЙрдХреНрд╕ рдмрдирд╛рдиреЗ рдФрд░ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдореЗрд╢рд┐рдВрдЧ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рдЬрд╛рдирддрд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдХрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАредрд╕рд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ рдерд╛ ChunkData<T, chunkSize>
рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдХреНрд╖ рдХреЗ T
рдЖрдХрд╛рд░ chunkSize
рдХреЗ рдПрдХ рдХреНрдпреВрдм рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рд╡рд░реНрдЧ 1 рдбреА рд╕рд░рдгреА рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ 3 рдбреА рд╕рдордиреНрд╡рдп рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ 16 x 16 x 16 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ 4096 рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░рдгреА рд╣реИред рдПрдХрдФрд░ рдЕрдореВрд░реНрдд рдкрджреЛрдВ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ (0, 0, 0)
рд╣реИ(15, 15, 15)
ред рдпреЗ рджреЛ рд╡рд░реНрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╢ рдбреЗрдЯрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд░реИрдЦрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 3 рдбреА рд╕рдордиреНрд╡рдп рдЕрднреА рднреА рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:for (glm::ivec3 pos : Chunk::Positions()) {
auto& data = chunkData[pos];
glm::ivec3 offset = ...;
auto& neighborData = chunkData[pos + offset];
}
рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рд╕реНрдерд┐рд░ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЦреЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдлрд╝рд╕реЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ Neighbors6
6 рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдШрди рдХреЗ рдЖрдо рдЪреЗрд╣рд░реЗ рд╣реИрдВредstatic constexpr std::array<glm::ivec3, 6> Neighbors6 = {
glm::ivec3(1, 0, 0),
glm::ivec3(-1, 0, 0),
glm::ivec3(0, 1, 0),
glm::ivec3(0, -1, 0),
glm::ivec3(0, 0, 1),
glm::ivec3(0, 0, -1)
};
Neighbors26
- рдпреЗ рд╕рднреА рдкрдбрд╝реЛрд╕реА рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдШрди рдХрд╛ рдПрдХ рдЖрдо рдЪреЗрд╣рд░рд╛, рдХрд┐рдирд╛рд░рд╛ рдпрд╛ рд╢реАрд░реНрд╖ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдШрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ 3x3x3 рдЧреНрд░рд┐рдб рд╣реИред рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдЕрдиреНрдп рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ 2D рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рд░рдгрд┐рдпрд╛рдБ рднреА рд╣реИрдВредрдХреНрдпреВрдм рдХрд╛ рдПрдХ рдЪреЗрд╣рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрд╣рд░реЗ рдХреА рджрд┐рд╢рд╛рдПрдВ рд╕рд░рдгреА рдореЗрдВ рджрд┐рд╢рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ Neighbors6
редstatic constexpr std::array<FaceArray, 6> NeighborFaces = {
FaceArray {
glm::ivec3(1, 1, 1),
glm::ivec3(1, 1, 0),
glm::ivec3(1, 0, 1),
glm::ivec3(1, 0, 0),
},
...
};
рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореЗрд╖ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдмрд╕ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреНрд▓реЙрдХ рдареЛрд╕ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЪреЗрд╣рд░рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкрдбрд╝реЛрд╕реА рдирд╣реАрдВ рд╣реИред рдХреЛрдб рдмрд╕ рдПрдХ рдШрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдШрди рдХреЗ рд╣рд░ рдЪреЗрд╣рд░реЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд "рднреЛрд▓реА" рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ редfor (glm::ivec3 pos : Chunk::Positions()) {
Block block = chunk.blocks()[pos];
if (block.type == 0) continue;
for (size_t i = 0; i < Chunk::Neighbors6.size(); i++) {
glm::ivec3 offset = Chunk::Neighbors6[i];
glm::ivec3 neighborPos = pos + offset;
if (chunk.blocks()[neighborPos].type == 0) {
Chunk::FaceArray& faceArray = Chunk::NeighborFaces[i];
for (size_t j = 0; j < faceArray.size(); j++) {
m_vertexData.push_back(pos + faceArray[j]);
m_colorData.push_back(glm::i8vec4(pos.x * 16, pos.y * 16, pos.z * 16, 0));
}
}
}
}
рдореИрдВрдиреЗ TriangleRenderer
рд╕рд╛рде рджрд┐рдпрд╛ ChunkRenderer
ред рдореИрдВрдиреЗ рдПрдХ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рднреА рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдмреНрд▓реЙрдХ рдореЗрд╖ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХреЗред рдпрд╣ рдХреЗ рдмреАрдЪ рдкреНрд░рддрд┐рдкрд╛рджрди рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдХрд┐рдирд╛рд░реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реЛ рдЧрдпрд╛ рдерд╛ TransferNode
рдФрд░ ChunkRenderer
ред рдпрд╣ рдХрд┐рдирд╛рд░рд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрддрд╛рд░ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрддрд╛рд░ рдХреЗ рдмреАрдЪ рдХрддрд╛рд░ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИредрдлрд┐рд░ рдореИрдВрдиреЗ рдЗрдВрдЬрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХреЗред рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ, рдпрд╣ рдмрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реБрд▓рдХрди рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред рдЪреВрдВрдХрд┐ рдмрдлрд╝рд░реНрд╕ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдирд┐рд░рдВрддрд░ рдЖрдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдЖрдк рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдкрдХреЛ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдмрдлрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВредрд╕рднреА рдЖрджреЗрд╢ рдЬреЛ рдмрдлрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдЕрдм рдпреЗ рд╕рднреА рдбреНрд░рд╛рдЗрдВрдЧ рдХрдорд╛рдВрдб рд╣реИрдВ) рдкреБрд░рд╛рдиреА рдмрдлрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реНрдг рдирд┐рд╖реНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдЬреАрдкреАрдпреВ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛редрдЖрдкрдХреЛ рдЧрддрд┐рд╢реАрд▓ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдФрд░ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдпрджрд┐ X рдпрд╛ Y рдЕрдХреНрд╖ рдкрд░ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ 0 рд╣реИ, рддреЛ рдПрдХ рдмрдлрд╝рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬрдм рд╡рд┐рдВрдбреЛ рдХреЛ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреВрд░реЗ рдЦреЗрд▓ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ рдЬрдм рдЦрд┐рдбрд╝рдХреА рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИредрдЕрдм рдореЗрд╖ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддреАрди рдЖрдпрд╛рдореА рд╢рддрд░рдВрдЬ рдХреА рдмрд┐рд╕рд╛рдд рд╣реИред рдореЗрд╖ рдХреЗ рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рдЗрд╕рдХреА XYZ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ 16 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредрджрд┐рди 7
рдореИрдВрдиреЗ рдЦреЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдИ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдмрдирд╛рдпрд╛ред рдХрдИ рдмреНрд▓реЙрдХ рдФрд░ рдЙрдирдХреЗ рдЬрд╛рд▓ ECS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ entt
ред рдлрд┐рд░ рдореИрдВрдиреЗ рдмреНрд▓реЙрдХ рд░реЗрдВрдбрд░рд░ рдХреЛ рд░рд┐рдлреИрдХреНрдЯ рдХрд░ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЙрди рд╕рднреА рдмреНрд▓реЙрдХреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗ рдЬреЛ рдИрд╕реАрдПрд╕ рдореЗрдВ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХреЗрд╡рд▓ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рдирдП рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ редрдореИрдВрдиреЗ рдЬрд╛рд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдореБрдЭреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмреНрд▓реЙрдХ рдЬрд╛рд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрдм рдореИрдВ рдХреНрдпреВрдмреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛редрдЬрдм рдЖрдк рдХрд┐рд╕реА рдХреНрдпреВрдм рдХреЛ рдЬреЛрдбрд╝рддреЗ рдпрд╛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд╖ рдореЗрдВ рд╡рд░реНрдЯрд┐рд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдврд╝ рдпрд╛ рдШрдЯ рд╕рдХрддреА рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рдЪрдпрдирд┐рдд рд╡рд░реНрдЯреЗрдХреНрд╕ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдирдпрд╛ рдЬрд╛рд▓ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдпрд╛ рдЫреЛрдЯрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЬрд╛рд▓ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдирдП рд╢реАрд░реНрд╖ рдмрдлрд╝рд░реНрд╕ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПредрдкрд┐рдЫрд▓реЗ рд╢реАрд░реНрд╖ рдмрдлрд╝рд░ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдкрд┐рдЫрд▓реЗ рдлрд╝реНрд░реЗрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдЕрдиреБрджреЗрд╢ рдмрдлрд╝рд░реНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ VkBuffer
ред рдЬрдм рддрдХ рдпреЗ рдХрдорд╛рдВрдб рдмрдлрд╝рд░реНрд╕ рдкреВрд░реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рддрдм рддрдХ рдЗрдВрдЬрди рдХреЛ рдПрдХ рдмрдлрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдо рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ рдПрдХ рдЬрд╛рд▓ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ i
, рддреЛ рдЬреАрдкреАрдпреВ рдлреНрд░реЗрдо рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ i + 2
ред рдЬрдм рддрдХ рдЬреАрдкреАрдпреВ рдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рддрдм рддрдХ рдмрдлрд░ рдХреЛ рд╕реАрдкреАрдпреВ рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреНрд░рд╛рдл рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗредрдпрджрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреНрд░рд╛рдлрд╝ рдиреЛрдб рд╕рдВрд╕рд╛рдзрди (рдмрдлрд░ рдпрд╛ рдЫрд╡рд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╡рд┐рдзрд┐ рдХреЗ sync
рдЕрдВрджрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ preRender
ред рдЗрд╕ рд╡рд┐рдзрд┐ shared_ptr
рдХреЛ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдорд┐рд▓рддрд╛ рд╣реИ ред рдЗрд╕shared_ptr
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб рдмрдлрд╝рд░реНрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╕рдордп рд╕рдВрд╕рд╛рдзрди рд╣рдЯрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдмрд╛рдж рдореЗрдВред)рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрд╖ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд╣ рд╕рдм рдЬреЛ рдореИрдВрдиреЗ рдПрдХ рд╣рдлреНрддреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ - рджреБрдирд┐рдпрд╛ рдХреЛ рдХрдИ рд╡реЙрдХреНрд╕рд▓ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рддреИрдпрд╛рд░ рдХреА рдФрд░ рджреВрд╕рд░реЗ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред