Vasily Zakharov (jolaf) wrote,
Vasily Zakharov
jolaf

Category:

Blast from the past

Зашла тут речь про C++, и я вспомнил, что я ведь ничего путного в жизни не написал на этом языке... В сущности, единственный мой проект на плюсах – это курсовик по машинной графике на третьем курсе, в 1996 году, вроде довольно красивый. Кстати, где он? – подумал я и пошёл искать.

Поднял бэкапы старых дисков. У меня никогда не хватало решимости наводить в них порядок, поэтому они выглядят так: вот бэкап дисков предыдущего компа, на одном из них – бэкапы дисков ещё более предыдущего компа, и так три уровня вложенности. Более старые бэкапы никогда не хранились на жёстких дисках, а (вероятно?) лежат где-то на DVD-R болванках, на Zip-дискетах, а то и вообще на флопах... Это звучит уже слишком пугающе, попробую всё же поискать на винтах.

Беглый просмотр директорий, где искомое могло бы лежать, ничего не дал. Тщательный тоже. Вообще такие задачи надо решать поиском, но проблема в том, что я вообще не помнил, как называется то, что я ищу. Поиск файлов *.cpp тоже ничего не дал.

А вот поиск с заходом в архивные файлы внезапно дал – здесь нужно возблагодарить используемый мной в те годы славный мэйлер The Bat!, который умел хранить файлы-аттачменты не в общей базе, где их не нашёл бы никто и никогда, а в отдельной папке, прямо в виде файлов.

Вот в этой папке и нашёлся архив с .cpp-файликами. Это был аттачмент к письму, которое я отправлял преподавателю в конце курса, с отчётом. :) Кажется, это то, что нужно!

Но не тут-то было – в архиве обнаружилось всё, кроме запускаемого файла. Видимо, по архиву в своё время потоптался какой-нибудь Касперский, посчитавший DOS4/GW-экзешник подозрительным (там в целом есть из-за чего), и вынесший его из архива за это.

Но раз влезши в эту эпопею, останавливаться я уже не хотел. :) Итак, DOS4/GW, DOS-экстендер для запуска программ под DOS в защищённом режиме, с доступом к 64 мегабайтам памяти вместо одного, и к структурам данных больше 64 килобайт. Наиболее широко известен в качестве платформы первых двух игр серии Doom. Программы под него создаются с помощью компилятора Watcom C++...

В общем, сделал я виртуальную машину DOS под VirtualBox, нашёл в бэкапах Norton Commander и Watcom C++, вспомнил, как настраивать компилятор, как писать AUTOEXEC.BAT и CONFIG.SYS, так что в итоге всё даже скомпилировалось.

Потом стало понятно, что разрешение 320x200 в наше время как-то ну совсем не смотрится, так что пришлось поковыряться в коде (м-да, представления о правильном его оформлении у меня в те годы были... специфические) и поотлаживаться, чтобы поднять его до, скажем, 1600x1200.

Ну и писать видео с экрана виртуальной машины как-то не то, так что пришлось написать на Питоне конвертер из внутреннего формата данных программы в анимированный PNG, ну и дальше ffmpeg-ом перегнать его в обычное видео. Короче, недельку всё это безумие заняло недолгими вечерами.

В общем, вот. 1996-й год, DOS, честный ray tracing, голый C++, без каких-либо сторонних библиотек, 3D-движков и DirectX-ов. 9 бесконечных плоскостей, 20 тетраэдров, 1 точечный источник света, 208 кадров (исторически было 52). Ни разу не real-time, рендеринг одного кадра в те годы, на 386-й машине занимал минуты, сейчас под эмулятором без аппаратной виртуализации занимает секунды, но всё равно долго. Но работает. :) Выложил исходный код на github, для истории. :)

Уфф. Главное, не спрашивайте, зачем я это всё сейчас затеял. :)

Tags: 3d, cgi, raytracing, render, rendering
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 25 comments