{"id":427325,"date":"2024-07-25T21:33:34","date_gmt":"2024-07-25T21:33:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=427325"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=427325","title":{"rendered":"<span>\u0421\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043b, \u0441\u0430\u043c \u043f\u043e\u043b\u0435\u0442\u0430\u043b: \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b 3D-\u0438\u0433\u0440\u0443 \u0441 \u043d\u0443\u043b\u044f \u043f\u043e\u0434 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0438\u0437 90-\u0445 \u0432 2024 \u0433\u043e\u0434\u0443?<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pb\/fz\/qz\/pbfzqziq8wfy3zaycynimrc3zdi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pb\/fz\/qz\/pbfzqziq8wfy3zaycynimrc3zdi.png\"\/><\/p>\n<p> <b>\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e<\/b>: \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043a\u0430\u0436\u0443\u0449\u0443\u044e\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0446\u0435\u043b\u043e\u0439 <i>3D-\u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f<\/i>, \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f <i>\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/i> \u0438 <i>\u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c<\/i> \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0430\u043b\u0435\u043a\u0438 \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0446\u0435\u043b\u043e\u043c!<\/p>\n<p> \u0421\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u043d\u0434\u0438-\u0438\u0433\u0440 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0447\u0435\u0433\u043e-\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441 \u043d\u0443\u043b\u044f, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u2014 \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435! \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u044e \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c, \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441 13-14 \u043b\u0435\u0442 \u043c\u0435\u043d\u044f \u0442\u044f\u043d\u0435\u0442 \u043f\u0438\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0435 3D-\u0434\u0435\u043c\u043a\u0438 \u0438 \u0438\u0433\u0440\u0443\u0448\u043a\u0438. \u0415\u0449\u0451 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043a\u0443\u0440\u0441\u0435 \u041f\u0422\u0423 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0434\u0435\u043c\u043a\u0443 \u0441 3D-\u0432\u0435\u0440\u0442\u043e\u043b\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0442\u0438 \u0438 \u0438\u0434\u0435\u044f \u0437\u0430\u043f\u0438\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u043b\u0435\u0442\u0430\u043b\u043a\u0438 \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u043b\u0430 \u043c\u0435\u043d\u044f \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c! \u0421\u043f\u0443\u0441\u0442\u044f 6 \u043b\u0435\u0442, \u0432 22 \u0433\u043e\u0434\u0430 \u044f \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0441\u0438\u043b\u0430\u043c\u0438 \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0430\u0440\u043a\u0430\u0434\u043d\u0443\u044e \u0434\u0435\u043c\u043a\u0443 \u043f\u0440\u043e \u0431\u0430\u0442\u0430\u043b\u0438\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a\u0430\u0445, \u0434\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0430\u0436 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445 \u0438\u0437 90-\u0445 \u2014 NVidia Riva 128 \u0438 3DFX Voodoo 3! \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f \u2014 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u00ab\u0442\u0440\u0438\u0434\u044d\u00bb \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0434\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0434\u0435\u043c\u043a\u0438? \u0422\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442!<a name=\"habracut\"><\/a><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f<\/font><\/h2>\n<p> \u0414\u0440\u0443\u0437\u044c\u044f! \u0412\u0438\u0436\u0443, \u0447\u0442\u043e \u0432\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043c\u043e\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u0438 \u0438\u0437 90-\u0445 \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb, \u0433\u0434\u0435 \u043c\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u043d\u043e \u0438 \u043f\u0438\u0448\u0435\u043c \u0434\u0435\u043c\u043a\u0438 \u043d\u0430 \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 API. \u041c\u044b \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u0441 \u0432\u0430\u043c\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c 3Dfx Voodoo, S3 ViRGE \u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 PowerVR MBX \u0438, \u0434\u0443\u043c\u0430\u044e, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0433\u0440 \u043f\u043e\u0434 Windows \u0438\u0437 90-\u0445. \u041f\u0440\u043e \u00ab\u0441\u0442\u0430\u0440\u044b\u0439\u00bb OpenGL \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435 \u0432\u0438\u0436\u0443 \u2014 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u043e\u0432\u0438\u0447\u043a\u0438 \u0443\u0447\u0430\u0442\u0441\u044f \u043f\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u0441 glBegin\/glEnd \u0438 FFP (Fixed Function Pipeline), \u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 API \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Khronos. \u0417\u0430\u0442\u043e \u043f\u0440\u043e \u00ab\u0441\u0442\u0430\u0440\u044b\u0439\u00bb DirectX \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0441\u0435\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0443\u0436\u0435 \u043f\u043e\u0442\u0451\u0440\u043b\u0438 \u0434\u0430\u0436\u0435 \u0438\u0437 MSDN, \u0445\u043e\u0442\u044f \u0432 \u043d\u0451\u043c \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e!<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/ni\/tr\/24\/nitr24iwtpiaxnfqkwuhdtdf9xg.jpeg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ni\/tr\/24\/nitr24iwtpiaxnfqkwuhdtdf9xg.jpeg\" data-blurred=\"true\"\/><\/p>\n<p> \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u043f\u0440\u043e\u0441\u0438\u0442 \u2014 \u0437\u0430\u0447\u0435\u043c \u043f\u0438\u043b\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 90-\u0445 \u0433\u043e\u0434\u043e\u0432, \u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0448\u0438\u043d (\u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e) \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0446\u0432\u0435\u0442\u043c\u0435\u0442 \u0438 \u00ab\u043d\u0438\u043a\u0442\u043e \u0432 \u0441\u0432\u043e\u0435\u043c \u0443\u043c\u0435\u00bb \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f? \u041d\u0443, \u0440\u0435\u0442\u0440\u043e-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0438\u043d\u0433 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0435\u043c\u043e\u043a \u2014 \u044d\u0442\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0421\u0440\u0435\u0434\u0438 \u043c\u043e\u0438\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u044f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0451 \u0443\u0447\u0430\u0442\u0441\u044f \u0432 \u0448\u043a\u043e\u043b\u0435, \u0430 \u0443\u0436\u0435 \u043d\u0430\u0442\u0430\u0441\u043a\u0430\u043b\u0438 \u0441 \u0431\u0430\u0440\u0430\u0445\u043e\u043b\u043e\u043a Pentium III \u0438\u043b\u0438 Pentium IV \u0438 GeForce 4 MX440 \u0438 \u0441\u0438\u0434\u044f\u0442, \u0431\u0430\u043b\u0434\u0435\u044e\u0442 \u0438 \u0438\u0433\u0440\u0430\u044e\u0442 \u0432 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u0440\u0443\u0448\u043a\u0438 \u0438\u0437 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441 \u043f\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0442\u0440\u0443\u0448\u043d\u044b\u043c \u043e\u043f\u044b\u0442\u043e\u043c, \u0434\u0430 \u0438 \u044f \u0441\u0430\u043c \u0442\u0430\u043a\u0438\u043c \u0431\u044b\u043b \u0438 \u043e\u0441\u0442\u0430\u044e\u0441\u044c \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c. \u0412\u043e\u043d, \u043c\u043d\u0435 \u0434\u0430\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/users\/dlinyj\/\" class=\"user_link\">dlinyj<\/a> \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u043b \u0441\u0432\u043e\u0438 \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u0432 \u043b\u0438\u0447\u043a\u0443, \u0430 \u044f \u0441\u0438\u0434\u0435\u043b \u0438 \u0441\u043b\u044e\u043d\u0438 \u043f\u0443\u0441\u043a\u0430\u043b. \u0422\u0430\u043a \u0447\u0442\u043e \u0444\u0430\u043a\u0442 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u043e\u043c \u2014 \u0440\u0435\u0442\u0440\u043e-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0438\u043d\u0433 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u043e\u043b\u0435\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0435\u043d \u2014 \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c!<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/zh\/__\/nm\/zh__nm4gply3qcqhon4ieqxxhzq.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/zh\/__\/nm\/zh__nm4gply3qcqhon4ieqxxhzq.jpeg\" data-blurred=\"true\"\/><\/p>\n<p> \u0410 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u2014 \u044d\u0442\u043e \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f! \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0433\u0440\u044b \u00ab\u0434\u0435\u0434\u044b\u00bb \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0438\u043b\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0430\u043c\u043e\u043c\u0443, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432 \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0441\u043d\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u044d\u0442\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u043c\u0443 \u0447\u0438\u0441\u043b\u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0437\u0440\u0438\u0442\u0435\u043b\u0435\u0439! \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u0430\u043c DirectX6 \u0432 \u0446\u0435\u043b\u043e\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435 DX12, \u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0437\u0430\u043a\u043e\u0432\u044b\u0440\u0438\u0441\u0442\u044b\u0435 \u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0445\u0430\u043a\u0430\u043c\u0438. \u041d\u0443 \u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043b\u0435\u0442\u0430\u043b\u043a\u0438? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0442\u0430\u0442\u044c \ud83d\ude42<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/5t\/o_\/h_\/5to_h_hxwxr_wndtkwnmzwgc57m.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/5t\/o_\/h_\/5to_h_hxwxr_wndtkwnmzwgc57m.jpeg\" data-blurred=\"true\"\/><\/p>\n<p> \u0418\u0433\u0440\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 C#. \u041a\u043e\u043c\u0443-\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c, \u043d\u043e \u044f \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u044f\u0437\u044b\u043a, \u0430 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u043d\u043e\u0440\u043e\u0432\u043a\u0435 \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434 Windows 98. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e API \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u044f \u0432\u044b\u0431\u0440\u0430\u043b DirectX 6, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0448\u0435\u043b 7 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 1998 \u0433\u043e\u0434\u0430 \u2014 \u0437\u0430 3 \u0433\u043e\u0434\u0430 \u0434\u043e \u043c\u043e\u0435\u0433\u043e \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \ud83d\ude42<\/p>\n<p> \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 3D-\u0438\u0433\u0440\u044b:<\/p>\n<ul>\n<li> <b>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a<\/b> \u0438\u043b\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0431\u0430\u0437\u0435 Direct3D. \u0412 \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c\u0438, \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432\u043d\u0435 \u043f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f \u0433\u043b\u0430\u0437, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u043e\u0432 \u0438\u0437 \u043a\u0430\u0440\u0442 \u0432\u044b\u0441\u043e\u0442 \u0438 \u0442. \u043f. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 (\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u0430\u043a \u0432 Unity) \u0441\u0446\u0435\u043d\u044b \u043d\u0435\u0442, \u0442\u043e\u043b\u043a\u043e\u0432\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0442\u043e\u0436\u0435, \u0437\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \ud83d\ude42<\/li>\n<li> <b>\u0417\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u0434\u0432\u0438\u0436\u043e\u043a<\/b> \u043d\u0430 \u0431\u0430\u0437\u0435 DirectSound. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 3D-\u0437\u0432\u0443\u043a \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 \u00ab\u0432\u0438\u0443\u00bb \u0438 \u00ab\u0432\u0436\u0443\u0445\u00bb \u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u043e\u0440\u043e\u0436\u0435\u043a \u0438\u0437 wav-\u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u0430 \u0437\u0432\u0443\u043a\u0430 \u0441 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u0438 ogg\/mp3 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e!<\/li>\n<li> <b>\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0432\u043e\u0434\u0430<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u00ab\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435\u00bb \u0438 \u00ab\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0443\u0440\u0441\u043e\u0440\u0430\u00bb \ud83d\ude42 \u0412 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u0435\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434\u0430, \u0440\u0435\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0430 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0448\u0442\u0443\u043a, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0434\u0435\u043c\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442.<\/li>\n<li> <b>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438<\/b> \u2014 \u0441\u044e\u0434\u0430 \u0432\u0445\u043e\u0434\u044f\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439, \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0430\u043c\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u042d\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438 \u043b\u0435\u0433\u043a\u0438\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0447\u0430\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/li>\n<\/ul>\n<p> \u0418\u0433\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u0430\u0440\u043a\u0430\u0434\u043d\u0443\u044e 3D-\u043b\u0435\u0442\u0430\u043b\u043a\u0443 \u0431\u0435\u0437 \u043d\u0430\u043c\u0435\u043a\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0430\u043c\u043e\u043b\u0451\u0442\u0438\u043a\u043e\u043c \u0438 \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u0438\u0435 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u044b \u0438 \u0441\u043f\u0430\u0432\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u00ab\u0441\u0442\u0440\u0435\u043b\u044f\u044e\u0449\u0438\u0435\u00bb \u0431\u0430\u0448\u043d\u0438 (\u0437\u0435\u043d\u0438\u0442\u043a\u0430\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e), \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u043b\u0438 \u043d\u0430\u0448\u0443 \u0431\u0430\u0437\u0443. \u0422\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Battle_City\">Battle City<\/a> \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435! \u0421\u0430\u043c\u0430 \u0438\u0433\u0440\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 \u043e\u0447\u043a\u0438, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0438\u0441\u0441\u0438\u0438 \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442, \u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u0442\u0451\u0442. \u0421\u0430\u043c\u043e\u043b\u0435\u0442\u044b \u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u2014 \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u0438\u0441\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 (\u043f\u0435\u0440\u0435\u0436\u0430\u0442\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438). \u0412\u043e\u0442 \u0438 \u0432\u0435\u0441\u044c \u00ab\u0434\u0438\u0437\u0434\u043e\u043a\u00bb \ud83d\ude42<\/p>\n<p> \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0432 \u0441\u0430\u043c\u043e\u043b\u0451\u0442\u0435 \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0438\u043d\u0442\u0430! \u041d\u0443, \u0438\u043b\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043e\u0442 3D-\u0434\u0432\u0438\u0436\u043a\u0430 \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0430 \u0438 \u0437\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u0438 \u0432 \u043d\u0430\u0448\u0443 3D-\u0438\u0433\u0440\u0443!<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a<\/font><\/h2>\n<p> \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 C# \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u044f\u0437\u044b\u043a \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0434\u0451\u0440\u0433\u0430\u0442\u044c COM-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043e\u0431\u0451\u0440\u0442\u043e\u043a \u0434\u043b\u044f DirectX 6 \u043f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435\u0442, \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e. \u041f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 C++ \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u043d\u0430 C#\/VB \u0438 \u0442.\u043f. \u0411\u043b\u0430\u0433\u043e \u0432 \u043c\u0438\u0440\u0435 .NET \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435, \u043d\u043e \u0443\u0432\u044b, \u0437\u0430\u0431\u044b\u0442\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u043b\u044e\u0441\u043e\u0432, \u043a\u0430\u043a \u0421++\/CLI, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u00ab\u0431\u0430\u0439\u0442\u043a\u043e\u0434\u00bb .NET, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u0448\u043b\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ut\/v6\/fy\/utv6fyobpyxcum4elyv4lykhcza.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ut\/v6\/fy\/utv6fyobpyxcum4elyv4lykhcza.png\"\/><\/div>\n<p> \u041b\u044e\u0431\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043a\u043d\u0430 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e API (\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438) \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043e\u043a\u043d\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 Direct3D6 \u0432\u0441\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0442\u0435\u043c, \u0447\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0431\u044b\u043b \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e DXGI (DirectX Graphics Infrastructure \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u043c\u0438, \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430\u043c\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f DirectDraw. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e DDraw \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0430 VGA 2D-\u0430\u043a\u0441\u0435\u043b\u0435\u043b\u043b\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u0445 \u2014 \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 S3 ViRGE \u0438 Oak Technology \u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u043b\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0431\u043b\u0438\u0442\u0442\u0438\u043d\u0433\u0430 (\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443), \u043d\u043e \u0432 D3D \u0435\u043c\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u0442\u0435\u0441\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u044b.<\/p>\n<p> \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d) \u0438 \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 (\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435), \u0438\u043b\u0438 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 API \u2014 Swap-chain.<\/p>\n<pre><code class=\"cs\">                        Guard(DirectDrawCreate(0, &amp;dd, 0));  ddraw = dd; Guard(ddraw-&gt;SetCooperativeLevel(hwnd, DDSCL_NORMAL));  \/\/ Create primary surface DDSURFACEDESC desc; memset(&amp;desc, 0, sizeof(desc)); desc.dwSize = sizeof(desc); desc.dwFlags = DDSD_CAPS; desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; desc.dwBackBufferCount = 1; Guard(ddraw-&gt;CreateSurface(&amp;desc, &amp;pSurf, 0));  Guard(pSurf-&gt;QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&amp;pSurf4)); primarySurface = pSurf4;  DDPIXELFORMAT pf; pSurf-&gt;GetPixelFormat(&amp;pf);  \/\/ Create RT. Since primary surface is always covers all screen, back buffer should be of real size DDSURFACEDESC rtDesc; memset(&amp;rtDesc, 0, sizeof(rtDesc)); rtDesc.dwSize = sizeof(rtDesc); rtDesc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; rtDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE; rtDesc.dwWidth = Width; rtDesc.dwHeight = Height; Guard(ddraw-&gt;CreateSurface(&amp;rtDesc, &amp;sSurf, 0)); Guard(sSurf-&gt;QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&amp;sSurf4)); <\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u043a\u043d\u043e, \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vf\/i1\/0-\/vfi10-yuisfpzb66eyhbnzhcwti.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vf\/i1\/0-\/vfi10-yuisfpzb66eyhbnzhcwti.png\"\/><\/div>\n<p> \u041d\u043e 3D \u043c\u044b \u043f\u043e\u043a\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u2014 \u0432\u0435\u0434\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 D3D \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435\u0442, \u0431\u043b\u0430\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: Z-\u0431\u0443\u0444\u0435\u0440 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438\u043d\u0430\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. <\/p>\n<pre><code class=\"cs\">                        Guard(ddraw-&gt;QueryInterface(IID_IDirect3D3, (LPVOID*)&amp;d3d)); \/\/ Enumerate and pick best Z-Buffer format Guard(d3d-&gt;EnumZBufferFormats(IID_IDirect3DHALDevice, OnDepthStencilFormatSearchCallback, 0));  \/\/ Create Z-Buffer for this device DDSURFACEDESC zbufDesc; memset(&amp;zbufDesc, 0, sizeof(zbufDesc)); zbufDesc.dwSize = sizeof(zbufDesc); zbufDesc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; zbufDesc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER | DDSCAPS_VIDEOMEMORY; memcpy(&amp;zbufDesc.ddpfPixelFormat, Window::zBufferFormat, sizeof(zbufDesc.ddpfPixelFormat)); zbufDesc.dwWidth = Width; zbufDesc.dwHeight = Height;  IDirectDrawSurface* zTemp; IDirectDrawSurface4* zSurface; Guard(ddraw-&gt;CreateSurface(&amp;zbufDesc, &amp;zTemp, 0)); Guard(zTemp-&gt;QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&amp;zSurface));  \/\/ Attach Z-Buffer to backbuffer Guard(d3dSurface-&gt;AddAttachedSurface(zSurface)); Guard(d3d-&gt;CreateDevice(IID_IDirect3DHALDevice, surf, &amp;device, 0));<\/code><\/pre>\n<p> \u041c\u044b \u0443\u0436\u0435 \u043d\u0430 \u043f\u043e\u043b\u043f\u0443\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0440\u0438\u0434\u044d-\u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a: \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u043d\u0430\u0434\u2026 Begin\/End! \u0414\u0430, \u0432 Direct3D \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0442\u043e\u0436\u0435 \u0431\u044b\u043b\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0438\u0437 OpenGL, \u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u043e\u043d\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445 \u0442\u0435\u0445 \u043b\u0435\u0442 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438, \u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443, \u0443\u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/770724\/\">S3 ViRGE<\/a>:<\/p>\n<pre><code class=\"cs\">                public value struct Vertex { public: float X, Y, Z; float NX, NY, NZ; D3DCOLOR Diffuse; float U, V; };              ...              Vertex[] v = new Vertex[3];             v[0] = new Vertex()             {                 X = 0,                 Y = 0,                 Z = 0,                 U = 0,                 V = 0             };             v[1] = new Vertex()             {                 X = 1,                 Y = 0,                 Z = 0,                 U = 1,                 V = 0             };             v[2] = new Vertex()             {                 X = 1,                 Y = 1,                 Z = 0,                 U = 1,                 V = 1             };              dev.BeginScene();             dev.Begin(PrimitiveType.TriangleList, Device.VertexFormat);             dev.Vertex(v[0]);             dev.Vertex(v[1]);             dev.Vertex(v[2]);             dev.End();             dev.EndScene(); <\/code><\/pre>\n<p> \u0418 \u0432\u043e\u0442, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a! \u0427\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u2014 \u0430 \u0433\u0434\u0435 \u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u0438\u0433\u0440\u0430 \u0438 \u043f\u0440\u0438\u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438, \u043c\u044b \u0436\u0435 \u043d\u0435 \u043d\u0430 \u0443\u0440\u043e\u043a\u0435 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438\u2026 \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u044f 3D-\u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041b\u044e\u0431\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 <b>\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/b> \u2014 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u0437 \u043c\u0438\u0440\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (\u0442\u043e \u0435\u0441\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u043c\u0438\u0440\u0435) \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u043c\u0435\u0440\u044b (\u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u0430\u043c\u0435\u0440\u044b), \u0430 \u0437\u0430\u0442\u0435\u043c \u0438 \u0432 \u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u0439\u2026<\/p>\n<p> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u2014 \u043e\u0442 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/764526\/\">\u043c\u043e\u0438\u0445 \u043b\u044e\u0431\u0438\u043c\u044b\u0445 \u00ab\u0436\u0438\u0433\u0443\u043b\u0435\u0439\u00bb<\/a>, \u0434\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hp\/n_\/oh\/hpn_ohj1poz7cxxe3vtgapuxri4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hp\/n_\/oh\/hpn_ohj1poz7cxxe3vtgapuxri4.png\"\/><\/div>\n<p> \u041d\u043e \u0435\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0435\u043b\u044b\u043c, \u0431\u0435\u0437 \u043d\u0430\u043c\u0451\u043a\u0430 \u043d\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0434\u0435\u0442\u0430\u043b\u0438. \u0410 \u0434\u043b\u044f \u0435\u0433\u043e \u00ab\u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f\u00bb \u0441\u043b\u0443\u0436\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0434\u043e\u0433\u043d\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 3D-\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438: \u0430\u0441\u0444\u0430\u043b\u044c\u0442 \u043d\u0430 \u0434\u043e\u0440\u043e\u0433\u0435, \u0442\u0440\u0430\u0432\u0430 \u043d\u0430 \u0437\u0435\u043c\u043b\u0435, \u0434\u0432\u0435\u0440\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u044b \u0432 \u0436\u0438\u0433\u0443\u043b\u044f\u0445\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ce\/sr\/oh\/cesrohglpdcd4px03y5rljnbvo0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ce\/sr\/oh\/cesrohglpdcd4px03y5rljnbvo0.png\"\/><\/div>\n<p> \u0418 \u0432\u043e\u0442 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432 D3D6 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 GAPI: \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u041e\u0417\u0423) \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0435\u043c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0432 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c. \u041f\u0440\u0438\u0447\u0451\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e. \u042f \u0432\u044b\u0431\u0440\u0430\u043b RGB565 (16-\u0431\u0438\u0442\u043d\u044b\u0439), \u0445\u043e\u0442\u044f \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0441\u043e \u0441\u0436\u0430\u0442\u0438\u0435\u043c \u2014 \u0442\u043e\u0442-\u0436\u0435 S3TC. <\/p>\n<pre><code class=\"cpp\">                        bool hasMips = mipCount &gt; 1; \/\/ If texture has more than 1 mipmap, then create surface as complex, if not - then as single-level.  DDSURFACEDESC2 desc; memset(&amp;desc, 0, sizeof(desc)); desc.dwSize = sizeof(desc); desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_TEXTURESTAGE | DDSD_CKSRCBLT; desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE | (hasMips ? (DDSCAPS_MIPMAP | DDSCAPS_COMPLEX) : 0); desc.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE; desc.ddckCKSrcBlt.dwColorSpaceHighValue = 0; desc.ddckCKSrcBlt.dwColorSpaceLowValue = 0; memcpy(&amp;desc.ddpfPixelFormat, DXSharp::Helpers::Window::opaqueTextureFormat, sizeof(desc.ddpfPixelFormat)); desc.dwWidth = Width = width; desc.dwHeight = Height = height;  IDirectDrawSurface4* surf; IDirect3DTexture2* tex;  IDirectDraw4* dd2; window-&gt;ddraw-&gt;QueryInterface(IID_IDirectDraw4, (LPVOID*)&amp;dd2);  Guard(dd2-&gt;CreateSurface(&amp;desc, &amp;surf, 0)); Guard(surf-&gt;QueryInterface(IID_IDirect3DTexture2, (LPVOID*)&amp;tex)); <\/code><\/pre>\n<p> \u0410 \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u00ab\u0441\u043a\u0430\u0437\u0430\u0442\u044c\u00bb \u043e\u0431 \u044d\u0442\u043e\u043c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u043e\u043c\u0443 \u044e\u043d\u0438\u0442\u0443. \u0422\u0435, \u0443 \u043a\u043e\u0433\u043e \u0431\u044b\u043b\u0438 \u0432 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f 3dfx Voodoo, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043f\u043e\u0439\u043c\u0443\u0442, \u043e \u0447\u0451\u043c \u044f \ud83d\ude42<\/p>\n<pre><code class=\"cpp\">Guard(device-&gt;SetTexture(stage, tex-&gt;texture)); <\/code><\/pre>\n<p> \u0418 \u0432\u043e\u0442 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439! \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u0434\u043e\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443\u2026<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jm\/yy\/2g\/jmyy2gbwzfdyhicayoqhhd0aeyu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/jm\/yy\/2g\/jmyy2gbwzfdyhicayoqhhd0aeyu.png\"\/><\/div>\n<p> \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0437 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 SMD (GoldSrc, <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/797547\/\">Half-Life<\/a> \u0438\u043b\u0438 CS1.6), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0440\u0443\u0437\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0438 \u0431\u0435\u0437 \u0441\u043a\u0438\u043d\u043d\u0438\u043d\u0433\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438\u0437 bmp \u0438 \u0432\u043e\u0442 \u2014 \u043c\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u043c 3D-\u043c\u043e\u0434\u0435\u043b\u044c\u043a\u0443 \u0441\u0430\u043c\u043e\u043b\u0451\u0442\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439. <\/p>\n<pre><code class=\"cpp\">                for(int i = 0; i &lt; smd.Triangles.Count; i++)                 {                     uint c = new Color(255, 255, 255, 255).GetRGBA();                      for (int j = 0; j &lt; 3; j++)                         vert[i * 3 + j] = new Vertex()                         {                             X = smd.Triangles[i].Verts[j].Position.X,                             Y = smd.Triangles[i].Verts[j].Position.Y,                             Z = smd.Triangles[i].Verts[j].Position.Z,                             U = smd.Triangles[i].Verts[j].UV.X,                             V = smd.Triangles[i].Verts[j].UV.Y,                             NX = smd.Triangles[i].Verts[j].Normal.X,                             NY = smd.Triangles[i].Verts[j].Normal.Y,                             NZ = smd.Triangles[i].Verts[j].Normal.Z,                             Diffuse = c                         };                 }<\/code><\/pre>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fq\/1e\/zm\/fq1ezmy_a4nnspenrhjtistjgyi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fq\/1e\/zm\/fq1ezmy_a4nnspenrhjtistjgyi.png\"\/><\/div>\n<p> \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0438\u0433\u0440\u0430\u0445 \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u0431\u043e, \u043d\u043e \u0432 \u043b\u0435\u0442\u0430\u043b\u043a\u0430\u0445 \u2014 \u0443\u0436 \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0418 \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u043b\u0430\u043a\u043e\u0432, \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0438:<\/p>\n<ul>\n<li> <b>Sky-sphere<\/b>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u0431\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0443 \u0441 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u043d\u0435\u0431\u0430 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0422\u0430\u043a\u0443\u044e \u043f\u043e\u043b\u0443\u0441\u0444\u0435\u0440\u0443 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043a\u0440\u0443\u0442\u044f\u0442 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0432\u043e\u0435\u0439 \u043e\u0441\u0438 \u043f\u043e \u043e\u0441\u0438 Y, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043b\u044b\u0432\u0443\u0449\u0438\u0445 \u043e\u0431\u043b\u0430\u043a\u043e\u0432. \u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043d\u0435\u0431\u043e. \u0418\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043c\u043e\u0433\u0443\u0442 \u043b\u0438\u0448\u044c \u043e\u0431\u043b\u0430\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0444\u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.\n<p> \u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Sky-sphere. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0443\u043b\u0435\u0442\u0430\u043b\u0438 \u0432 \u0438\u0433\u0440\u0430\u0445 \u00ab\u0437\u0430 \u043a\u0430\u0440\u0442\u0443\u00bb, \u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \ud83d\ude42<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/z_\/ml\/br\/z_mlbr4pno0qp-p_k0lfzfubqt4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/z_\/ml\/br\/z_mlbr4pno0qp-p_k0lfzfubqt4.png\"\/><\/div>\n<p> <\/li>\n<li> <b>Skybox<\/b> \u2014 \u0437\u0434\u0435\u0441\u044c \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u0430\u043c\u0435\u0440\u044b \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u00ab\u043a\u043e\u0440\u043e\u0431\u043a\u0430\u00bb \u0441 \u0432\u044b\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u043c\u0438 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d \u043f\u0430\u043d\u043e\u0440\u0430\u043c\u044b \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 Z-\u0431\u0443\u0444\u0435\u0440. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e, \u043d\u043e \u0435\u0449\u0451 \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 Skysphere \u043d\u0430 \u0441\u043b\u0430\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043f\u0440\u0430\u0432\u0434\u0430 \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c. \u0421\u043a\u0430\u0439\u0431\u043e\u043a\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 Counter-Strike, Half-Life.\n<p> \u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043d\u0438\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441\u0430:<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/iq\/wc\/nw\/iqwcnwawyxfdc9-osmdeo212lze.png\" data-src=\"https:\/\/habrastorage.org\/webt\/iq\/wc\/nw\/iqwcnwawyxfdc9-osmdeo212lze.png\"\/><\/li>\n<\/ul>\n<p> \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441\u044b. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u043f\u0440\u043e\u0449\u0435 \u043f\u0430\u0440\u0435\u043d\u043e\u0439 \u0440\u0435\u043f\u044b:<\/p>\n<pre><code class=\"cs\">             materials[0].Texture = TextureLoader.LoadFromImage(string.Format(\"{0}{1}_bk.bmp\", Path, name));             materials[1].Texture = TextureLoader.LoadFromImage(string.Format(\"{0}{1}_ft.bmp\", Path, name));             materials[2].Texture = TextureLoader.LoadFromImage(string.Format(\"{0}{1}_lf.bmp\", Path, name));             materials[3].Texture = TextureLoader.LoadFromImage(string.Format(\"{0}{1}_rt.bmp\", Path, name));             materials[4].Texture = TextureLoader.LoadFromImage(string.Format(\"{0}{1}_up.bmp\", Path, name));             materials[5].Texture = TextureLoader.LoadFromImage(string.Format(\"{0}{1}_dn.bmp\", Path, name));              ....               Engine.Current.Graphics.DrawMesh(mesh, 0, 6, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[1]); \/\/ Forward             Engine.Current.Graphics.DrawMesh(mesh, 6, 12, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[3]); \/\/ Right             Engine.Current.Graphics.DrawMesh(mesh, 12, 18, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[0]); \/\/ Back             Engine.Current.Graphics.DrawMesh(mesh, 18, 24, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[2]); \/\/ Left             Engine.Current.Graphics.DrawMesh(mesh, 24, 30, v, new Vector3(0, 0, 0), new Vector3(1, 1, 1), materials[4]); \/\/ Left <\/code><\/pre>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pb\/or\/ok\/pborokmuomw_yqklb7heewegvru.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pb\/or\/ok\/pborokmuomw_yqklb7heewegvru.png\"\/><\/div>\n<p> \u041d\u043e \u043b\u0435\u0442\u0430\u0442\u044c \u0432 \u043f\u0443\u0441\u0442\u043e\u043c \u043c\u0438\u0440\u0435 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b>Terrain<\/b>. \u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f Terrain \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u0430 \u0432\u044b\u0441\u043e\u0442, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u0442\u0443 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/6b\/vh\/px\/6bvhpxowwkwryzxebi6quawbtfs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/6b\/vh\/px\/6bvhpxowwkwryzxebi6quawbtfs.png\"\/><\/div>\n<p> \u041c\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0438 \u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0435\u0442\u043a\u0443 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0433\u0434\u0435 \u0432\u044b\u0441\u043e\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u0432\u044b\u0441\u043e\u0442. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">                for (int i = 1; i &lt; bmp.Width - 1; i++)                 {                     for(int j = 1; j &lt; bmp.Height - 1; j++)                     {                         float baseX = (float)i * XZScale;                         float baseZ = (float)j * XZScale;                          \/\/ Transform vertices                         verts[vertOffset] = new DXSharp.D3D.Vertex()                         {                             X = baseX,                             Y = ((float)bmp.GetPixel(i, j).R \/ 255.0f) * YScale,                             Z = baseZ,                             U = 0,                             V = 1 * TextureScale,                             NY = 1                         };                         verts[vertOffset + 2] = new DXSharp.D3D.Vertex()                         {                             X = baseX,                             Y = ((float)bmp.GetPixel(i, j + 1).R \/ 255.0f) * YScale,                             Z = baseZ + XZScale,                             U = 0,                             V = 0,                             NY = 1                         };                         verts[vertOffset + 1] = new DXSharp.D3D.Vertex()                         {                             X = baseX + XZScale,                             Y = ((float)bmp.GetPixel(i + 1, j + 1).R \/ 255.0f) * YScale,                             Z = baseZ + XZScale,                             U = 1 * TextureScale,                             V = 0,                             NY = 1                         };                         verts[vertOffset + 3] = new DXSharp.D3D.Vertex()                         {                             X = baseX,                             Y = ((float)bmp.GetPixel(i, j).R \/ 255.0f) * YScale,                             Z = baseZ,                             U = 0,                             V = 1 * TextureScale,                             NY = 1                         };                         verts[vertOffset + 4] = new DXSharp.D3D.Vertex()                         {                             X = baseX + XZScale,                             Y = ((float)bmp.GetPixel(i + 1, j).R \/ 255.0f) * YScale,                             Z = baseZ,                             U = 1 * TextureScale,                             V = 1 * TextureScale,                             NY = 1                         };                         verts[vertOffset + 5] = new DXSharp.D3D.Vertex()                         {                             X = baseX + XZScale,                             Y = ((float)bmp.GetPixel(i + 1, j + 1).R \/ 255.0f) * YScale,                             Z = baseZ + XZScale,                             U = 1 * TextureScale,                             V = 0,                             NY = 1                         };                          vertOffset += 6;                     }                 } <\/code><\/pre>\n<p> \u0410 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0442\u0430\u043a\u043e\u0439! \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u0435\u0439\u0441 \u0441 Terrain&#8217;\u043e\u043c: \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445, \u0433\u0434\u0435 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0435\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044c\u044e\u0442 \u043d\u0430 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <b>\u043f\u0430\u0442\u0447\u0438<\/b> \u0438 \u0434\u0430\u043b\u044c\u043d\u0438\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/The_Elder_Scrolls_V:_Skyrim\">TES Skyrim<\/a>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/w2\/vd\/xr\/w2vdxrfrii4ghqen9ivbnb0clni.png\" data-src=\"https:\/\/habrastorage.org\/webt\/w2\/vd\/xr\/w2vdxrfrii4ghqen9ivbnb0clni.png\"\/><\/div>\n<p> \u041d\u043e \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043a\u0443\u0447\u043d\u043e \u2014 \u043d\u0438 \u0442\u0440\u0430\u0432\u044b, \u043d\u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432, \u043d\u0438 \u0434\u0430\u0436\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440! \u041e\u0434\u043d\u0430 \u0442\u0440\u0430\u0432\u0430 \u2014 \u0434\u0430 \u0447\u0442\u043e \u0436 \u044d\u0442\u043e \u0437\u0430 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0440 \u0442\u0430\u043a\u043e\u0439 \ud83d\ude42 \u0418 \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0442. \u043d. \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0435\u0440\u044b \u2014 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043d\u043e\u0441\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b \u0432 \u0446\u0432\u0435\u0442\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a (\u0433\u0434\u0435 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u2014 \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430):<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/j-\/ps\/sy\/j-pssyflnynrs7jpuqp5piqu62s.png\" data-src=\"https:\/\/habrastorage.org\/webt\/j-\/ps\/sy\/j-pssyflnynrs7jpuqp5piqu62s.png\"\/><\/div>\n<p> \u042d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0434\u0432\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434, \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u043b\u0430\u0442-\u043c\u0430\u043f\u043f\u0438\u043d\u0433, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 4\u0445-\u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434!<\/p>\n<pre><code class=\"cs\">                 Context.SetTextureStageState(1, (int)TextureStageState.AlphaOp, (int)TextureStageOp.Modulate);                 Context.SetTextureStageState(1, (int)TextureStageState.AlphaArg1, (int)TextureArgument.Texture);                 Context.SetTextureStageState(1, (int)TextureStageState.AlphaArg2, (int)TextureArgument.Texture);                  Context.SetTextureStageState(0, (int)TextureStageState.ColorOp, (int)TextureStageOp.SelectArg1);                 Context.SetTextureStageState(0, (int)TextureStageState.ColorArg1, (int)TextureArgument.Texture);                 Context.SetTextureStageState(0, (int)TextureStageState.ColorArg2, (int)TextureArgument.Texture);                  Context.SetTextureStageState(1, (int)TextureStageState.ColorOp, (int)TextureStageOp.BlendDiffuseAlpha);                 Context.SetTextureStageState(1, (int)TextureStageState.ColorArg1, (int)TextureArgument.Texture);                 Context.SetTextureStageState(1, (int)TextureStageState.ColorArg2, (int)TextureArgument.Current); <\/code><\/pre>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/d8\/0l\/qh\/d80lqhkcb0-eu4oxbe20hgwq_0w.png\" data-src=\"https:\/\/habrastorage.org\/webt\/d8\/0l\/qh\/d80lqhkcb0-eu4oxbe20hgwq_0w.png\"\/><\/div>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/oq\/n2\/qk\/oqn2qkbhricpoz9ddxzvspergzs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/oq\/n2\/qk\/oqn2qkbhricpoz9ddxzvspergzs.png\"\/><\/div>\n<p> \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432\u0434\u0430\u043b\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0440\u0443\u0431\u043e \u0438 \u043e\u0442\u0434\u0430\u044e\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438. \u0420\u0435\u0442\u0440\u043e-\u0441\u0442\u0430\u0439\u043b \u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0432\u044b? \u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u043d\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438 \u043c\u0438\u043f\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b! \u041c\u0438\u043f-\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f mip-\u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0438 \u0432 <b>\u0434\u0432\u0430 \u0440\u0430\u0437\u0430<\/b> \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e: \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b 256&#215;256 9 \u0443\u0440\u043e\u0432\u043d\u0435\u0439: 256&#215;256, 128&#215;128, 64&#215;64 \u0438 \u0442\u0430\u043a \u0434\u043e 1&#215;1. \u041c\u043e\u0439 \u0441\u0430\u043c\u043e\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u00ab\u0437\u0430\u043f\u0435\u043a\u0430\u0435\u0442\u00bb \u0432\u0441\u0435 \u043c\u0438\u043f-\u0443\u0440\u043e\u0432\u043d\u0438, \u0434\u0430\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 HDD, \u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0441 \u043c\u0438\u043f\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432\u0434\u0430\u043b\u0438, \u0434\u0430\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u0440\u0435\u0437\u0430\u043b\u0438 \u0433\u043b\u0430\u0437\u0430:<\/p>\n<pre><code class=\"cs\">                        device-&gt;SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTFP_LINEAR); device-&gt;SetTextureStageState(0, D3DTSS_MINFILTER, D3DFILTER_LINEAR); device-&gt;SetTextureStageState(0, D3DTSS_MAGFILTER, D3DFILTER_LINEAR);  device-&gt;SetTextureStageState(1, D3DTSS_MIPFILTER, D3DTFP_LINEAR); device-&gt;SetTextureStageState(1, D3DTSS_MINFILTER, D3DFILTER_LINEAR); device-&gt;SetTextureStageState(1, D3DTSS_MAGFILTER, D3DFILTER_LINEAR); <\/code><\/pre>\n<p> \u041d\u0443 \u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u043f\u043e\u0441\u0430\u0434\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043d\u0430 \u043d\u0430\u0448 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0438 \u043a\u0443\u0441\u0442\u043e\u0432 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430:<\/p>\n<pre><code class=\"cs\">                  if (rand.Next(0, 32) % 8 == 0)                             foliageBatches.Add(new FoliagePlacement()                             {                                 Mesh = foliage[rand.Next(0, foliage.Length)],                                 Position = new Vector3(baseX, ((float)bmp.GetPixel(i, j).R \/ 255.0f) * YScale, baseZ)                             }); <\/code><\/pre>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hd\/0y\/os\/hd0yoskla0rwf59f0y5sdm7rga4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/hd\/0y\/os\/hd0yoskla0rwf59f0y5sdm7rga4.png\"\/><\/div>\n<p> \u0423\u043f\u0441, \u043d\u0430\u0448\u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u2014 \u0447\u0435\u0440\u043d\u044b\u0435! \u0410 \u0432\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443 \u043d\u0438\u0445 \u043d\u0435\u0442 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043e\u0442 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0445. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u044c\u0444\u0430-\u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433 (\u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c) \u0437\u0434\u0435\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0443, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u043a\u043e\u043b\u043e\u0440\u043a\u0435\u044f\u043c\u0438 (Color key). \u0422\u0435\u0445\u043d\u0438\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0445\u043e\u0436\u0430\u044f \u0441 Chromakey, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b\u0440\u0435\u0437\u0430\u044e\u0442 \u0444\u043e\u043d \u0438\u0437 \u0432\u0438\u0434\u0435\u043e, \u043d\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u043f\u0440\u043e\u0449\u0435 (\u0442\u0435\u043c, \u0447\u0442\u043e \u0446\u0432\u0435\u0442 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0431\u0435\u0437 Threshold). \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u041d\u0435\u0440\u0435\u0434\u043a\u043e \u044d\u0442\u043e Magenta, \u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0447\u0451\u0440\u043d\u044b\u0439:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ch\/qj\/db\/chqjdb3yrhfbz1ojw9qik8nqdfi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ch\/qj\/db\/chqjdb3yrhfbz1ojw9qik8nqdfi.png\"\/><\/div>\n<p> \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043b\u043e\u0440\u043a\u0435\u0439 \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c\u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c\u0438 \u043d\u0430 \u0444\u043e\u043d\u0435 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q_\/qi\/hz\/q_qihzq-_nhcdzbtk7clwzczw1k.png\" data-src=\"https:\/\/habrastorage.org\/webt\/q_\/qi\/hz\/q_qihzq-_nhcdzbtk7clwzczw1k.png\"\/><\/div>\n<p> \u041e\u0439-\u043e\u0439, \u0430 FPS \u0442\u043e \u0443\u0441\u043f\u0435\u043b \u043f\u0440\u043e\u0441\u0435\u0441\u0442\u044c \u0441 1.000 \u0434\u043e 50 \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 DIP&#8217;\u043e\u0432 (\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 GPU \u0441 \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0433\u0430\u043f\u0438). \u0412\u0440\u0435\u043c\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439! \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e Frustum culling&#8217;\u0430, \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u00ab\u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\u00bb. \u0421\u0443\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0438\u0437 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432\u0438\u0434\u0430 \u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f 6 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0435\u0439, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442: \u043b\u0435\u0432\u0430\u044f, \u043f\u0440\u0430\u0432\u0430\u044f, \u0432\u0435\u0440\u0445\u043d\u044f\u044f, \u043d\u0438\u0436\u043d\u044f\u044f, \u0431\u043b\u0438\u0436\u043d\u044f\u044f \u0438 \u0434\u0430\u043b\u044c\u043d\u044f\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u0435\u043b\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0432 World-space \u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0435\u0439, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0441\u0435\u0447\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0443\u044e \u0433\u043b\u0430\u0437\u0430\u043c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0438 \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b GPU \u0438 CPU \u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438:<\/p>\n<pre><code class=\"cs\">        public void Calculate(Matrix viewProj)         {             float[] items = viewProj.Items;             Planes[0] = new Vector4(items[3] - items[0], items[7] - items[4], items[11] - items[8], items[15] - items[12]);             Planes[0].Normalize();             Planes[1] = new Vector4(items[3] + items[0], items[7] + items[4], items[11] + items[8], items[15] + items[12]);             Planes[1].Normalize();             Planes[2] = new Vector4(items[3] + items[1], items[7] + items[5], items[11] + items[9], items[15] + items[13]);             Planes[2].Normalize();             Planes[3] = new Vector4(items[3] - items[1], items[7] - items[5], items[11] - items[9], items[15] - items[13]);             Planes[3].Normalize();              Planes[4] = new Vector4(items[3] - items[2], items[7] - items[6], items[11] - items[10], items[15] - items[14]);             Planes[4].Normalize();             Planes[5] = new Vector4(items[3] + items[2], items[7] + items[6], items[11] + items[10], items[15] + items[14]);             Planes[5].Normalize();         }                  \/\/ Allocation-less         public bool IsPointInFrustum(float x, float y, float z)         {             foreach(Vector4 v in Planes)             {                 if (v.X * x + v.Y * y + v.Z * z + v.W &lt;= 0)                     return false;             }              return true;         }          public bool IsSphereInFrustum(float x, float y, float z, float radius)         {             foreach (Vector4 v in Planes)             {                 if (v.X * x + v.Y * y + v.Z * z + v.W &lt;= -radius)                     return false;             }              return true;         } <\/code><\/pre>\n<p> \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0441\u0444\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 6 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0435\u0439 \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043d\u0435 \u0440\u0438\u0441\u0443\u0435\u043c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0432\u043e\u043e\u0431\u0449\u0435:<\/p>\n<pre><code class=\"cs\">              if (mesh.Radius &gt; 0 &amp;&amp; !Camera.IsSphereVisible(position, mesh.Radius))                     return; <\/code><\/pre>\n<p> \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u044b\u043b\u0435\u0442 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435: Asus EEE PC 701 4G.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/cjnGGZX.png\" alt=\"image\" data-src=\"https:\/\/i.imgur.com\/cjnGGZX.png\"\/><\/div>\n<p> \u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 17-20 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u043c GPU \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u2026 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0447\u0442\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c!<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0432\u0443\u043a<\/font><\/h2>\n<p> \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0432\u0443\u043a \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0443\u0448\u0430\u0442\u044c \ud83d\ude42 \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 DirectX \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<p> \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0437\u0432\u0443\u043a \u0432 \u0438\u0433\u0440\u0430\u0445 \u0431\u044b\u043b \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044b\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 3D-\u044d\u0444\u0444\u0435\u043a\u0442\u044b. \u041d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0442\u0438\u043f\u0430 HRTF \u0431\u044b\u043b\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u043e, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442\u0430\u0445 \u0431\u044b\u043b \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u043a\u0441\u0435\u0440 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432. \u0410\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u0442\u043e \u0432\u0441\u0451 DirectSound, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0435\u0439 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043c\u0438\u043a\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0435\u0441\u043b\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u0443\u0434\u0438\u043e-\u043a\u0430\u0440\u0442\u0430\u0445 \u0443\u0436\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u043e\u043c\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 DSP \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430, \u043a\u0443\u0434\u0430 \u0430\u0443\u0434\u0438\u043e-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 PCM-\u043f\u043e\u0442\u043e\u043a!<\/p>\n<p> \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 DSound \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f primary-\u0431\u0443\u0444\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u043c\u0438\u043a\u0448\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0437\u0432\u0443\u043a\u0430 \u043d\u0430 \u0430\u0443\u0434\u0438\u043e-\u043a\u0430\u0440\u0442\u0443. \u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e:<\/p>\n<pre><code class=\"cs\">            BufferDescription desc = new BufferDescription();             desc.Flags = BufferFlags.PrimaryBuffer | BufferFlags.Control3D;                          primaryBuffer = Context.CreateSoundBuffer(desc); <\/code><\/pre>\n<p> \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u0431\u0435\u0437 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u0430 \u0437\u0432\u0443\u043a\u0430) \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438\u0448\u044c \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c PCM-\u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0430\u0443\u0434\u0438\u043e-\u043a\u0430\u0440\u0442\u0443 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0433\u0440\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cs\">        public WaveBuffer(WaveFormat fmt, byte[] pcmData)         {             BufferDescription desc = new BufferDescription();             desc.BufferBytes = (uint)pcmData.Length;             desc.Flags = BufferFlags.ControlDefault |BufferFlags.Software;             desc.Format = fmt;              buffer = Engine.Current.Sound.Context.CreateSoundBuffer(desc);             IntPtr data = buffer.Lock();             Marshal.Copy(pcmData, 0, data, pcmData.Length);             buffer.Unlock();              buffer.Play();         } <\/code><\/pre>\n<p> \u0418 \u0432\u0441\u0451! \u0414\u0430, \u0432\u043e\u0442 \u0442\u0430\u043a \u043b\u0435\u0433\u043a\u043e. BufferFlags.Software \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 Hardware, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0412\u0432\u043e\u0434<\/font><\/h2>\n<p> \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \ud83d\ude42 \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043b\u0438\u0448\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u2014 \u0438 \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434\u2026<\/p>\n<pre><code class=\"cs\">        [DllImport(\"user32.dll\")]         static extern short GetAsyncKeyState(Keys vKey);          public static bool GetKeyState(Keys key)         {             return (GetAsyncKeyState(key) &amp; 0x8000) != 0;         } <\/code><\/pre>\n<p> \u041d\u0443 \u0447\u0442\u043e \u0436, \u043e\u0441\u043d\u043e\u0432\u0430 \u0433\u043e\u0442\u043e\u0432\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u044f!<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041f\u0438\u043b\u0438\u043c \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439<\/font><\/h2>\n<p> \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u043b\u0451\u0442\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0430\u043c\u043e\u043b\u0451\u0442\u0438\u043a\u0430. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043a\u0435\u0439\u0441\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0434\u043b\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0433\u043b\u044b \u042d\u0439\u043b\u0435\u0440\u0430 (\u043b\u0435\u043d\u044c \u0431\u044b\u043b\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043a\u0432\u0430\u0442\u0435\u0440\u043d\u0438\u043e\u043d\u0430), \u0441\u0447\u0438\u0442\u0430\u0435\u043c Forward-\u0432\u0435\u043a\u0442\u043e\u0440 (\u0432\u0435\u043a\u0442\u043e\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e) \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0440\u0443\u0442\u0438\u043c \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b \u043f\u043e \u043e\u0441\u0438 X \u0438 Y \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a\u0430 Forward \u0432\u0435\u043a\u0442\u043e\u0440, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0451\u0442\u0430. \u041f\u0440\u0430\u0432\u0434\u0430, \u0441 \u0442\u0430\u043a\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0442\u043b\u044e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Forward-\u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043e\u0441\u0438 X.<\/p>\n<pre><code class=\"cs\">            Rotation.X += -v * (YawSpeed * Engine.Current.DeltaTime);             Rotation.Y += h * (YawSpeed * Engine.Current.DeltaTime);              Rotation.Z = MathUtils.Lerp(Rotation.Z, 35 * -h, 4.0f * Engine.Current.DeltaTime);              Vector3 fw = GetForward();             Position.X += fw.X * (Speed * Engine.Current.DeltaTime);             Position.Y += fw.Y * (Speed * Engine.Current.DeltaTime);             Position.Z += fw.Z * (Speed * Engine.Current.DeltaTime); <\/code><\/pre>\n<p> \u041c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043c\u0435\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0438\u043b\u0430 \u0437\u0430 \u043d\u0430\u0448\u0438\u043c \u0441\u0430\u043c\u043e\u043b\u0451\u0442\u0438\u043a\u043e\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c Forward-\u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u043d\u0430 \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043a\u0430\u043c\u0435\u0440\u044b. \u042d\u0434\u0430\u043a\u0430\u044f \u0431\u043e\u043c\u0436-\u0432\u0435\u0440\u0441\u0438\u044f lookat, \u043f\u0440\u0430\u0432\u0434\u0430 \u0441 \u043a\u0443\u0447\u0435\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441 Gimbal lock (\u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u0435\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430), \u0430 \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043c\u0435\u0440\u0430 \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u043b\u0430\u0432\u043d\u043e\u0439 \u0438 \u043f\u0440\u0438\u0434\u0430\u0432\u0430\u043b\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u0433\u0440\u0435 \u2014 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c EaseIn\/EaseOut \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0443\u0442\u0451\u043c <s>\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e<\/s> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u044b \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \ud83d\ude42<\/p>\n<pre><code class=\"cs\">            Vector3 forward = GetForward();             \/\/ Adjust camera             Engine.Current.Graphics.Camera.Position = new Vector3(Position.X + (forward.X * -12.0f),                 Position.Y + (forward.Y * -12.0f) + 4.0f, Position.Z + (forward.Z * -12.0f));             Engine.Current.Graphics.Camera.Rotation.Y = MathUtils.Lerp(Engine.Current.Graphics.Camera.Rotation.Y, Rotation.Y + (yaw * 30), 3.0f * Engine.Current.DeltaTime);             Engine.Current.Graphics.Camera.Rotation.X = MathUtils.Lerp(Engine.Current.Graphics.Camera.Rotation.X, Rotation.X + (pitch * 5), 3.0f * Engine.Current.DeltaTime);             Engine.Current.Graphics.Camera.MarkUpdated(); <\/code><\/pre>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/r6\/1e\/kz\/r61ekzfxmmll_xmkb1ygs7htk68.png\" data-src=\"https:\/\/habrastorage.org\/webt\/r6\/1e\/kz\/r61ekzfxmmll_xmkb1ygs7htk68.png\"\/><\/div>\n<p> \u041d\u0443, \u043b\u0435\u0442\u0430\u0442\u044c \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c\u2026 \u0434\u0430, \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e \u0430\u0440\u043a\u0430\u0434\u043d\u043e\u043c\u0443, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \ud83d\ude42 \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0445-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u0438\u0435 \u0441\u0430\u043c\u043e\u043b\u0451\u0442\u044b! \u0412\u043e\u043e\u0431\u0449\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0418\u0418 \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430\u0445, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430\u0445 \u2014 \u0437\u0430\u0434\u0430\u0447\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043b\u0438\u0431\u043e \u0447\u0438\u0442\u0435\u0440\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0435 \u0442\u0435 \u0440\u044b\u0447\u0430\u0433\u0438, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0433\u0440\u043e\u043a, \u043b\u0438\u0431\u043e \u0442\u0443\u043f\u0438\u0442\u044c \u0438 \u0438\u0433\u0440\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u0412\u043e\u043d, \u0447\u0442\u043e \u00ab\u0412\u0430\u0440\u0433\u0435\u0439\u043c\u0438\u043d\u0433\u00bb, \u0447\u0442\u043e \u00ab\u0413\u0430\u0439\u0434\u0437\u0438\u043d\u044b\u00bb \u043a\u0440\u0443\u0442\u044b\u0435 \u0432 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u2014 \u044f \u0431 \u043d\u0438\u0430\u0441\u0438\u043b\u0438\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0430\u0440\u043a\u0430\u0434\u044b :))<\/p>\n<p> \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0443\u0433\u043e\u043b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a\u0430 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0438\u0433\u0440\u043e\u043a\u0430 \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0433\u043e\u043b \u043f\u043e \u043e\u0441\u0438 Y: \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043b\u0430\u0432\u043d\u043e, \u043f\u0440\u0430\u0432\u0434\u0430 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0435\u0449\u0451 \u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u00ab\u043f\u043b\u0430\u0432\u0430\u043d\u044c\u044f\u00bb \u0432\u043e\u043a\u0440\u0443\u0433 \u0438\u0433\u0440\u043e\u043a\u0430 \u043f\u043e \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0435. \u0414\u043b\u044f \u043f\u043e\u0434\u044a\u0451\u043c\u0430 \u0438 \u0441\u043f\u0443\u0441\u043a\u0430 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0451\u043c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432\u044b\u0448\u0435\/\u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"cs\">            float angle = (float)Math.Atan2(Game.Current.Player.Position.X - Position.X, Game.Current.Player.Position.Z - Position.Z);             float vert = MathUtils.Clamp(Position.Y - Game.Current.Player.Position.Y, -1, 1);             Rotation.X = MathUtils.Lerp(Rotation.X, vert * 35, 1.5f * Engine.Current.DeltaTime);              float prevY = Rotation.Y;             Rotation.Y = MathUtils.Lerp(Rotation.Y, angle * MathUtils.RadToDeg, 1.5f * Engine.Current.DeltaTime);             float diffY = Rotation.Y - prevY &gt; 0 ? 1 : -1;             Rotation.Z = MathUtils.Lerp(Rotation.Z, 15 * -diffY, 4.0f * Engine.Current.DeltaTime);<\/code><\/pre>\n<p> \u041d\u0430\u0448\u0438 \u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0442\u0435\u0440\u0438\u0442\u044c, \u043f\u0440\u0438\u0447\u0451\u043c \u0436\u0451\u0441\u0442\u043a\u043e. \u041e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043c\u0430\u043d\u0435\u0432\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043d\u0435\u0436\u0435\u043b\u0438 \u0438\u0433\u0440\u043e\u043a, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438\u0433\u0440\u043e\u043a\u0430, \u0434\u0430\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0445 \u043e\u0431\u043e\u0433\u043d\u0430\u0442\u044c \u0438 \u0441\u0442\u0440\u044f\u0445\u043d\u0443\u0442\u044c \u0441 \u0445\u0432\u043e\u0441\u0442\u0430. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/js\/hw\/rd\/jshwrd1rswswu4xpo5ply92rc6q.png\" data-src=\"https:\/\/habrastorage.org\/webt\/js\/hw\/rd\/jshwrd1rswswu4xpo5ply92rc6q.png\"\/><\/div>\n<p> \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0433\u043e\u043d\u043e\u0447\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u043d\u0443\u043b\u0435\u0432\u044b\u0445, \u0433\u0434\u0435 \u0432 \u0442\u043e\u043c \u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/744778\/\">NFS Underground<\/a> \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0438 \u0438 \u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b \u043b\u0438\u0445\u043e \u0437\u0430\u0445\u043e\u0434\u0438\u043b\u0438, \u0438 \u0440\u0430\u0437\u0433\u043e\u043d\u044f\u043b\u0438\u0441\u044c \u0434\u043e 300\u041a\u043c\/\u0447 \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u0445 \u0434\u043e\u0433\u043d\u0430\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<p> \u041f\u043e\u0440\u0430 \u0442\u0435\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u043c\u043a\u0443 \u2014 \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430 Win98, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0440\u0430\u043f\u043f\u0435\u0440 \u0432 VS2005. VS2017 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 2005&#8217;\u043e\u0439 \u0441\u0442\u0443\u0434\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0431\u043b\u0430\u0433\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u0448\u0435\u043a C++ \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/j_\/6d\/ge\/j_6dge13w1jy7dzhzjsk0qei4pw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/j_\/6d\/ge\/j_6dge13w1jy7dzhzjsk0qei4pw.png\"\/><\/div>\n<p> \u041d\u0443 \u0447\u0442\u043e \u0436, \u0434\u0435\u043c\u043a\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e 3dfx Voodoo: \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0446\u0435\u043b\u044b\u0445 \u0434\u0432\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0435\u043d\u0434\u0430 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b \u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043c\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441 \u0434\u0438\u043a\u043e\u0432\u0438\u043d\u043d\u044b\u043c \u0436\u0435\u043b\u0435\u0437\u043e\u043c \u0438\u0437 90-\u0445 \u0438 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0433\u043e\u0434\u043e\u0432. \u041d\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0441\u0442\u0435\u043d\u0434\u0430 \u0442\u044f\u043d\u0435\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0441\u0440\u0430\u0437\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u2014 \u0442\u044b\u043a \u0441\u044e\u0434\u0430.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434<\/font><\/h2>\n<p> \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a\u0438\u0442, \u043f\u043e\u0434\u0430\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u043c \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u043c. \u0412 \u043d\u0435\u0433\u043e \u0432\u0445\u043e\u0434\u0438\u043b\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u043a\u0430 Chaintech 6vta2 \u0441 Slot-1 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u043a\u0435\u0442\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/qv\/yq\/2-\/qvyq2-4xi6z0nb8tuu8aztb36de.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/qv\/yq\/2-\/qvyq2-4xi6z0nb8tuu8aztb36de.jpeg\" data-blurred=\"true\"\/><\/div>\n<p> \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 Pentium 3 550MHz \u0441 \u0440\u043e\u0434\u043d\u044b\u043c, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u044b\u043b\u044c\u043d\u044b\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435\u043c:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/y9\/46\/e2\/y946e2hzofqlqn3fps0dcr0b3ty.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/y9\/46\/e2\/y946e2hzofqlqn3fps0dcr0b3ty.jpeg\" data-blurred=\"true\"\/><\/div>\n<p> <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/bk\/9x\/ki\/bk9xkil3u90hv2eqfl_d2ootxda.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/bk\/9x\/ki\/bk9xkil3u90hv2eqfl_d2ootxda.jpeg\" data-blurred=\"true\"\/><\/div>\n<p> \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u0434\u0432\u0435 \u043f\u043b\u0430\u0448\u043a\u0438 PC133 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0438\u043f\u0430 SDRAM:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/kc\/fj\/a7\/kcfja78kr5g7yulie39hogyet8i.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/kc\/fj\/a7\/kcfja78kr5g7yulie39hogyet8i.jpeg\" data-blurred=\"true\"\/><\/div>\n<p> \u0418 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439 GeForce 4 MX 420 \u0441 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043e\u0442 Asus. \u041e\u043f\u044b\u0442\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u043f\u0440\u043e\u0441\u0438\u0442 \u043c\u043e\u043b \u00ab\u0442\u0430\u043a MX420 \u2014 \u0432\u0438\u0434\u044f\u0448\u043a\u0430 2002 \u0433\u043e\u0434\u0430, \u0447\u0442\u043e-\u0442\u043e \u0442\u0443\u0442 \u043d\u0435 \u0442\u0430\u043a!\u00bb, \u043d\u043e Riva TNT \u0438\u043b\u0438 ATI Rage \u0443 \u043c\u0435\u043d\u044f \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0435 \u0431\u044b\u043b\u043e, \u0430 MX420 \u2014 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 GeForce 2!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/6a\/an\/to\/6aantorza82v3tb4_5jl_w54rc0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/6a\/an\/to\/6aantorza82v3tb4_5jl_w54rc0.jpeg\" data-blurred=\"true\"\/><\/div>\n<p> \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u0441\u0442\u0435\u043d\u0434 \u043d\u0435 \u0437\u0430\u0432\u0435\u043b\u0441\u044f: \u044f \u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440\u044b \u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043b \u0447\u0442\u043e \u043f\u043e \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u041e\u0417\u0423, \u043e\u0431\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0434\u0443\u0442\u044b\u0435. \u041f\u043e\u043c\u0435\u043d\u044f\u043b \u043a\u043e\u043d\u0434\u0435\u0440\u044b \u043d\u0430 \u043f\u0440\u043e\u0446 \u2014 \u0438 \u043f\u043b\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u043b\u0430\u0441\u044c, \u043f\u0440\u0430\u0432\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e: Win98 \u0441\u044b\u043f\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u0440\u0438 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u0431\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u0435, \u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 NT \u0438 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/0w\/xm\/vg\/0wxmvg9g8_rolnkvkj9s8penmie.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/0w\/xm\/vg\/0wxmvg9g8_rolnkvkj9s8penmie.jpeg\" data-blurred=\"true\"\/><\/div>\n<p> \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e 3dfx Voodoo \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439 \u0434\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430, \u044f \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u043b \u0432\u0441\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u0438\u043a\u0430\u043c \u0432 \u0441\u0432\u043e\u0435\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u043e\u043a \u0441 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u043f\u0435\u043d\u044c\u043a\u043e\u043c \u0438 AGP-\u0441\u043b\u043e\u0442\u043e\u043c \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0418 \u0442\u0430\u043a\u0430\u044f \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043e\u0434\u043d\u043e\u0433\u043e: \u0432 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438 \u0437\u0430 300 \u0440\u0443\u0431\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0440\u0435\u0448\u0438\u043b\u0441\u044f \u0432\u0437\u044f\u0442\u044c. \u041e\u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u0430, \u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437: \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u0435\u043d\u044b \u0432\u0441\u0451 \u0442\u0435\u0445 \u0436\u0435 \u043a\u043e\u043d\u0434\u0435\u043d\u0441\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043e\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438 \u0434\u0430\u043b\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/687688\/\">Win98<\/a>, \u0442\u0430\u043a \u0438 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/678914\/\">Windows NT<\/a>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441 \u2014 Pentium 3 550Mhz \u0432 \u0441\u043b\u043e\u0442\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 Celeron 600Mhz \u0432 PGA370 \u0438 \u0442\u0430\u043a \u0434\u0430\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u0441\u0435\u043b\u0435\u0440\u043e\u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 L2 \u043a\u044d\u0448\u0430 \u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c \u0441\u0435\u0431\u044f \u0435\u0449\u0451 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 P III!<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/1r\/os\/j_\/1rosj_armrk8facguhwwo9jlfky.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/1r\/os\/j_\/1rosj_armrk8facguhwwo9jlfky.jpeg\" data-blurred=\"true\"\/><\/p>\n<p> \u041d\u0430 Win98 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043a\u0430\u0442\u0438\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043d\u0430 MSDC (Mass Storage Device Class \u2014 \u00ab\u0444\u043b\u044d\u0448\u043a\u0438\u00bb), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u00ab\u0441\u0447\u0438\u0442\u0435\u0440\u0438\u043b\u00bb \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b WinXP. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u0442\u0430\u0432\u0438\u0442\u044c Win2000 \u2014 \u043d\u043e \u0442\u0430\u043c .NET 2.0 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043a\u043e\u0441\u044f\u043a\u0430\u043c\u0438 (\u043f\u0440\u0438 \u0442\u043e\u043c \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 .NET \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Win98!).<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0422\u0435\u0441\u0442\u044b<\/font><\/h2>\n<p> \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0434\u0435\u043c\u043a\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0442\u0440\u0443\u0448\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435. \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0441\u0442\u044c \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/668ef4b12331bb9d71028c69\" data-style=\"\" id=\"668ef4b12331bb9d71028c69\" width=\"\"><\/div>\n<\/div>\n<p> \u0414\u0435\u043c\u043a\u0430 \u0438\u0434\u0451\u0442 \u0432 20-25-30 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 DrawCall&#8217;\u043e\u0432 \u043d\u0430 \u0441\u0446\u0435\u043d\u0435, \u0447\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f 640&#215;480 \u0438 GPU \u0441 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u043c \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435\u043c!<\/p>\n<p> \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a EEEPC 701 4G \u0441 Intel GMA 900 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443! \u0422\u0435, \u043a\u0442\u043e \u0437\u043d\u0430\u044e\u0442 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 GMA, \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0432\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u044b \u0434\u043b\u044f \u0438\u0433\u0440. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u0442\u043e\u0440\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0447\u0438\u043f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u044f\u043d\u0435\u0442. \u041d\u043e \u043c\u043e\u044f \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e! 15-20 \u043a\u0430\u0434\u0440\u043e\u0432 \u0442\u043e\u0447\u043d\u043e \u0435\u0441\u0442\u044c \u0438 \u044d\u0442\u043e \u043f\u0440\u0438 \u0442\u043e\u043c \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c!<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/668ef4b1315cc3d4a13b9aa2\" data-style=\"\" id=\"668ef4b1315cc3d4a13b9aa2\" width=\"\"><\/div>\n<\/div>\n<p> \u0410 \u0434\u0430\u043b\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0438\u0434\u0443\u0442 \u0442\u0435\u0441\u0442\u044b \u043e\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 \u0432 Telegram-\u043a\u0430\u043d\u0430\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0441\u043a\u0438\u043d\u0443\u043b \u0431\u0438\u043b\u0434 \u0438 \u043f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u043b \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u043c\u043a\u0443 \u043d\u0430 \u0440\u0435\u0442\u0440\u043e-\u0436\u0435\u043b\u0435\u0437\u0435. \u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0435\u0441\u0442 \u043e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 \u0441 Pentium III \u0438 \u0440\u0435\u0434\u043a\u043e\u0439 \u0432\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 Trident CyberBlade XP \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 15-20 \u043a\u0430\u0434\u0440\u043e\u0432:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/668d9d326748d7d46fcde5df\" data-style=\"\" id=\"668d9d326748d7d46fcde5df\" width=\"\"><\/div>\n<\/div>\n<p> \u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u043e\u0442 \u0436\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u0438\u043c\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043d \u043f\u0440\u043e\u0441\u0438\u043b \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c, \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u043b \u0434\u0435\u043c\u043a\u0443 \u043d\u0430 ATI Rage M6 \u2014 \u043e\u0447\u0435\u043d\u044c \u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u0434\u0440\u044b\u0439 GPU, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0434\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 20-25-30 \u043a\u0430\u0434\u0440\u043e\u0432!<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/668ef4b12331bb9d71028c69\" data-style=\"\" id=\"668ef4b12331bb9d71028c69\" width=\"\"><\/div>\n<\/div>\n<p> \u0418 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0414\u0430\u043d\u044f \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u043b \u0438\u0433\u0440\u0443 \u043d\u0430 \u043d\u043e\u0443\u0442\u0435 Fujitsu \u0441 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u043c ATI Rage, \u0433\u0434\u0435 \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u0441\u044c\u2026 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u0435 EnumerateZBufferFormats! \u0420\u0430\u043d\u043d\u0438\u0435 Rage \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 Z-\u0431\u0443\u0444\u0435\u0440 \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0435\u043a\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c (\u043d\u0435\u0443\u0436\u0442\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432?):<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lj\/r7\/tx\/ljr7txbt7ti0d3afq-jr_vwh-tq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/lj\/r7\/tx\/ljr7txbt7ti0d3afq-jr_vwh-tq.png\"\/><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p> \u0412\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0434\u0435\u043c\u043a\u0430, \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0414\u0430, \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0435\u043d\u044c\u043a\u043e, \u0437\u0430\u0442\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e, \u0437\u0430\u043f\u0438\u043b\u0435\u043d\u043e \u0437\u0430 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0435\u0442\u0430\u0442\u044c \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a\u0430\u0445. \u0422\u0430\u043a\u0436\u0435 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c <a href=\"https:\/\/t.me\/monobogdann\">Telegram-\u043a\u0430\u043d\u0430\u043b<\/a>, \u043a\u0443\u0434\u0430 \u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u044b\u0441\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u043c \u0440\u0435\u043c\u043e\u043d\u0442\u043e\u043c, \u043c\u043e\u0434\u0434\u0438\u043d\u0433\u043e\u043c \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0434 \u0433\u0430\u0434\u0436\u0435\u0442\u044b \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u043b\u0435\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0442\u0443\u0434\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0432\u0438\u0434\u0435\u043e! \u041d\u0430\u0439\u0442\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0435\u043c\u043a\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430 <a href=\"https:\/\/github.com\/monobogdan\/airplanes\">\u043c\u043e\u0451\u043c Github<\/a>.<\/p>\n<p> \u041f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u0442\u0430\u0442\u044c\u044f? \u041f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0451 \u043c\u043d\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u044f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \ud83d\ude42<\/p>\n<p> \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0438\u0437 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0435\u0441\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441 \u043a\u043e\u0441\u044f\u043a\u0430\u043c\u0438) \u0438\u043b\u0438 \u0434\u0435\u0448\u0435\u0432\u044b\u0435 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0438 \u043d\u0430 \u0430\u0439\u0444\u043e\u043d\u044b\/\u0430\u0439\u043f\u0430\u0434\u044b\/\u043c\u0430\u043a\u0431\u0443\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0440\u0435\u043d\u0434\u043e\u0432\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u0431\u0443\u0434\u0443\u0447\u0438 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438, \u0442\u043e\u0440\u043c\u043e\u0437\u044f\u0449\u0438\u043c\u0438, \u0438\u043b\u0438 \u043e\u043a\u0438\u0440\u043f\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0432\u0430\u043c \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0441\u0432\u0430\u043b\u043a\u0443, \u0430 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043e\u0442\u0434\u0430\u0442\u044c \u0438\u0445 \u0432 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0443\u043a\u0438 \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e \u043d\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044e \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u0432 Telegram \u0438\u043b\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445! \u0413\u043e\u0442\u043e\u0432 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043a\u0443\u043f\u0438\u0442\u044c \u0438\u0445. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u0449\u0443 \u0434\u043e\u043d\u043e\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e \u0440\u0435\u043f\u043b\u0438\u043a\u0443 iPhone 11: \u043c\u043e\u0439 \u0443\u0434\u0430\u0440\u043d\u0438\u043a, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043a\u0430\u043b\u0438\u0442\u0441\u044f \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0442 \ud83d\ude41<\/p>\n<p> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1ae\/aa3\/f51\/1aeaa3f51174c93b27af94991f291848.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1ae\/aa3\/f51\/1aeaa3f51174c93b27af94991f291848.png\"\/><\/p>\n<hr\/>\n<p> <\/p>\n<h4><font color=\"#454cee\">\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435:<\/font> <\/p>\n<ul>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/826272\/\">\u041f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 C# \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a\u043e\u0432: \u0447\u0442\u043e, \u043a\u0430\u043a \u0438 \u0433\u0434\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Orange Pi One<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/826284\/\">\u0411\u0443\u0434\u0443\u0449\u0435\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0413\u0434\u0435 \u0438 \u043d\u0430 \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/826998\/\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0437\u0430\u0431\u044b\u0432\u0447\u0438\u0432\u044b<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/821555\/\">\u0414\u0435\u043f\u043b\u043e\u0439 .NET \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/827238\/\">\u0412\u0438\u043d\u0442\u043e\u043d \u0421\u0435\u0440\u0444 \u2013 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442<\/a><\/li>\n<\/ul>\n<p> <i>\u0410 \u0435\u0449\u0451 \u044f \u0434\u0435\u0440\u0436\u0443 \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u043c\u043e\u0431\u0438\u043b\u044b \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u0437\u0438\u043d\u0435 \u043f\u0440\u0438 \u0441\u0435\u0431\u0435 (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435, \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430) \u2014 Timeweb. \u041f\u043e\u0442\u043e\u043c\u0443 \u043d\u0430\u0433\u043b\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0442\u043e, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0441\u0430\u043c \u2014 <a href=\"https:\/\/timeweb.cloud\/?i=106909\">\u0432\u044d\u043b\u043a\u0430\u043c<\/a>:<\/i><\/p>\n<p> <a href=\"https:\/\/timeweb.cloud\/?i=106909\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/r8\/ms\/jc\/r8msjcfet9mgza3ybpor_sdgrt0.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/r8\/ms\/jc\/r8msjcfet9mgza3ybpor_sdgrt0.jpeg\" data-blurred=\"true\"\/><\/a><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/827116\/\"> https:\/\/habr.com\/ru\/articles\/827116\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/pb\/fz\/qz\/pbfzqziq8wfy3zaycynimrc3zdi.png\" data-src=\"https:\/\/habrastorage.org\/webt\/pb\/fz\/qz\/pbfzqziq8wfy3zaycynimrc3zdi.png\"\/><\/p>\n<p> <b>\u041e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e<\/b>: \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043a\u0430\u0436\u0443\u0449\u0443\u044e\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0446\u0435\u043b\u043e\u0439 <i>3D-\u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f<\/i>, \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f <i>\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/i> \u0438 <i>\u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c<\/i> \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u044e\u0431\u043e\u043c\u0443 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0430\u043b\u0435\u043a\u0438 \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0446\u0435\u043b\u043e\u043c!<\/p>\n<p> \u0421\u0442\u0430\u0442\u044c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u043d\u0434\u0438-\u0438\u0433\u0440 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0447\u0435\u0433\u043e-\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441 \u043d\u0443\u043b\u044f, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u2014 \u0435\u0449\u0451 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435! \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u044e \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c, \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441 13-14 \u043b\u0435\u0442 \u043c\u0435\u043d\u044f \u0442\u044f\u043d\u0435\u0442 \u043f\u0438\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0435 3D-\u0434\u0435\u043c\u043a\u0438 \u0438 \u0438\u0433\u0440\u0443\u0448\u043a\u0438. \u0415\u0449\u0451 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043a\u0443\u0440\u0441\u0435 \u041f\u0422\u0423 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0434\u0435\u043c\u043a\u0443 \u0441 3D-\u0432\u0435\u0440\u0442\u043e\u043b\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0442\u0438 \u0438 \u0438\u0434\u0435\u044f \u0437\u0430\u043f\u0438\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u043b\u0435\u0442\u0430\u043b\u043a\u0438 \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u043b\u0430 \u043c\u0435\u043d\u044f \u043f\u043e \u0441\u0435\u0439 \u0434\u0435\u043d\u044c! \u0421\u043f\u0443\u0441\u0442\u044f 6 \u043b\u0435\u0442, \u0432 22 \u0433\u043e\u0434\u0430 \u044f \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0441\u0438\u043b\u0430\u043c\u0438 \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0430\u0440\u043a\u0430\u0434\u043d\u0443\u044e \u0434\u0435\u043c\u043a\u0443 \u043f\u0440\u043e \u0431\u0430\u0442\u0430\u043b\u0438\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0438\u043a\u0430\u0445, \u0434\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0430\u0436 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445 \u0438\u0437 90-\u0445 \u2014 NVidia Riva 128 \u0438 3DFX Voodoo 3! \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f \u2014 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u00ab\u0442\u0440\u0438\u0434\u044d\u00bb \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0434\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0434\u0435\u043c\u043a\u0438? \u0422\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-427325","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/427325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=427325"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/427325\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=427325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=427325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=427325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}