Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Пикабу Игры +1000 бесплатных онлайн игр

Начните с маленькой подводной лодки: устанавливайте бомбы, избавляйтесь от врагов и старайтесь не попадаться на глаза своим плавучим врагам. Вас ждет еще несколько игровых вселенных, много уникальных сюжетов и интересных загадок.

Пикабомбер

Аркады, Пиксельная, 2D

Играть
Погрузитесь в логическую головоломку: откручивайте болты из планок на самых сложных уровнях! Вы не только расслабитесь в конце сложного дня, но еще и натренируете свой мозг, решая увлекательные задачки. Справитесь с ролью опытного мастера? Попробуйте свои силы в режиме онлайн бесплатно и без регистрации!

Головоломка. Болты и Гайки

Казуальные, Гиперказуальные, Головоломки

Играть
Открой для себя волшебный мир реальной рыбалки. Лови реальную рыбу на реальных водоемах! Исследуй новые рыболовные места и заполучи заветный трофей.

Реальная Рыбалка

Симуляторы, Мультиплеер, Спорт

Играть
Игра «История одной фермы» - увлекательное и бросающее вызов вашим серым клеточкам приключение, от которого невозможно оторваться!

История одной фермы - маджонг

Маджонг, Казуальные, Приключения

Играть
Сыграйте в классический пасьянс и попробуйте разложить по порядку колоду из 52 карт, начиная с короля и заканчивая тузом. Игра имеет четыре варианта: с 1, 2, 3 и 4 мастями. Выиграйте как можно больше в каждом варианте и улучшите свои показатели.

Пасьянс Паук «Классический»

Карточные, Логическая, Мобильная

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Fw-190

С этим тегом используют

Самолет Все
22 поста сначала свежее
391
nati595
nati595
2 месяца назад
Авиация и Техника

FW-190⁠⁠

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Готовясь к войне, немцы возлагали большие надежды на истребители Мес-сершмитт Bf 109, которые строились большой серией. В других странах на вооружении ВВС, как правило, находились два-три типа истребителей. Они имели разную конструкцию, располагали теми или иными возможностями. И хотя военное ведомство Геринга считало, что истребителю Мессершмитта нет равных в мире, оно тем не менее было заинтересовано в разработке еще одной машины, отличающейся от Bf 109.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

В 1937 году группа конструкторов фирмы Фокке-Вульф под руководством Курта Танка приступила к созданию такого самолета. В качестве силовой установки для новой машины был выбран 12-цилиндровый 1550-сильный двигатель воздушного охлаждения BMW-139. Хотя он имел большую площадь поперечного сечения по сравнению с двигателем водяного охлаждения ДВ-601, установленного на Bf 109, зато был почти в полтора раза мощнее. Естественно, что это не могло не сказаться на лет-но-технических характеристиках новой машины.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

1 июня 1939 года летчик-испытатель фирмы капитан Ганс Зандер поднял в воздух первый опытный экземпляр самолета, получивший обозначение FW 190. Он показал скорость 595 км/ч — почти на 30 км/ч больше, чем у серийных Bf 109Е того же года выпуска. Но это был еще не предел. Немецкие моторостроители запустили в производство новый 14-цилиндровый двигатель BMW 801С, мощность которого составляла 1660 л. с. Силовой установкой оснастили многие самолеты, в том числе FW 190. С таким двигателем даже серийные истребители стали летать быстрее.
В ходе летных испытаний выяснилось, что FW 190 по целому ряду показателей существенно превосходит «мес-сершмитт». Так, например, мало кто знает, что на скоростях более 600 км/ч Bf 109 становился практически неуправляемым. Из-за большого скоростного напора летчики не могли отклонить элероны даже на несколько градусов. Естественно, что ни о какой маневренности тут не могло идти и речи.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Все положительные отзывы о прекрасной маневренности «мессершмитта» относились к скоростям порядка 300— 500 км/ч, на которых в то время велись воздушные бои. Фокке-Вульф 190 обладал хорошей управляемостью во всем диапазоне скоростей полета, вплоть до максимальной. Кстати, одна из особенностей, характеризующая эффективность системы управления этого самолета, — отсутствие триммеров на рулевых поверхностях. Вместо них стояли небольшие перфорированные регулировочные пластины, которые могли быть отогнуты техником на земле.
Самолет оказался более простым в пилотировании при взлете и посадке. Причем большие, широко расставленные стойки шасси позволяли летчику при необходимости выполнить даже грубую посадку. Отмечалось также, что «Фоккер» не имел тенденции к капотированию — перевороту на спину через нос при резком торможении (особенно на раскисшем грунтовом аэродроме).

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Довольно интересной была конструкция планера. Так, например, крыло собиралось из двух частей — верхней и нижней, что обеспечивало простую открытую клепку панелей обшивки к каркасу. Такая технология позволяла клепать консоли (а также киль и стабилизатор) в огромных количествах с минимальными трудозатратами. Когда фронту и частям ПВО Германии стало требоваться все больше и больше истребителей, авиазаводы смогли резко увеличить выпуск « Фокке вульфов».
Необычно был смонтирован масло-радиатор. Он располагался кольцеобразно вокруг воздухозаборника и прикрывался спереди бронированной обечайкой. Охлаждение радиатора происходило следующим образом: часть воздуха, поступающего внутрь капота, делала перед головками цилиндров двигателя поворот на 180 градусов, проходила через соты радиатора и выходила через щель в переднем кольце капота. На взлете интенсивность обдува радиатора и мотора увеличивалась с помощью вентилятора, установленного за винтом. Его лопасти вращались в том же направлении, что и винт, но со скоростью в 3 раза большей. При высоких скоростях полета вентилятор подтормаживал воздушный поток и не давал маслу и двигателю переохлаждаться. Иными словами, он выполнял функцию воздушных заслонок и жалюзи, которые стояли на других самолетах.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Вооружение истребителя оказалось чрезвычайно мощным. Оно состояло из четырех 20-мм пушек. Две синхронизированные MG 151/20 с боезапасом по 200 снарядов были установлены в корневой части крыла. Две MGFF с боезапасом по 60 снарядов размещались в крыле, вне зоны омета-ния винта. Кроме того, в фюзеляже устанавливались два 7,92-мм пулемета с боезапасом по 1000 патронов. Конечно, поражающее действие пулеметов было незначительным. Они в основном выполняли другие функции. Так, в различной литературе мемуарного характера часто встречаются высказывания о том, что у немецких летчиков не выдерживали нервы и они открывали бесполезный огонь с больших дистанций. На самом деле, пилоты, сближаясь с целью, короткими очередями трассирующих пуль осуществляли пристрелку, а когда убеждались, что противник находится в зоне поражения, — били из всех стволов. Особенно эффективным был такой метод для атак маломаневренных бомбардировщиков и штурмовиков.
Несколько слов необходимо сказать о кабине. Курт Танк уделял проблеме хорошего обзора очень большое внимание. И если обзор вперед на FW 190 был не лучшим, чем у истребителя Bf 109, то в стороны, вверх и назад — просто великолепным. Ни один истребитель начального периода войны не имел столь хорошего обзора. Сдвижная часть фонаря пилотской кабины была сделана из большого куска плексигласа и имела форму, практически не дающую искажений. Для уменьшения бликов на стекле вся кабина внутри красилась черной матовой краской, а над приборной доской нависал специальный козырек. Когда англичане сумели захватить первый трофейный FW190, они были немало удивлены тем, что, несмотря на обычные для боевого самолета подтеки масла и потертости, фонарь кабины отличался особой чистотой. Так технический состав следил за остеклением кабины.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Кстати, в фонаре FW190 была применена одна хитрость, которая до сих пор интересует многих любителей авиации и особенно авиамоделистов-стендо-виков. Вопрос касается того, как сдвигается фонарь, ведь его направляющие не параллельны и сужаются к хвосту. Такого нет ни на одном другом самолете мира. Оказывается, инженеры фирмы Фокке-Вульф, обеспечив летчику хороший обзор назад, в то же время не пожелали портить аэродинамику самолета выступающим фонарем. Они вписали его контур в общие обводы фюзеляжа и заставили сужаться при сдвигании назад. Для того, чтобы фонарь мог «дышать», а оргстекло при этом не трескалось при деформации, в нем прорезали щель длиной около 20 сантиметров. Затем свободные концы скрепили с помощью подвижного шомпольного соединения.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Фокке-Вульф 190 имел неплохую живучесть. Во-первых, двигатель воздушного охлаждения выдерживал значительные повреждения и, кроме того, защищал пилота от обстрела с передней полусферы. Во-вторых, все топливные баки размещались только в фюзеляже. Как известно, при обстреле самолета (особенно с земли) большая часть пуль, снарядов и осколков попадает в крыло из-за его большей площади. Соответственно, вероятность поражения фюзеляжных баков меньше, чем крыльевых.
Таким образом, появившийся у немцев в 1941 году новый истребитель FW 190 представлял действительно большую опасность. Гитлеровская пропаганда не замедлила использовать этот факт для запугивания противника. Однако новый грозный истребитель не оправдал возлагавшихся на него надежд непобедимого. Нет, самолет не был плохим. Но в тот момент, когда он появился на фронте (на Западном — летом 1941, Восточном — в марте 1942 года), на вооружение союзной авиации, а также ВВС Красной Армии стали поступать новые самолеты, ничуть не уступающие «фоккерам» по летно-техническим характеристикам. Особенно неприятными для немецких асов оказались первые воздушные схватки с советскими истребителями Ла-5, которые уже в ходе Сталинградской битвы с успехом вели воздушные бои против новейших немецких машин.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Воздушные баталии, разразившиеся во фронтовом небе, заставили немецких конструкторов всерьез заняться вопросами повышения боевых возможностей своих самолетов. Уже в 1942 году на FW 190 ставится усовершенствованный двигатель BMW 801Д мощностью 1770 л. с. (FW 190 А-3). Чуть позже на фронт начинают поступать истребители серии А-4, оснащенные системой впрыска в цилиндры двигателя водометаноловой смеси. Это позволило кратковременно увеличить мощность силовой установки до 2100 л. е., а скорость полета до 650 км/ч.
Появляются машины с улучшенным бронированием, более мощным вооружением. Так, начиная с FW 190А-5, в консолях крыла вместо старых пушек MGFF стали ставить более эффективные MG 151/20 калибра 20 мм и даже 30-мм пушки МК-103 и МК-108. На самолетах отдельных серий вооружение состояло из шести пушек (двух синхронизированных и четырех сдвоенных крыльевых). Начиная с модификации А-7, фюзеляжные 7,92-мм пулеметы были заменены на крупнокалиберные 13-мм MG 131. На самолетах появился подфюзеляжный держатель, на который подвешивался дополнительный топливный бак или бомба массой до 500 кг. Многие истребители из состава ПВО вооружались реактивными снарядами, что позволяло им более успешно бороться с англо-американскими стратегическими бомбардировщиками.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

В ходе своего развития самолет FW 190 стал базой для создания целого семейства машин совершенно другого назначения. Благодаря способности нести значительную бомбовую нагрузку, «фокке-вульфы» все чаще стали использоваться для нанесения ударов по наземным целям. Однако скоростной истребитель не мог столь же эффективно работать по земле, как «чистые» бомбардировщики или штурмовики. Поэтому в 1942 году был создан специальный ударный вариант самолета — бронированный маловысотный истребитель-бомбардировщик FW 190F. Крыльевых пушек не было. Их заменили 2—4 держателями для бомб балочной конструкции. Машины отдельных серий вооружались подкрыльевы-ми противотанковыми пушками или неуправляемыми реактивными снарядами (до 24 шт.).

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Еще одним направлением в развитии FW 190 стал вариант «G» — фронтовой бомбардировщик. Стрелково-пушечное вооружение уменьшилось до двух пушек, зато на внешней подвеске он мог нести до 1000 кг бомб. Максимальная боевая нагрузка самолета доходила до 1800 килограммов. Фактически, во второй половине войны эти машины заменили устаревшие пикирующие бомбардировщики Юнкере Ju 87. Самолеты серии G-5, G-6, G-7 использовались и как торпедоносцы. Существенным преимуществом FW 190G перед другими бомбардировщиками была способность, при необходимости, самостоятельно вести оборонительный воздушный бой после сброса бомб. Правда, в полете с полной бомбовой нагрузкой они шли на небольшой скорости и практически не могли маневрировать. В связи с отсутствием оборонительного вооружения, стреляющего назад, груженые «фокке-вульфы» часто сбивались истребителями противника, неожиданно появлявшимися с задней полусферы. Характерным примером этого может служить воздушный бой, проведенный трижды Героем Советского Союза И. Н. Кожедубом, который вместе со своим ведомым разгромил группу из сорока FW 190.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Однако возможности самолета еще не были исчерпаны до конца. Еще в 1942 году немцы попытались установить на FW 190 новые двигатели водяного охлаждения с рядным расположением цилиндров. Это направление оказалось перспективным, и в 1944 году в серийное производство был запущен истребитель FW 190D, оснащенный двигателем Юмо 213. Максимальная мощность силовой установки составила 2240 л. с. Скорость полета новой машины достигала 700 км/ч. В дальнейшем на базе этого самолета созданы улучшенные варианты, получившие обозначение Та-152. По своему внешнему виду и по характеристикам истребители FW 190D и Та-152 отличались от фокке-вульфов» модификации А. Фактически это были новые самолеты.
За годы войны немецкая авиапромышленность выпустила 20 тысяч самолетов FW 190 (из них 13 367 истребителей и 6634 истребителя-бомбардировщика), которые чрезвычайно широко применялись на советско-германском фронте и вместе с истребителями Мессершмитта были нашими основными противниками в воздухе.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Общая оценка истребителя FW-190.

В Великой Отечественной войне мы победили опытного, организованного, жестокого и хорошо вооруженного противника. Однако в нашей литературе на протяжении всех послевоенных лет практически не давался объективный анализ немецкой военной техники, в том числе авиационной. FW-190 все же был один из наших главных противников в небе войны, действительно сильный и опасный.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Целое поколение людей, в той или иной мере интересующихся авиацией, привыкло мыслить определенными стереотипами. Так, без всякого сомнения мы называем лучшим английским истребителем периода второй мировой войны самолет «Спитфайр» и пренебрежительно отзываемся о «Харрикейне». Американская «Аэрокобра» стала у нас почти любимым самолетом, а МиГ-3 вспоминаем очень редко и мало знаем о «Хэллкете». Мы любуемся красивыми формами «Мустанга» и с явным непониманием смотрим на толстый уродливый «Тандерболт», даже не задумываясь о том, почему именно этот истребитель был в годы войны самым массовым самолетом в ВВС США.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Ничего удивительного нет в том, что мы считаем свой Як-3 самым лучшим истребителем ВОВ. Столь же стереотипное мнение существует в отношении самолетов немецкой авиации, ведь почти во всех книгах мы читаем одни и те же слова. Откроем, к примеру, известную книгу авиаконструктора А. Яковлева «Советские самолеты». Он пишет: «Наши основные самолеты-истребители «як» и «ла» по своим боевым качествам на протяжении всей войны обладали преимуществом перед германскими машинами аналогичного назначения — Me 109 и FW 190».
Кроме того, истребитель FW 190 довольно часто показывается как неповоротливый перетяжеленный самолет, не идущий ни в какое сравнение с советскими и зарубежными машинами.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Ну разве можно в этом усомниться? И вдруг, диссонансом звучит цитата из книги английских исследователей Д. Ричарса и X. Сандерса «Военно-воздушные силы Великобритании во второй мировой войне 1939—1945 гг.»
«Истребитель «Спитфайр» во всех своих вариантах мало превосходил (если только он вообще имел какое-либо превосходство) по своим летно-тактическим данным лучший немецкий истребитель Фокке-Вульф 190».
Не правда ли, довольно интересное высказывание? Итак, для того, чтобы более четко разобраться в вопросе, давайте подробнее рассмотрим летно-технические характеристики «фоккера» в сравнении с другими самолетами, и прежде всего с истребителем Ла-5. Тем более, что эти самолеты не только постоянно вели между собой воздушные бои, но и по размеру, полетной массе и мощности силовой установки были более-менее близки.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Как известно, основным критерием, характеризующим совершенство любого самолета, является его максимальная скорость полета. Давайте посмотрим, кто же имел преимущество. Начнем с 1942 года (с момента появления этих самолетов на фронте). В это время максимальная скорость полета Ла-5 составляла 509 км/ч у земли и 580 км/ч на высоте 6000 м. У немецкого самолета эти показатели были равны 510 и 610 км/ч соответственно (данные по результатам летных испытаний трофейного истребителя FW 190А-4 на номинальном режиме работы двигателя). Через год в боях на Курской дуге появились усовершенствованные самолеты Ла-5ФН и FW 190 серий А-5, А-8 и А-4, многие из которых были оборудованы системой MW-50 для впрыска в цилиндры двигателя водо-метаноловой смеси. Максимальные скорости полета этих машин составляли: у FW 190 —- 571 км/ч у земли и 654 км/ч на высоте 6000 м. Без использования системы MW-50 максимальная скорость была на 10 км/ч меньше. Таким образом, советские истребители имели некоторое преимущество в скорости на высотах менее 4000 м, где, как правило, велись воздушные бои. Однако и здесь есть определенные тонкости. Так, в книге А. Шахурина «Крылья победы» (бывшего в то время наркомом авиационной промышленности) приводятся высказывания летчиков о сравнении истребителей Ла-5 и FW 190. «По горизонтали Ла-5ФН медленно, но догоняет FW 190, затем сдают свечи и FW 190 медленно уходит».

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

В связи с этим летчики неоднократно обращались к конструкторам с просьбой добавить самолету еще 20—30 км/ч. В 1944 году на фронт начали поступать усовершенствованные истребители Ла-7, максимальная скорость полета которых составляла 680 км/ч. Однако и здесь, объективности ради, его надо сравнивать с новым вариантом «фокке-ву л ьфа» — истребителем FW 190D, также выпущенного в 1944 году и появившегося на фронте. Скорость полета этого самолета доходила до 685 км/ч. Говоря о величине максимальной скорости полета, необходимо отметить, что в воздушных боях они никогда не достигались, так как самолеты постоянно маневрировали, многие из них имели вооружение на наружной подвеске, износившиеся двигатели, заплаты на поврежденных местах, снятые или оторванные створки ниш шасси, что сильно снижало скорость полета.
Из истории воздушных боев известно, что летчики для увеличения скорости полета старались нападать на противника сверху, набирая ее на пикировании. В этом отношении «фокке-вуль-фам» не было равных (по крайней мере на советско-германском фронте). Наши летчики постоянно отмечали тот факт, что немцы часто уходили от преследования, пикируя к земле (если позволяла высота). При этом даже в довольно пологом пикировании с углом в тридцать градусов FW 190 разгонялся до скорости 1045 км/ч (одно из свидетельств его хорошей аэродинамики). Из всех самолетов союзников только «Мустанг» и «Тандерболт» могли догнать «фоккер» на снижении. Зато по маневренным характеристикам в ближнем воздушном бою FW 190 несколько уступал нашим истребителям.
Как известно, горизонтальная маневренность (радиус виража и время его выполнения) прямо пропорциональна удельной нагрузке на крыло. У FW 190 она была довольно высокой и составляла, в зависимости от модификации, 210—240 кг/м2. В то же время у всех истребителей Лавочкина она не превышала 190 кг/м2. Не удивительно, что время виража у Ла-5 и Ла-7 было на 3—4 секунды меньше, чем у «фокке-ву льфа» (19 вместо 22 сек). У истребителей Яковлева горизонтальная маневренность была еще лучше.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Самой высокой горизонтальной маневренностью среди всех самолетов союзников обладали английские истребители «Спитфайр» V и «Спитфайр» IX, так как у них удельная нагрузка на крыло не превышала 150 кг/м2. Казалось бы, что эти высокоманевренные скоростные истребители, доказавшие свое полное превосходство над немецкими истребителями Мессершмитт Bf 109, должны были иметь перед тяжелыми «фокке-вульфами» еще большие преимущества. Однако этого как раз и не произошло. Сбить FW 190 летчикам «Спитфайров» было довольно сложно.
Все дело в том, что любой самолет, прежде чем выполнить вираж, должен сделать крен, то есть совершить поворот вокруг продольной оси. Скорость крена у всех самолетов была разной. Она зависит от эффективности элеронов, момента инерции самолета и размаха крыла. Причем с увеличением размаха скорость крена резко уменьшается. В этом плане, «Спитфайр», имеющий более крупные размеры, проигрывал «Фокке-Ву льфу». Немецкий истребитель быстрее входил в вираж, а когда преследующий его «Спитфайр» начинал настигать, летчик «Фокке-Вульфа» быстро переводил машину из правого виража в левый или наоборот и вновь уходил из-под удара. Правда, выше сказанное не означает, что FW 190 оказался более маневренным. Точно так же немецкие летчики ничего не могли сделать и со «Спитфайром», который уходил из-под огня в крутом вираже. Одним словом, для англичан немецкий истребитель оказался «крепким орешком». Достаточно привести слова Ф. Ллойда — одного из известных-английских специалистов в области авиации, — сказанные им в конце 1943 года.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

«Если английские самолеты не сравняются с самолетом FW 190 в этом отношении (имеется в виду большая скорость крена), то он всегда будет в состоянии ускользнуть от нападения».
Кстати, обрезанные концы крыльев на некоторых модификациях «Спитфайров», по всей видимости, можно объяснить стремлением увеличить скорость крена. Что же касается советских истребителей, то они в этом плане были гораздо лучше, так как имели крыло меньшего размаха, а также небольшой момент инерции — ведь пушки на советских самолетах стояли в фюзеляже, а не в крыле, как у всех английских машин.
Несколько слов о вертикальной маневренности. Конечно, скороподъемность FW 190 была не очень высокой — 12—14 м/сек, в то время как у других истребителей она составляла 15—20 м/сек, и естественно, в маневренном воздушном бою истребители
Ла-5 имели полное превосходство. Однако необходимо учесть следующий момент. Оказывается, скороподъемность при выполнении вертикального маневра зависит не только от удельной нагрузки на мощность (отношение массы самолета к мощности его силовой установки — у Ла-5 эта величина составляла примерно 2,3 кг/л. е., а у FW 190 — 2,5 кг/л. е.), но и от соотношения полетной массы к общему аэродинамическому сопротивлению летательного аппарата. Когда самолет начинает круто набирать высоту после пикирования или после полета на большой скорости, то первая часть подъема происходит за счет его инерции. Иными словами, чем больше масса самолета и скорость полета и чем меньше его сопротивление, тем быстрее в первый момент будет самолет набирать высоту. И в этом плане у немецких пилотов было определенное преимущество перед противником. Во всяком случае их первая атака и выход из нее были всегда стремительными.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Ввязывание же в ближний маневренный воздушный бой считалось нецелесообразным, так как при резком маневрировании тяжелый «Фокке-Вульф» быстро терял скорость и его скороподъемность резко падала. К тому же практика ведения боевых действий показала, что в групповых воздушных боях преимущества одних самолетов над другими не могли проявиться в полной мере, так как преследователи часто сами подвергались атакам противника. Кстати, в литературе мемуарного характера немецких летчиков, уклонившихся от воздушного боя, называют струсившими. Однако в этом у них был свой расчет. FW 190 не мог вести маневренный бой с нашими истребителями на малой скорости, и немцы, естественно, в такие бои не ввязывались, тем более, что маневренный бой, в общем-то является оборонительным, а не наступательным. В годы войны немцы наоборот предпочитали тактику «охотников». И вот здесь мы подошли к самому интересному...
Оказывается, у нас и у немцев был разный подход в отношении действий истребительной авиации. Основной задачей, стоящей перед советскими пилотами, было прикрытие сухопутных войск от авиации противника и сопровождение своих бомбардировщиков. Уже одно это заставляло их вести, в основном, оборонительные бои с немецкими истребителями. В то же время перед немецкими летчиками-истребителями стояла другая первостепенная задача — уничтожение самолетов противника, а сухопутные войска должны были больше полагаться на собственные средства противовоздушной обороны, которых у них было в избытке. При таком подходе немецкие пилоты чаще использовали тактику свободной охоты и выбирали в качестве целей самолеты-бомбардировщики и штурмовики. Не удивительно, что многие из них имели по 100, 200 и даже по 300 и более воздушных побед.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Что же касается истребителя FW 190, то он как раз довольно хорошо подходил именно для таких целей. От огня оборонительного оружия бомбардировщиков (а это, как правило, были пулеметы) FW 190 был надежно защищен. А мощные 20-мм пушки MG151/20 позволяли поражать цели на несколько большей дальности, чем пулеметы, стоящие на бомбовозах.
О вооружении самолета FW 190 необходимо сказать особо. По такому критерию, как вес минутного залпа, машины даже первых модификаций — А-3 или А-4 почти вдвое превосходили Ла-5. Судите сами: эта величина составляла у FW 190 — 275 кг/мин, у Ла-5 —-150 кг/мин, у «Спитфайра» IX — 202 кг/мин и у «Аэрокобры» (вариант с 37-мм пушкой) — 160 кг/мин. После замены на «Фокке-Вульфе» пулеметов и крыльевых пушек на более совершенные, вес минутного залпа увеличился до 350 кг/мин, и FW 190 стал самым мощным одномоторным истребителем мира. Правда, такая же величина веса минутного залпа была и у американского «Тандерболта», но он был вооружен только пулеметами, а поражающее действие пуль было ниже, чем у разорвавшегося снаряда. Когда в конце войны на истребителях FW 190 начали ставить новейшие 30-мм пушки МК108, у которых масса снаряда была в три раза больше, чем у 20-мм пушек MG 151, то вес минутного залпа возрос почти до 600 кг/мин. Для сравнения у тяжелого двухмоторного истребителя «Мо-скито», оснащенного четырьмя пушками и четырьмя пулеметами, эта величина составляла 345 кг/мин. Таким образом, даже без учета использования ракетного оружия, истребители FW 190 представляли серьезную опасность не только для фронтовых, но и тяжелых стратегических бомбардировщиков.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото

Подводя итоги проведенного анализа, необходимо отметить, что, с одной стороны, FW 190, конечно же, не является лучшим истребителем мира (каким его представляла гитлеровская пропаганда), так как он не имел никакого преимущества в воздушных боях с советскими истребителями, но с другой стороны, нельзя недооценивать и сильных сторон этой действительно грозной боевой машины.
И наконец последнее. В конце войны немецкая авиация, хотя и представляла определенную опасность, но активных боевых действий не вела. Появляющиеся в воздухе самолеты FW 190 самых последних модификаций успешно сбивались советскими, английскими и американскими летчиками - истребителями. Это не означало, что немецкие самолеты были хуже самолетов противника. Наоборот, в это время у немцев появились действительно хорошие машины. Кстати, когда в начале апреля 1945 года передовые английские части захватили в плен самого профессора К. Танка, из его показаний было видно, что немецкие конструкторы значительно продвинулись вперед.
Однако в условиях полного господства в воздухе союзной авиации никакие самые совершенные самолеты не могли изменить характера войны. Немецкие истребители только оборонялись в крайне невыгодных для себя условиях. К тому же летать на них практически было некому, так как весь цвет немецкой истребительной авиации «полег костьми» на Восточном фронте в ожесточенных боях с советскими пилотами. И вот именно это, конечно, и следует считать главной и решающей причиной полного разгрома люфтваффе.

FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото
FW-190 Fw-190, Вторая мировая война, Истребитель, Длиннопост, Военная авиация, Военная история, Люфтваффе, Колоризация, Старое фото
Показать полностью 24
Fw-190 Вторая мировая война Истребитель Длиннопост Военная авиация Военная история Люфтваффе Колоризация Старое фото
53
38
andreibelianin
andreibelianin
10 месяцев назад
TECHNO BROTHER

Ответ на пост «Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году?»⁠⁠1

Когда я учился в 9 классе, а это был вроде 2003 год, начали заниматься программированием на информатике, хотя я начал изучать его чуть раньше. Нам объясняли, как на бейсике отрисовать точку, круг, квадрат, и прописав несколько координат, линиями нарисовать многоугольник в виде разных лодочек. Меня это так увлекло, ведь мы на алгебре как раз строили графики, а задав нужную функцию, вывести точки в виде графика, нет ничего проще. В общем первой моей программой был "решебник" для проверки верности моих построений графиков. Потом втянулся, нажал на кнопочку, нарисована ось координат с необходимым масштабом и штрих отметками, перерисовка при изменении масштабов окна и т.д. были, конечно проблемы с тормозами, ведь если точки рисовать достаточно плотно друг к другу, происходит эффект анимации рисования, а если точки редко, отрисовка быстрая, но приблизительная. В общем довел эту программу практически до уровня примитивного графического редактора, можно сказать даже некое подобие графического движка, способного выводить необходимые 2д модели, сохраняя их в файле и пользоваться ими в дальнейшем как спрайтами. Сделал на нем даже две игры, лабиринт, по которому бегает колобок, и пятнашки. Когда учитель информатики увидел мои работы, он конечно мне отлично поставил за будущие года, так как я там ничего нового больше не узнаю, но в то же время предложил заниматься со мной факультативно. Хоть он мне и сказал, что я изобрел велосипед, и все это уже реализовано в DX, но меня преисполняла гордость, что допер до этого сам. Тем не менее, я купил книжку по директу, и тут понеслось. Как же изменилось качество графики, в основном из за смены буферов. Затем разобрался с фотошопом и 3dsmax. Вуаля, и первая полноценная 3d игра, где все тот же лабиринт из рельс и вагонетки, в которой помимо стандартного прохождения, нужно еще переключать стрелки в нужном порядке, чтобы собирать золото. В общем игра не слишком захватывающая, но играл в нее чаще, чем в КС. Эх как же жаль что исходников не сохранилось.

Показать полностью
[моё] Опрос Горячее Ништяки Программирование Net 3D графика Игры Леталки Пилот Самолет Fw-190 Directx Gamedev Без звука Ответ на пост Текст
6
516
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
10 месяцев назад

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году?⁠⁠1

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Осторожно: Несмотря на кажущуюся сложность статьи о разработке целой 3D-игры с нуля, я постарался систематизировать и упростить материал так, чтобы понятно было любому заинтересованному читателю, даже если вы далеки от программирования в целом!

Статьи о разработке инди-игр — это всегда интересно. Но разработка чего-то абсолютно с нуля, без каких-либо движков или фреймворков — ещё интереснее! Почти всю свою жизнь, буквально с 13-14 лет меня тянет пилить какие-нибудь прикольные 3D-демки и игрушки. Ещё на первом курсе ПТУ я написал небольшую демку с 3D-вертолетиками по сети и идея запилить какие-нибудь прикольные леталки не покидала меня по сей день! Спустя 6 лет, в 22 года я собрался с силами и решил написать небольшую аркадную демку про баталии на самолетиках, да так, чтобы работало аж на видеокартах из 90-х — NVidia Riva 128 и 3DFX Voodoo 3! Интересно, как происходит процесс разработки игры с нуля — от первого «тридэ» треугольника, до работающей на реальном железе демки? Тогда добро пожаловать под кат!

❯ Мотивация


Друзья! Вижу, что вам очень заходит моя постоянная рубрика о том, как работали графические ускорители из 90-х «под капотом», где мы не только разбираем их архитектуру, но и пишем демки на их собственных графических API. Мы уже успели с вами рассмотреть 3Dfx Voodoo, S3 ViRGE и мобильный PowerVR MBX и, думаю, теперь пришло время рассмотреть инструменты для разработчиков игр под Windows из 90-х. Про «старый» OpenGL рассказывать смысла не вижу — до сих пор многие новички учатся по материалам с glBegin/glEnd и FFP (Fixed Function Pipeline), а спецификацию с описанием первой версии API можно найти прямо на сайте Khronos. Зато про «старый» DirectX информации в сети очень мало и большинство документации уже потёрли даже из MSDN, хотя в нём было много чего интересного!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Вероятно читатель спросит — зачем пилить что-то для компьютеров 90-х годов, если большинство таких машин (к сожалению) отправились на цветмет и «никто в своем уме» не будет ими пользоваться? Ну, ретро-компьютинг и программирование демок — это, во-первых, всегда интересно. Среди моих подписчиков довольно много ребят, которые ещё учатся в школе, а уже натаскали с барахолок Pentium III или Pentium IV и GeForce 4 MX440 и сидят, балдеют и играют в замечательные игрушки из нулевых на таких машинах с по настоящему трушным опытом, да и я сам таким был и остаюсь по сей день. Вон, мне даже dlinyj скидывал свои девайсы в личку, а я сидел и слюни пускал. Так что факт остаётся фактом — ретро-компьютинг становится всё более и более популярен — что не может не радовать!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

А во-вторых — это челлендж для самого себя! Посмотреть на то, как делали игры «деды» и попытаться запилить что-то самому, не забыв об этом написать статью и снять интересное видео в попытке донести это как можно большему числу читателей и зрителей! Конечно сам DirectX6 в целом значительно проще DX12, но некоторые техники весьма заковыристые и для достижения оптимальной производительности приходится пользоваться хаками. Ну а почему именно леталки? Потому что, наверное, хотел бы когда-нибудь полетать :)

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Игру я решил писать на C#. Кому-то решение может показаться странным, но я уже не раз говорил, что это мой любимый язык, а при определенной сноровке — программы на нем работают даже под Windows 98. В качестве основного API для игры я выбрал DirectX 6, который вышел 7 августа 1998 года — за 3 года до моего рождения :)

Перед тем как что-то начинать делать, нужно определиться с тем, что нам нужно для нашей 3D-игры:

  • Графический движок или рендерер, работающий на базе Direct3D. В его задачи входит отрисовка геометрии, работа с освещением и материалами, отсечение моделей, находящихся вне поле зрения глаз, генерация ландшафтов из карт высот и т. п. Собственно, в нашем конкретном случае это графическим движком назвать сложно — никакого полноценного графа (иерархической структуры, как в Unity) сцены нет, толковой анимации тоже, зато есть довольно продвинутая система материалов :)

  • Звуковой движок на базе DirectSound. Здесь всё по классике: программный 3D-звук с эффектами типа «виу» и «вжух» с загрузкой звуковых дорожек из wav-файлов. Никакого стриминга звука с кольцевыми буферами и ogg/mp3 здесь не нужно!

  • Подсистема ввода, которая представляет из себя «получить состояние кнопки на клавиатуре» и «получить позицию курсора» :)

  • Остальные модули — сюда входят алгоритмы расчёта коллизий, математическая библиотека для работы с векторами и матрицами, система игровых объектов и загрузчики ресурсов. Это весьма небольшие и легкие в реализации подсистемы, но писать про каждый отдельный пункт смысла не очень много, поскольку они так или иначе часть других систем.




Как известно, в самолёте всё зависит от винта! Ну, или в нашем случае, от 3D-движка — поэтому предлагаю рассмотреть архитектуру нашего рендерера и заложить первые кирпичики в нашу 3D-игру!

❯ Графический движок


Поскольку C# — управляемый язык и напрямую дёргать COM-интерфейсы формально не может, а готовых обёрток для DirectX 6 по понятным причинам нет, мне пришлось писать свою. Простыми словами, обёртка обеспечивает слой совместимости между нативными библиотеками, написанными на C++ и управляемым кодом, написанном на C#/VB и т.п. Благо в мире .NET есть такое замечательное, но увы, забытое расширение плюсов, как С++/CLI, которое позволяет прозрачно смешивать нативный код и «байткод» .NET, благодаря которому разработка пошла значительно быстрее.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Любой графический движок начинается с создания окна и инициализации контекста графического API (инициализации видеокарты, если простыми словами) для рисования в это самое окно. В случае Direct3D6 всё интереснее тем, что фактически здесь уже был свой аналог современного DXGI (DirectX Graphics Infrastructure — библиотека для управления видеокартами, мониторами в системе), который назывался DirectDraw. Изначально DDraw использовался для аппаратного ускорения графики на VGA 2D-акселеллераторах — тех самых S3 ViRGE и Oak Technology и предназначался в основном для операций блиттинга (копирования картинки в картинку), но в D3D ему выделили функции управления видеопамятью и поэтому они очень тесно связаны.

Инициализация начинается с создания так называемой первичной поверхности (которая будет отображаться на экран) и заднего буфера (в который будет рисоваться само изображение), или в терминологии современных API — Swap-chain.

DDSURFACEDESC rtDesc;
memset(&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->CreateSurface(&rtDesc, &sSurf, 0));
Guard(sSurf->QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&sSurf4));

Теперь у нас есть окно, куда можно что-нибудь нарисовать!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но 3D мы пока рисовать не можем — ведь контекста D3D у нас всё ещё нет, благо создаётся он очень просто. Единственный момент: Z-буфер нужно создать перед созданием устройства, иначе работать он не будет.

DDSURFACEDESC zbufDesc;
memset(&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(&zbufDesc.ddpfPixelFormat, Window::zBufferFormat, sizeof(zbufDesc.ddpfPixelFormat));
zbufDesc.dwWidth = Width;
zbufDesc.dwHeight = Height;

IDirectDrawSurface* zTemp;
IDirectDrawSurface4* zSurface;
Guard(ddraw->CreateSurface(&zbufDesc, &zTemp, 0));
Guard(zTemp->QueryInterface(IID_IDirectDrawSurface4, (LPVOID*)&zSurface));

// Attach Z-Buffer to backbuffer
Guard(d3dSurface->AddAttachedSurface(zSurface));
Guard(d3d->CreateDevice(IID_IDirect3DHALDevice, surf, &device, 0));

Мы уже на полпути перед тем как нарисовать первый тридэ-треугольник: осталось лишь объявить структуру вершины и написать обёртки над… Begin/End! Да, в Direct3D когда-то тоже была концепция из OpenGL, а связана она с тем, что в видеокартах тех лет вершины передавались не буферами, а по одному, уже трансформированные. Подробнее об этом можно почитать в моей статье о S3 ViRGE:

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();

И вот, у нас есть первый треугольник! Читатель может спросить — а где же здесь игра и причём здесь треугольники, мы же не на уроке геометрии… Дело в том, что вся 3D-графика в современных играх строится из треугольников. Любая моделька на экране — это набор из маленьких примитивов, которые в процессе рисования на экран подвергаются процессу трансформации — преобразованию из мировых координат (то есть абсолютной позиции в мире) сначала в координаты камеры (таким образом, при движении камеры, на самом деле двигаются объекты вокруг камеры), а затем и в экранные координаты, где происходит перспективное деление и каждый треугольник начинает выглядеть как трёхмерный…

Таким образом, из тысяч треугольников можно описать самые разные объекты — от трёхмерной модели моих любимых «жигулей», до персонажей.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но если сейчас нарисовать самолетик, то он будет исключительно белым, без намёка на освещение или детали. А для его «раскрашивания» служат текстуры — специальные изображения, подогнанные под текстурные координаты геометрии, которые помогают дополнить образ 3D-моделей деталями: асфальт на дороге, трава на земле, дверная карты в жигулях…

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

И вот с текстурами ситуация в D3D6 не менее интересная и очень похожа на современные GAPI: нам необходимо сначала создать текстуру в системной памяти (ОЗУ) и только затем скопировать её в видеопамять. Причём форматов текстур не слишком много. Я выбрал RGB565 (16-битный), хотя есть поддержка и форматов со сжатием — тот-же S3TC.

bool hasMips = mipCount > 1; // If texture has more than 1 mipmap, then create surface as complex, if not - then as single-level.

DDSURFACEDESC2 desc;
memset(&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(&desc.ddpfPixelFormat, DXSharp::Helpers::Window::opaqueTextureFormat, sizeof(desc.ddpfPixelFormat));
desc.dwWidth = Width = width;
desc.dwHeight = Height = height;

IDirectDrawSurface4* surf;
IDirect3DTexture2* tex;

IDirectDraw4* dd2;
window->ddraw->QueryInterface(IID_IDirectDraw4, (LPVOID*)&dd2);

Guard(dd2->CreateSurface(&desc, &surf, 0));
Guard(surf->QueryInterface(IID_IDirect3DTexture2, (LPVOID*)&tex));

А чтобы её использовать, нужно «сказать» об этом видеокарте с помощью биндинга текстуры к текстурному юниту. Те, у кого были в свое время 3dfx Voodoo, наверняка поймут, о чём я :)

Guard(device->SetTexture(stage, tex->texture));

И вот у нас уже есть треугольник с текстурой! Осталось лишь домножить его матрицы трансформации, перспективную матрицу…

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Реализуем простенький загрузчик моделей из формата SMD (GoldSrc, Half-Life или CS1.6), который грузит статичные модельки без скиннинга, а также загрузчик текстур из bmp и вот — мы уже имеем 3D-модельку самолёта с текстурой.

for(int i = 0; i < smd.Triangles.Count; i++)
{
uint c = new Color(255, 255, 255, 255).GetRGBA();

for (int j = 0; j < 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
};
}

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Возможно в каких-то играх и не нужно небо, но в леталках — уж точно необходимо. И без учёта динамических облаков, здесь есть две популярные техники:

Возможно в каких-то играх и не нужно небо, но в леталках — уж точно необходимо. И без учёта динамических облаков, здесь есть две популярные техники:

  • Sky-sphere, которая заключается в том, что небо представляет из себя полусферу с наложенной поверх текстурой неба в специальном формате. Такую полусферу очень часто крутят вокруг своей оси по оси Y, создавая эффект плывущих облаков. И получается вполне себе симпатичное анимированное небо. Иные варианты включают в себя многослойные реализации, где крутится могут лишь облака, когда статичные элементы фона остаются на месте.

  • Skybox — здесь суть простая, вокруг камеры рисуется «коробка» с вывернутыми в обратную сторону треугольниками, на которых рисуется текстура одной из сторон панорамы с выключенной записью в Z-буфер. Получается не только симпатично, но ещё и быстрее Skysphere на слабом железе, правда скайбоксы обычно статичным. Скайбоксы можно найти почти везде: например, в Counter-Strike, Half-Life.

    На скриншоте ниже можно увидеть пример скайбокса:

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост



Я выбрал скайбоксы. Реализация — проще пареной репы:

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

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но летать в пустом мире неинтересно и для этого нам нужен хотя бы ландшафт, который называется Terrain. Концепция Terrain простая — у нас есть карта высот, каждый пиксель который описывает высоту той или иной точки.

Мы проходимся по всей картинке и строим сетку треугольников, где высота определяется именно соседними пикселями на этой самой карте высот. На практике это выглядит так:

for (int i = 1; i < bmp.Width - 1; i++)
{
for(int j = 1; j < 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;
}
}

А результат — такой! Это самый простой кейс с Terrain'ом: в реальных играх, где ландшафт достаточно большой, его обычно бьют на так называемые патчи и дальние участки ландшафта упрощают с помощью специальных алгоритмов. Таким образом построены ландшафтры, например, в TES Skyrim.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но ландшафт выглядит слишком скучно — ни травы, ни деревьев, ни даже разных текстур! Одна трава — да что ж это за ландшафтр такой :) И здесь нам на помощь приходят т. н. комбайнеры — которые дают возможность наносить сразу несколько текстур за один проход отрисовки геометрии. Конкретно в данном случае я решил использовал альфа-канал в цвете вершины в качестве значения, определяющего какой текстурой красить тот или иной участок ландшафта. Визуализировать это можно так (где прозрачные участки — там должна быть вторая текстура):

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Этот способ даёт возможность использовать всего лишь две текстуры за один проход, в современных играх используется сплат-маппинг, позволяющий использовать более 4х-текстур за один проход!

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);

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Но тем не менее, выглядит вполне прикольно. Однако текстуры вдали выглядят слишком грубо и отдают пикселями. Ретро-стайл скажете вы? Согласен, но фильтрация и мипмаппинг здесь необходимы! Мип-маппинг — это техника, которая делит большую текстуру на несколько небольших разного размера. Каждый размер называется mip-уровнем и в два раза меньше прошлого: таким образом, у текстуры 256x256 9 уровней: 256x256, 128x128, 64x64 и так до 1x1. Мой самопальный конвертер текстур в собственный формат заранее «запекает» все мип-уровни, дабы быстро грузить текстуры с медленных HDD, а линейная фильтрация с мипмаппингом позволяет сгладить текстуры вдали, дабы они не резали глаза:

device->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTFP_LINEAR);
device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DFILTER_LINEAR);
device->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DFILTER_LINEAR);

device->SetTextureStageState(1, D3DTSS_MIPFILTER, D3DTFP_LINEAR);
device->SetTextureStageState(1, D3DTSS_MINFILTER, D3DFILTER_LINEAR);
device->SetTextureStageState(1, D3DTSS_MAGFILTER, D3DFILTER_LINEAR);

Ну и давайте же посадим немного деревьев на наш ландшафт! Для этого я добавил псевдослучайное добавление деревьев и кустов при генерации геометрии ландшафта:

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)
});

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Упс, наши деревья — черные! А всё потому, что у них нет альфа-канала, благодаря которому видеокарта может отделить прозрачные пиксели текстуры от непрозрачных. Полноценный альфа-блендинг (полупрозрачность) здесь слишком дорогой, поэтому приходится использовать технику, называемую колоркеями (Color key). Техника очень схожая с Chromakey, благодаря которым вырезают фон из видео, но чуть попроще (тем, что цвет прозрачности фиксированный, без Threshold). У нас есть определенный цвет, который считается прозрачным и не используется во всей картинке. Нередко это Magenta, в моём случае — полностью чёрный:

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Включаем колоркей и наслаждаемся прозрачными деревьями на фоне ландшафта!

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Ой-ой, а FPS то успел просесть с 1.000 до 50 из-за большого количества DIP'ов (и не очень хорошей работе современных GPU с старыми гапи). Время оптимизаций! Пока что нам хватит обычного Frustum culling'а, также известного как «отсечение по пирамиде видимости». Суть алгоритма простая: из матрицы вида и проекции строятся 6 плоскостей, каждая из которых описывает одну из сторон системы координат: левая, правая, верхняя, нижняя, ближняя и дальняя. Таким образом, делая обычную проверку нахождения точки в World-space и одной из плоскостей, мы можем отсечь невидимую глазам геометрию и не тратить ресурсы GPU и CPU на отрисовку невидимой геометрии:

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 <= 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 <= -radius)
return false;
}

return true;
}

Затем проверяем, находится ли сфера внутри каждой из 6 плоскостей и если нет, то не рисуем геометрию вообще:

if (mesh.Radius > 0 && !Camera.IsSphereVisible(position, mesh.Radius))
return;

С учётом всех оптимизацией, получаем 17-20 кадров на этом GPU что можно считать… весьма неплохим результатом, учитывая что всё ещё есть куда оптимизировать!

❯ Звук


Эта часть статьи будет без иллюстраций, поскольку звук нужно слушать :) Но тем не менее, детали реализации звуковой подсистемы в DirectX весьма интересны и значительно отличаются от современного подхода.


Инициализация контекста DSound начинается с создания primary-буфера, который выступает в роли микшера перед отправкой звука на аудио-карту. Создаётся он довольно легко:

BufferDescription desc = new BufferDescription();
desc.Flags = BufferFlags.PrimaryBuffer | BufferFlags.Control3D;

primaryBuffer = Context.CreateSoundBuffer(desc);

После этого, в самом простом случае (без стриминга звука) нам достаточно лишь выгрузить PCM-поток на аудио-карту и начать его играть:

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();
}

И всё! Да, вот так легко. BufferFlags.Software заменяется на Hardware, если необходимо аппаратное ускорение.

❯ Ввод


Пожалуй, это самая простая часть нашей статьи :) Как я уже говорил ранее, никакого особого функционала от модуля обработки ввода не нужно, лишь получать состояние кнопок — и с этим справляется лишь один метод…

[DllImport("user32.dll")]
static extern short GetAsyncKeyState(Keys vKey);

public static bool GetKeyState(Keys key)
{
return (GetAsyncKeyState(key) & 0x8000) != 0;
}


Ну что ж, основа готова, давайте перейдем к реализации самого геймплея!

❯ Пилим геймплей


Сначала нам нужно реализовать логику полёта нашего самолётика. В целом, в нашем конкретном кейсе всё просто — для поворотов используем углы Эйлера (лень было писать класс для кватерниона), считаем Forward-вектор (вектор, указывающий на направление прямо) и просто крутим повороты по оси X и Y в нужную сторону, прибавляя к позиции самолетика Forward вектор, умноженный на скорость полёта. Правда, с таким подходом есть некоторые проблемы: выполнить петлю не получится, поскольку Forward-вектор всегда смотрит именно прямо и не учитывает обратную направленность по оси X.

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);

Мы с вами хотим, чтобы камера всегда следила за нашим самолётиком. Для этого нужно взять Forward-вектор объекта и умножить каждую его компоненту на дальность от источника камеры. Эдакая бомж-версия lookat, правда с кучей ограничений, как минимум с Gimbal lock (потерей одной из осей поворота), а чтобы камера казалась плавной и придавала динамичности игре — мы делаем EaseIn/EaseOut эффект путём неправильного использования формулы линейной интерполяции :)

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();

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Ну, летать мы с вами уже можем… да, сильно по аркадному, но всё же :) Пришло время реализовать каких-нибудь соперников, а именно вражеские самолёты! Вообще, реализация нормального ИИ на самолетах, тем более в симуляторах — задачка очень нетривиальная, поскольку боты будут либо читерить, используя не те рычаги, что использует игрок, либо тупить и играть будет не сильно интересно. Вон, что «Варгейминг», что «Гайдзины» крутые в этом плане — я б ниасилил нормальных ботов для мультиплеерного симулятора или даже аркады :))

Вычисляем угол между позицией самолетика соперника и позицией игрока и интерполируем текущий угол по оси Y: получается вполне плавно, правда в нормальных играх ещё и компенсируют эффект «плаванья» вокруг игрока по синусоиде. Для подъёма и спуска по вертикали просто берём абсолютную величину выше/ниже:

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 > 0 ? 1 : -1;
Rotation.Z = MathUtils.Lerp(Rotation.Z, 15 * -diffY, 4.0f * Engine.Current.DeltaTime);

Наши боты будут читерить, причём жёстко. Они будут иметь значительно большую маневренность, нежели игрок, но при этом их скорость будет сильно медленнее игрока, дабы можно было их обогнать и стряхнуть с хвоста.

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

Ну что ж, демка у нас есть и в этот раз я подготовился получше, чем в статье про 3dfx Voodoo: я собрал целых два тестовых стенда и попросил у подписчиков потестировать демку на своих машинах с диковинным железом из 90-х и нулевых годов. Железо у нас такое:

  • Процессор: Celeron 600MHz Coppermine

  • ОЗУ: 192Mb SDRAM 133MHz

  • GPU: Asus GeForce 4 MX420

  • ОС: WinXP SP3

Сам написал, сам полетал: как и зачем я разработал 3D-игру с нуля под компьютеры из 90-х в 2024 году? Опрос, Горячее, Ништяки, Программирование, Net, 3D графика, Игры, Леталки, Пилот, Самолет, Fw-190, Directx, Gamedev, Видео, Без звука, Длиннопост

На Win98 я так и не смог нормально накатить драйвера на MSDC (Mass Storage Device Class — «флэшки»), поэтому «считерил» и поставил WinXP. Изначально я планировал ставить Win2000 — но там .NET 2.0 работает с косяками (при том что этот же самый .NET работает на Win98!).

❯ Тесты


Давайте же посмотрим, как демка идёт на трушном железе. Для наглядности, я решил записать видео.

Переходим к интегрированной графике, а именно к EEEPC 701 4G с Intel GMA 900 на борту! Те, кто знают что такое GMA, понимают насколько эти встройки не приспособлены для игр. Несмотря на наличие поддержки вторых шейдеров, из-за отсутствия аппаратного вершинного конвейера чип ничего не тянет. Но моя игрушка — исключение и она работает на удивление очень даже неплохо! 15-20 кадров точно есть и это при том что есть куда оптимизировать!

А дальше у нас идут тесты от подписчиков в Telegram-канале, которым я скинул билд и пригласил потестить демку на ретро-железе. Первый тест от читателя на ноутбуке с Pentium III и редкой встройкой Trident CyberBlade XP показал весьма неплохой результат — 15-20 кадров:

Дальше тот же читатель, имя которое он просил не раскрывать, потестил демку на ATI Rage M6 — очень и очень бодрый GPU, который выдает стабильные 20-25-30 кадров!

❯ Заключение


Вот такая демка, мини-игрушка у меня получилось. Да, весьма примитивненько, зато прикольно, запилено за пару дней и можно полетать на виртуальных самолетиках. Также у меня есть Telegram-канал, куда я публикую различные мысли связанные с подручным ремонтом, моддингом и программированием под гаджеты прошлых лет, а также публикую туда ссылки на новые статьи и видео! Найти исходный код демки вы можете на моём Github.

Понравилась статья? Пишите своё мнение в комментариях, я старался :)

Статья подготовлена при поддержке TimeWeb.Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

Статья...
Всего голосов:
Показать полностью 20 4 1
[моё] Опрос Горячее Ништяки Программирование Net 3D графика Игры Леталки Пилот Самолет Fw-190 Directx Gamedev Видео Без звука Длиннопост
95
13
Hanter21
Hanter21
2 года назад

Девочки-дизайнеры в Волоколамске⁠⁠

Решил с женой 30 апреля 2023 сгонять в Волоколамск, город посмотреть. ЖД станция встретила графити

Девочки-дизайнеры в Волоколамске Fw-190, 9 мая - День Победы, Граффити, Самолет

Присмотримся к рисунку и найдём отличия от рисунка ниже.

Девочки-дизайнеры в Волоколамске Fw-190, 9 мая - День Победы, Граффити, Самолет

Выводы делайте сами. Моё очко уже сгорело и остыло.

Показать полностью 1
[моё] Fw-190 9 мая - День Победы Граффити Самолет
46
Temerinda
Temerinda
2 года назад
Рукодельники

Розовенькая Фока⁠⁠

Розовенькая Фока Рукоделие, Бисер, Рукоделие без процесса, Бисероплетение, Вышивка бисером, Fw-190, Видео, YouTube, Длиннопост
Розовенькая Фока Рукоделие, Бисер, Рукоделие без процесса, Бисероплетение, Вышивка бисером, Fw-190, Видео, YouTube, Длиннопост
Розовенькая Фока Рукоделие, Бисер, Рукоделие без процесса, Бисероплетение, Вышивка бисером, Fw-190, Видео, YouTube, Длиннопост
Показать полностью 3 1
[моё] Рукоделие Бисер Рукоделие без процесса Бисероплетение Вышивка бисером Fw-190 Видео YouTube Длиннопост
8
684
camperJOe
camperJOe
3 года назад
Вторая Мировая

Аэропорт Берлин-Темпельхоф, май 1945⁠⁠

Аэропорт Берлин-Темпельхоф, май 1945 Ил-2, Fw-190, Берлин, Вторая мировая война, Великая Отечественная война, Самолет, Фотография, Историческое фото, Война

Разбитые немецкие самолеты в аэропорту Берлин-Темпельхоф.

На переднем плане истребители Фокке-Вульф Fw.190. На заднем плане стоят советские штурмовики Ил-2.

Ил-2 Fw-190 Берлин Вторая мировая война Великая Отечественная война Самолет Фотография Историческое фото Война
48
1039
ZorkiTipaFED.ZK
ZorkiTipaFED.ZK
3 года назад
Авиация и Техника

О, бэ-эм-вэшник летит!⁠⁠

Единственный эксплуатируемый авиационный двигатель BMW-801 на данный момент.


Оригинального наездника сего агрегата наглухо ёбнули ленинградские зенитчики в марте 1943-го (если правильно помню). Труп забрали, а самолёт забыли... До конца 90-х. Продали Полу Аллену.

Авиация Техника Самолет Fw-190 Фокке-вульф Истребитель BMW Мат Видео
147
7
AnubysDigital
AnubysDigital
4 года назад
Авиация и Техника

Боевое применение Фокке-Вульф FW-190⁠⁠

Видео рассказывает о боевом применении немецкого одноместного одномоторного поршневого истребителя Фокке-Вульф FW-190, стоявшем на вооружении люфтваффе во время Второй мировой войны.

Видео Авиация Вторая мировая война Люфтваффе Fw-190
0
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии