Найти в Дзене
da-nie

Самопальное 3D

Очень, очень давно, году эдак в 1999 меня очень заинтересовало 3D. Из компьютеров у меня тогда был только дома ZX-Spectrum да едва появившиеся 233 пентиумы в школе. Хотя ещё у приятеля был 75 пенёк от AMD. В этой самой школе я и играл в Doom, Blood и Q2. Q3 там не шёл (видеокарта была I740). И вот я долго пытался сделать что-то хоть как-то рабочее. Частично это получилось - текстурированные стены вышли. В этом мне помогла книжка "Динамическая графика" из серии компьютерной графики для ZX-Spectrum. Там рассматривалась Elite и вся вот эта тригонометрия с вращением и прочими проекциями. Текстурирование и развёртку линии делал уже я сам. В 2000 году, уже будучи в институте, я купил в Доме книги в СПб книжку Шикина и Борескова "Компьютерная графика, полигональные модели". Закрыв первую сессию, мне на радостях 1 февраля 2001 года купили AMD Duron-650 с видеокатрой Riva TNT 2 Vanta, и я за засел за 3D. Сначала я сделал нечто на базе идеи движка от Wolf 3D (а было это в июне 2001

Очень, очень давно, году эдак в 1999 меня очень заинтересовало 3D. Из компьютеров у меня тогда был только дома ZX-Spectrum да едва появившиеся 233 пентиумы в школе. Хотя ещё у приятеля был 75 пенёк от AMD. В этой самой школе я и играл в Doom, Blood и Q2. Q3 там не шёл (видеокарта была I740). И вот я долго пытался сделать что-то хоть как-то рабочее. Частично это получилось - текстурированные стены вышли. В этом мне помогла книжка "Динамическая графика" из серии компьютерной графики для ZX-Spectrum. Там рассматривалась Elite и вся вот эта тригонометрия с вращением и прочими проекциями. Текстурирование и развёртку линии делал уже я сам. В 2000 году, уже будучи в институте, я купил в Доме книги в СПб книжку Шикина и Борескова "Компьютерная графика, полигональные модели". Закрыв первую сессию, мне на радостях 1 февраля 2001 года купили AMD Duron-650 с видеокатрой Riva TNT 2 Vanta, и я за засел за 3D. Сначала я сделал нечто на базе идеи движка от Wolf 3D (а было это в июне 2001). А вот уже осенью 2001 года у меня был прототиоп игры DooM (пока ещё на крупной сетке, как в Wolf, и не позволяющий делать стены под углами - это, к слову, было ограничение редактора, а не движка). Назывался он у меня DooM-3). Потихоньку, к концу декабря 2001 года этот DooM уже вылился в более-менее нормальную игру с произвольной картой в 2.5 мерном мире: Вот эта игра (называлась уже DooM-4). В промежутке между покупкой книжки и DooM'ом были различные варианты движков и всяческие эксперименты. То текстуры "рваные" получаются из-за недостаточной точности, то скорость работы низкая. В общем, на зимней сессии 2001-2002 года игра и родилась. Дальше, в 2005 году я улучшил скольжение, о чём написал в заставке игры. А в 2015 я немножко доработал внутреннюю организацию программы. Но совсем не сильно. Да, код внутри далёк от идеала. Но ведь я тогда только-только разбирался с С++! А учителей программированию у меня отродясь не было. Да, и в институте тоже - нам толкали численные методы, но не языки программирования и алгоритмы. Кафедра-то у меня квантовой электроники, ей программисты ни к чему. Другим вот потокам вообще Microsoft Works давали. :)

С тех пор, после DooM, я много раз пытался перести его движок отдельными модулями и на них сделать новую игру. Так и не сделал. Зато сделал движок типа Build. Ну и редактор карт для него.  Чем он интересен? А тем, что уже позволяет наклонять голову. Умеет в BSP-дерево, экранный и геометрический порталы. То есть, можно выбрать три варианта отсечения невидимых граней карты. Об этом я статью написал, да.  Очень хотелось карму повысить. :)

Немного позже я решил накатать самодельную 3D-библиотеку уже честной 3D-графики. Вот она.  А вот она же, но на STM32. Собственно, она для того и писалась, чтобы на всякое-разное можно было портировать. Ну и как же без статьи? Странно только, что минусы были с указанием "низкий технический уровень материала". Это удивляет. Я вот так мало кого видел, кто что-то подобное мог написать. А может, это я просто зазнался? Комплексы неполноценности и гипероценки ведь могут соседствовать. :)

А ещё, я в 2004 придумал интересный алгоритм
рисования динамический источников света на базе OpenGL Ничего подобного я никогда не видел в публикациях. Работает это так.  Ну или попроще, вот так. Так что, наверное, можно гордиться. Что-то оригинальное за всю жизнь я-таки придумал. Ну, надеюсь. :)