рд╕реА ++ рдФрд░ рд╡реБрд▓рдХрди рдореЗрдВ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдиреНрдпреВрдирддрдо рдирд┐рд░реНрдорд╛рдг

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ 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];
}

рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рд╕реНрдерд┐рд░ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЦреЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдлрд╝рд╕реЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ Neighbors66 рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдШрди рдХреЗ рдЖрдо рдЪреЗрд╣рд░реЗ рд╣реИрдВред

static constexpr std::array<glm::ivec3, 6> Neighbors6 = {
        glm::ivec3(1, 0, 0),    //right
        glm::ivec3(-1, 0, 0),   //left
        glm::ivec3(0, 1, 0),    //top
        glm::ivec3(0, -1, 0),   //bottom
        glm::ivec3(0, 0, 1),    //front
        glm::ivec3(0, 0, -1)    //back
    };

Neighbors26- рдпреЗ рд╕рднреА рдкрдбрд╝реЛрд╕реА рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдШрди рдХрд╛ рдПрдХ рдЖрдо рдЪреЗрд╣рд░рд╛, рдХрд┐рдирд╛рд░рд╛ рдпрд╛ рд╢реАрд░реНрд╖ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдШрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ 3x3x3 рдЧреНрд░рд┐рдб рд╣реИред рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдЕрдиреНрдп рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ 2D рд╕реЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рд░рдгрд┐рдпрд╛рдБ рднреА рд╣реИрдВред

рдХреНрдпреВрдм рдХрд╛ рдПрдХ рдЪреЗрд╣рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрд╣рд░реЗ рдХреА рджрд┐рд╢рд╛рдПрдВ рд╕рд░рдгреА рдореЗрдВ рджрд┐рд╢рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ Neighbors6ред

static constexpr std::array<FaceArray, 6> NeighborFaces = {
    //right face
    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;

        //NOTE: bounds checking omitted

        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рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб рдмрдлрд╝рд░реНрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╕рдордп рд╕рдВрд╕рд╛рдзрди рд╣рдЯрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдмрд╛рдж рдореЗрдВред)

рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрд╖ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


рд╡рд╣ рд╕рдм рдЬреЛ рдореИрдВрдиреЗ рдПрдХ рд╣рдлреНрддреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ - рджреБрдирд┐рдпрд╛ рдХреЛ рдХрдИ рд╡реЙрдХреНрд╕рд▓ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рддреИрдпрд╛рд░ рдХреА рдФрд░ рджреВрд╕рд░реЗ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред

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


All Articles