
Когда я узнаю, почему я разрабатываю это программное обеспечение? Нужно ли мне поддерживать его с целью? Говорят, что цель жизни — жить. Я не знаю, стоит ли мне надеяться на момент озарения, когда все встанет на свои места, или просто проснуться однажды утром, и задним числом все всегда будет казаться очевидным.
Я думал не только о том, что я делаю, но и о том, чего я не делаю.
Я не делаю традиционное коммерческое программное приложение. Я не делаю игровой движок. Их много, и они отлично справляются со своей задачей. Они также являются промышленными по масштабу и размаху. Гудини, Майя, Юнити и Блендеры всего мира вложили в них десятилетия и бесчисленные тысячи человеко-лет работы. Они были тщательно оптимизированы с использованием новейших функций C++ и спроектированы так, чтобы в полной мере использовать современные графические процессоры.
Для меня важно не думать об этом процессе как о соревновании. Я не делал (и, возможно, из-за отсутствия воображения, не могу думать о том, чтобы сделать) ничего, что нельзя было бы воспроизвести гораздо проще, с большим количеством функций и надлежащим графическим интерфейсом, используя существующие пакеты. Даже с открытым исходным кодом, в которых недостатка нет.
Возможно, идея, которую я обвожу, такова: что может изменить один программист? Или, может быть, более узко, чего я надеюсь достичь? Стоит ли задуматься над этим вопросом, или это приведет к параличу и неуверенности в себе?
История вычислительной техники полна людей, которые изменили мир к лучшему. Даже в сообществе программистов на Лиспе было много тех, кто изменил ситуацию. Все, от Джона Маккарти, который изобрел сам язык, до Рича Хикки, который вдохнул новую энергию в идеи, лежащие в основе языка, с помощью Clojure.
Я точно знаю, что хотел бы одного: чтобы люди использовали мое программное обеспечение. Одно из самых больших удовольствий, которые я испытал как разработчик компьютерной графики, — это видеть, что художники могут делать с моим программным обеспечением. И если я посмотрю на людей, упомянутых выше, они оба создали сообщества, которые брали их работу и работали вместе с ней. Так что это то, что я имею в виду, когда я продвигаюсь вперед с этим проектом.
Одна вещь, которая вскоре становится очевидной, когда вы смотрите на истории успеха практически в любой области, заключается в том, что они редко бывают линейными. Они принимают неожиданные повороты (по-моему, это современный термин в мире стартапов) и гораздо более хаотичны, чем можно было бы представить со стороны. Маккарти даже не хотел, чтобы язык его оригинальной статьи был реализован на компьютере. Кто-то другой взял на себя это сделать.
Этот проект начался в значительной степени как один из ностальгии. Возврат к моим ранним дням становления, сформированный взломом Lisp Machine в MIT Media Lab. Я знал, что в нем не будет ничего похожего на бизнес-план, или даже на презентацию в лифте, или даже на четко сформулированную цель. Самое близкое, что я могу сказать, это: что интересного могло бы произойти, если бы кто-то — я — попытался заняться разработкой 3D CG на Common Lisp в современном мире?
И мне нужно напомнить себе об этом, набраться терпения и позволить процессу идти своим чередом. Повороты и повороты и все такое. Это еще рано.

Код и дизайн
Изначально я намеревался избежать любого рендеринга OpenGL, кроме простых вайрфреймов, и использовать Blender в качестве средства рендеринга. С этой целью я написал экспортер долларов США, который я использовал для импорта своих моделей в Blender.
Но по мере того, как геометрическая сложность моих моделей росла, я чувствовал, что каркасов может быть недостаточно, поэтому я решил реализовать минимальное затенение OpenGL. Я решил сделать модели похожими на 1980-е и отобразить их в виде граненых квадроциклов.
Фрагмент кода выше должен вызвать учащенное сердцебиение у любого современного программиста GPU. Он выполняет несколько вызовов OpenGL для каждой вершины, используя устаревшие функции API. В лучшем случае начало 1990-х.
Но эй, это ностальгия для вас.