Я – хакер! Хроника потерянного поколения
Шрифт:
Позже, как только я перешел на Visual C, я не мог понять, как же тут добавить окно и написать обработчик его событий? Почему он тоже «вижуал», но тут все по-другому.
На Visual Basic было легко написать простейший калькулятор, редактор текста. Но для серьезных проектов он не годился – он был медленный и тащил кучу библиотек с собой.
Хороший язык… для детей. Так пришло понимание, что для серьезного программирования нужно что-то еще.
Линус Торвальдс написал Linux на C и ассемблере. Выбор был очевиден.
Сначала
Любая ошибка на языке ассемблера может привести к краху всей программы. Поэтому, если вы хотите стать настоящим профи, – вы обязаны понимать, как функционирует CPU, как он обращается к памяти, как он работает с устройствами и многое другое. Этот хороший опыт помог мне потом писать высоконагруженные и производительные системы при минимуме системных требований.
Как раз хорошим дополнением к учебнику по ассемблеру стала книга про архитектуру x86-процессоров. Вы знаете, что Биллу Гейтсу приписывают фразу «640 КБ памяти всем хватит»? Откуда взялось ограничение в 640 КБ памяти, как процессоры, начиная с 286-го, его обходили, как появилась многозадачность и защищенный режим работы процессора, скалярность и суперскалярность? Все это должен знать настоящий профи.
Конечно, на ассемблере сейчас уже не напишешь игру, да и хоть сколько-нибудь сложный проект. Этот язык в основном используется для тех случаев, когда нужно сделать что-то очень небольшое, элегантно, на низком уровне, и обычно в виде вставок в код C/C++.
Уже давно даже новые версии компиляторов языка C пишут на самом C.
Поэтому я принялся изучать язык C и сразу C++ по книгам Герберта Шилдта.
Первое мое более-менее серьезное творение – мини-операционная система. Загрузчик, написанный на ассемблере, записывался на первую дорожку дискеты размером 3,5 дюйма и загружал ядро, написанное на C. Ядро на C переводило процессор в многозадачный 32-битный режим. И на этом, в общем-то, все.
Но это реально круто. Я был горд собой! Даже такая простая вещь требовала хороших знаний системного программирования и архитектуры процессора.
В 1998 году выходит игра Half-Life. Эта игра поменяла очень много в отрасли. В отличие от темного Quake, коридоры и комнаты в Half-Life выглядели светлыми и совсем как настоящие.
Half-Life,разработчик Valve Corporation, издатель Valve Corporation, 1998
Подавляющая часть игр использует технологию Lightmaps.
Lightmap – метод освещения пространства в 3D-приложениях. Он заключается в том, что создается текстура, содержащая информацию об освещенности трехмерных моделей. Метод значительно экономит ресурсы компьютера, поскольку приложению не приходится рассчитывать падение света в режиме реального времени.
Так вот, первые игры, в которых начали считать освещение, подобные Quake, были ужасно темными – рядом с источником света светло, а в тени ничего не видно. Всё потому, что освещение рассчитывалось до первого падения луча на поверхность, без отражения. И мозг постоянно говорил, что здесь как-то нереалистично, что-то здесь не так.
Quake,разработчик id Software, издатель GT Interactive, 1996
А вот Half-Life одним из первых стал рассчитывать Lightmaps, учитывая отраженный свет. То есть тень теперь не была идеально черной, она стала реальной, «живой». Алгоритм расчета отраженного освещения называется Radiosity.
Суть Radiosity состоит в том, что все поверхности сцены разбиваются на небольшие фрагменты – патчи, каждый из которых наделен свойствами излучать, поглощать и отражать свет. Процесс вычисления освещения по алгоритму Radiosity состоит из набора итераций [8] , каждая из которых уточняет результат расчета. Для отдельного патча на сцене подсчитывается полученная им от других патчей энергия, а также доля этой энергии, которая будет излучена патчем на следующей итерации.
8
Итерация в программировании – в широком смысле организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя (в отличие от рекурсии). В узком смысле – один шаг итерационного, циклического процесса.
В результате алгоритм Radiosity позволяет получать реалистичные эффекты вторичных отражений, неточечных источников света, мягких теней и т. д.
Half-LIfe получился настолько удачным, что к нему создали даже несколько модов, некоторые из которых показывали сюжетную линию глазами других персонажей. Один из самых удачных модов для игры по сети – это Counter-Strike.
Несколько лет спустя вышел Half-Life – 2. И опять разработчики из Valve сделали прорыв – они добавили реалистичную физику на движке Havok. Теперь брошенная банка из-под газировки не просто падала и прилипала к полу, а реалистично отскакивала, ящики плавали на воде, а убитые противники эффектно перекатывались по ступенькам лестницы.
10-й класс. Мы сидим в кабинете физики, ждем начала урока. Заходит Виктор Валентинович, наш учитель: «Ребята, сегодня вы будете решать олимпиадные задачки. Кто наберет больше баллов, тот пойдет выступать за школу в район».
Задачи я решил достаточно быстро. А вот будущие золотые медалисты осадили меня и чуть ли не вырывали тетрадь: «Дай списать! Дай списать!». Внутренний голос завопил: «Это же не контрольная! Это олимпиада!». И тут я во весь голос закричал: «Отстань! Решай сам!». Сработало. Учитель обратил на нас внимание. А я заработал больше всех баллов в школе и в районе. Мне предстояла поездка в Питер на Ленинградскую областную олимпиаду.
В областной центр нас отправили группой на «девятке» – трое детей с 9 по 11-й класс и учитель. Было это зимой. Выезжали мы рано утром. Всю дорогу мело – видимость почти нулевая. Олимпиада проходила два дня – теория и практика. В первый день вечером мы возвращались домой, на следующий опять ехали в Питер. Ко второму дню остался только я и мой учитель физики. Ехать туда было страшно, внутренний голос постоянно нагнетал, что я не справлюсь и что хочу домой к маме. Позже, в следующем году, я ездил туда на олимпиаду и по информатике, и по физике.