Логотип PSone и где он обитает

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Знакомая картинка? Думаю, что знакома она многим. Дети 90-х (ух, что тогда творилось, в песне Монеточки это всё описано), видели этот логотип при старте приставки PS1. И оказалось, что

Оказалось, что это 3D объект. И содержится он на каждом диске с игрой. Содержится он там естественно в проприетарном формате.

Когда-то мне стал интересен процесс программирования под эту консоль, и я наткнулся на сайт psxdev.net, где в разделе загрузок можно найти как официальные средства разработок, так и официальную документацию. В числе этой документации есть и описание применяемых типов файлом. Одним из таких типов оказался формат TMD. Поняв как устроен его заголовок, я начал искать по нему файлы в различных образах игр. И каково было моё удивление, что в самом начале диска, ещё до объявления реквизитов игры, была найдена подобная сигнатура. Ради интереса было проверено ещё несколько образов. И всё повторилось. TMD файл лежал в несжатом виде в самом начале образа. Это 5 сектор диска. А к примеру само представление игры происходит на 16 секторе. Где описывается платформа и название игры

образ диска открытый в  hex-редакторе
образ диска открытый в hex-редакторе

Ну обо всём по порядку. Сигнатурой данного типа файлов является значение 0х00000041. И далее идут служебные данные. Вот на представленном скриншоте это отлично видно. Если открыть документацию, а она очень легко гуглится, файл называется "fileformat47", и немного почитать. Становится понятно, что модель состоит из одного объекта, имеет 337 вершин (0х00000151), 153 нормали (0х00000099), 560 полигонов (0х00000230), и значение масштаба = 7, вернее это степень в которую надо возвести 2, чтобы получить масштаб.

Сразу стал вопрос, а как это отобразить, как посмотреть, что там за фигура. Да. Можно было пойти каким-то незамысловатым путём, и найти какой-нибудь конвертер в DXF или RSD, чтобы открыть в каком-либо 3d вьюере. Но хотелось своего опыта. Поэтому было принято решение самому написать, что-то, что позволило бы его отобразить. Тем более, что посмотрев структуру файла, я понял, что сам объект не тяжелый, без текстур с одноцветными полигонами без градиентов, про это говорят заголовки полигонов 0х2000304.

Я начал копать в сторону opengl, и быстренько (за неделю так, примерно) накидал программку, которая бы позволила отобразить это. И оно отобразилось. Я увидел логотип, но так как мои знания в программировании равноценны знаниям третьеклассника по математике. То через какое-то время (полтора года), я решил, что неплохо бы было перегнать файл во, что-то общеизвестное, что позволяло бы его открывать в известных программах, например стандартный 3D viewer из Windows 10. Я начал смотреть какие форматы он способен открыть. И вот один из них мне понравился, это был формат OBJ. Я погуглил, что он из себя представляет, и мне показалось, что это вполне реализуемо.

Имея какие-то навыки работы с Си, благо уже были наработки, я, уже действительно быстро, накидал программку по трансформации данных в файл OBJ. На самом деле, сначала, я это сделал на python, но не осилил процедуры создания файлов, а в Си, как по мне, это проще. Да, получилось, но оказалось, что в этих файлах нет информации о цвете полигонов. Пришлось так же гуглить как передать информацию о цвете. Оказалось, что надо создавать ещё один файлик с раширением MTL (сокращение от "материал"). Оба файла должны быть вместе, как Бонни и Клайд.

Получилось. Да код не идеален. Можно сгруппировать полигоны по цветам, а не присваивать каждому полигону свой цвет, как это делаю я. Но оно получилось.

А если кому интересно то я оставлю ссылку на каталог с исходниками: https://disk.yandex.ru/d/Kwk8tYfHonyl6g

Источник: https://habr.com/ru/post/682244/


Интересные статьи

Интересные статьи

Говоря о разработке сайтов с использованием CMS 1C Bitrix вопрос покрытия тестами поднимается редко. Главная причина в том, что большинство проектов обходится штатным функционалом, который предоставля...
В данной статье мы рассмотрим систему аутентификации пользователей и внешних систем в личном кабинете через сервер аутентификации Blitz Identity Provider. Согласно требованиям проекта, который мы...
Субботний вечер омрачен скандалом - сайт не работает, провайдер негодяй, админы - не специалисты, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битри...
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накоп...
Один из самых острых вопросов при разработке на Битрикс - это миграции базы данных. Какие же способы облегчить эту задачу есть на данный момент?