![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
hidefromkgb |
![]()
Сообщение
#1
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
Доброго времени всем!
После чёрт знает скольки лет простоя снова вернулся к форматам ресурсов из Scorcher. Стараниями -=CHE@TER=- и меня любимого, текстуры (всех трёх разных форматов) и звуки уже на сайте есть. Остался единственный формат: 3D-модели в .WL3 — но явно не в том .WL3 что «Wolfenstein 3D Registration Data», который отгугливается, т.к. это вообще не 3D формат. В общем, пишу здесь потому что .WL3 в кои веки начал поддаваться разборке. То ли опыта в 3D я за эти годы накопил, то ли просто надо мной уже не висит диплом и поиск работы. Представляю вашему вниманию загрузчик .WL3 файлов, wcn (чтоб не ломать традицию из rcn, fcn, 0cn и bcn). Пока что работает корректно только на Linux (хотя для винды и мака там есть весь код кроме непосредственно взятия имени файла из аргументов запуска, т.ч. правка займёт строк десять от силы), и загружать умеет только многоугольники. С текстурами пока что разобрался лишь частично — знаю где лежат текстурные координаты, но где сами идентификаторы текстур, я ещё не в курсе. Запускать так: wcn-gtk /путь/до/файла.wl3 При этом откроется OpenGL окно, в котором можно побродить по модельке. На скриншоте под спойлером, например, самая сложная из трасс в игре, шестая. Консольная выдача при запуске — это цветовая разметка для шестнадцатиричного редактора wxHexEditor, которым пользуюсь для анализа. Спасибо сказали:
|
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Ура-а-а! Столько лет спустя ты наконец-то решил на форуме написать. (*улыбается*)
В общем, пишу здесь потому что .WL3 в кои веки начал поддаваться разборке. Рад, что у тебя всё наладилось и даже время на хобби появилось!То ли опыта в 3D я за эти годы накопил, то ли просто надо мной уже не висит диплом и поиск работы. Пока что работает корректно только на Linux (хотя для винды и мака там есть весь код кроме непосредственно взятия имени файла из аргументов запуска, т.ч. правка займёт строк десять от силы), и загружать умеет только многоугольники. Я честно попытался собрать под Windows, но ты забыл выложить исходные коды к:core/ogl_load/ core/vec_math/ Эти каталоги на GitHub пустые из-за чего ничего не собирается. С текстурами пока что разобрался лишь частично — знаю где лежат текстурные координаты, но где сами идентификаторы текстур, я ещё не в курсе. Ты в IDA код смотришь? Дебажные символы от Watcom с именами функций, классов, методов и глобальных переменных подключал?По поводу имени файла: CODE #include <windows.h> BOOL MyGetOpenFileName(HWND wnd, TCHAR *mask, TCHAR *name, DWORD size) { OPENFILENAME ofn; ZeroMemory(name, size * sizeof(name[0])); ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = wnd; ofn.nMaxFile = size; ofn.lpstrFile = name; ofn.lpstrFilter = mask; ofn.lpstrInitialDir = TEXT("."); ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_PATHMUSTEXIST; return(GetOpenFileName(&ofn)); } int main(void) { TCHAR name[MAX_PATH]; if (MyGetOpenFileName(0, TEXT("Sorcher world layout 3 (*.wl3)\0*.wl3\0All files\0*.*\0\0"), name, MAX_PATH)) { MessageBox(0, name, NULL, MB_OK); } return(0); } |
hidefromkgb |
![]()
Сообщение
#3
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
Я честно попытался собрать под Windows, но ты забыл выложить исходные коды к: Не, всё верно. Это подмодули, чтобы они инициализировались следует выкачивать проект с помощью git clone --recursive — а скачать с гитхаба архивом не получится вообще; уже сто раз им заводили багрепорт на этот счёт, но никто даже не чешется.core/ogl_load/ core/vec_math/ Эти каталоги на GitHub пустые из-за чего ничего не собирается. В самом крайнем случае можно подложить их вручную вот отсюда. Ты в IDA код смотришь? Дебажные символы от Watcom с именами функций, классов, методов и глобальных переменных подключал? Нет, код я смотрю в X64DBG, и для него за пару часов настропалил самопальный импортёр ваткомовских символов.В Ольге я бы так не смог, а тут просто изумительный в своей простоте и мощности скриптовый движок. |
-=CHE@TER=- |
![]()
Сообщение
#4
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Не, всё верно. Это подмодули, чтобы они инициализировались следует выкачивать проект с помощью git clone --recursive — а скачать с гитхаба архивом не получится вообще; уже сто раз им заводили багрепорт на этот счёт, но никто даже не чешется. Ого! Не знал, что там всё так основательно поломали.Всё, за что Microsoft берётся, то превращается в оно. А если за оно берётся, то просто тратит меньше сил. Нет, код я смотрю в X64DBG, и для него за пару часов настропалил самопальный импортёр ваткомовских символов. У нас, кстати, тут как раз тема по работе с отладчиками есть, где я про x64dbg писал.В Ольге я бы так не смог, а тут просто изумительный в своей простоте и мощности скриптовый движок. Подкинул файлы и собрал проект. По щеке пробежала скупая мужская слеза, ибо собралось без ошибок и предупреждений даже на моём старом компиляторе. Эх, не умеют сейчас так писать. Респект за это! Про всякие отсутствующие в моих заголовочных файлах функции типа SendInput() я ничего писать не буду, потому что у меня компилятор и заголовочные файлы старые, так что я это "за кадром" победил и описывать не буду. Запустил, оно сказало что не смогло загрузить файл и вышло. Не понял в чём прикол, стал отлаживаться и, опа: CODE if ((file = open(name, O_RDONLY)) > 0) { Ты забыл O_BINARY флаг добавить - не на всех системах по умолчанию бинарный режим. На некоторых (как в Windows) он по умолчанию текстовый. Из-за чего файл, понятное дело, читается как попало. Хорошая практика - это явно указывать режим открытия файла. Короче, поправил это и ещё раз перекомпилял. Запустил, оно долго плевало в консоль .XML, затем выдало: QUOTE ERROR: can`t load 'glCreateProgram*'! Ибо, шейдеров у меня нет, а ты там что-то уж очень навороченное использовал, чего на моей старой видеокарте нет (хотя Quake III в OpenGL вполне себе спокойно чувствует). Так что, увы, окно было чёрным и ничего на нём не рисовалось.ERROR: can`t load 'glCreateShader*'! Shader error! Shader allocation failed ERROR: can`t load 'glDeleteProgram*'! ERROR: can`t load 'glUseProgram*'! ERROR: can`t load 'glDeleteProgram*'! ERROR: can`t load 'glGenerateMipmap*'! Если надо, я могу тебе простенький OpenGL проект дать с генерацией 3D карты с текстурами - уже не помню откуда когда-то качал. Смысл в том, что он у меня собирается из исходных кодов и работает. Ладно, выложил исходники OpenGL, которые у меня точно работают, в соседней теме. |
hidefromkgb |
![]()
Сообщение
#5
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
Ты забыл O_BINARY флаг добавить - не на всех системах по умолчанию бинарный режим. На некоторых (как в Windows) он по умолчанию текстовый. Из-за чего файл, понятное дело, читается как попало. Хорошая практика - это явно указывать режим открытия файла. Аргх. Винда…И вот ведь была же у меня проверенная функция чтения файла, но тогда бы пришлось их по фронтендам раскидывать, а мне было лень =( В релизной версии поправлю конечно. Ибо, шейдеров у меня нет, а ты там что-то уж очень навороченное использовал, чего на моей старой видеокарте нет (хотя Quake III в OpenGL вполне себе спокойно чувствует). Так что, увы, окно было чёрным и ничего на нём не рисовалось. Ох, а вот тут ты меня врасплох застал. Как-то я не предполагал, что сейчас есть машины на которых нет OpenGL 2.0, когда даже мобильники уже начали поддерживать GL 3.x… Ну хорошо, а хотя бы вот это работает ли?В принципе да, шейдеры здесь особо не нужны, в конце концов модельки загружаются из игры 1995 года, просто у меня была готовая болванка для кроссплатформенной GL программы, с неё и делал. И теперь мне безумно интересно, что там у тебя за зверь-машина =) Потому как чуйка мне усиленно подсказывает, что там явно не GeForce MX440, а что-то более современное, просто без необходимых драйверов. …И то, на MX440 шейдеры всё-таки были, просто заточены были сугубо под DirectX, писались на ассемблере схожем с ARBVP1.0 / ARBFP1.0, и назывались Direct3D Hardware Transform & Light. OpenGL дрова с поддержкой этой всей красоты для MX440 появились дай боже в 2006 году. Я почему знаю — у меня до 2008 года домашняя машина работала на ней родимой. В принципе, могу использовать и ARB[VF]P1.0, у NVidia есть даже утилиты для трансляции в него шейдеров на GLSL. Но опять же, мне для этого важно знать модель видяхи. Если там у тебя какая-нибудь настоящая (старше MX440) древность, то только фиксированный конвейер — хотя возвращаться к нему и вручную натыкивать трансформации через glPushMatrix() / glPopMatrix() очень бы не хотелось. P.S.: как-то плотность ссылок на квадратный сантиметр комментария потихоньку начинает зашкаливать. Я не спамер, просто подкрепляю слова пруфлинками. |
-=CHE@TER=- |
![]()
Сообщение
#6
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Ну хорошо, а хотя бы вот это работает ли? Работает, правда выдаёт 0 или 1 FPS, но я вижу горы где-то вдали в тумане и какой-то прямоугольник сверху с красной вертикальной фигнёй.Кстати, ты исходные коды OpenGL, ссылку на которые я дал в прошлом сообщении, не смотрел? И теперь мне безумно интересно, что там у тебя за зверь-машина =) Потому как чуйка мне усиленно подсказывает, что там явно не GeForce MX440, а что-то более современное, просто без необходимых драйверов. Драйвера, может не последние, но я долго подбирал, чтобы как можно большая часть старых игр более или менее сносно работали.nVIDIA Riva TNT2 Model 64 (32 Mb) Мой рабочий компьютер покупался в 2002 году, с тех пор я только жёсткие диски увеличил, монитор (старый приказал долго жить) и добавил 256 Mb памяти (в материнке всего два слота под память) - теперь у меня 386 Mb. А, ну и ещё, два года назад транзисторы на материнке полопались, так что перепаивать пришлось. В остальном - всё работает без нареканий. Если там у тебя какая-нибудь настоящая (старше MX440) древность, то только фиксированный конвейер — хотя возвращаться к нему и вручную натыкивать трансформации через glPushMatrix() / glPopMatrix() очень бы не хотелось. Ну, таких как я, думаю, не очень много, так что можешь не париться, наверное.P.S.: как-то плотность ссылок на квадратный сантиметр комментария потихоньку начинает зашкаливать. Я не спамер, просто подкрепляю слова пруфлинками. Нормально всё, это же не спам. |
hidefromkgb |
![]()
Сообщение
#7
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
Работает, правда выдаёт 0 или 1 FPS, но я вижу горы где-то вдали в тумане и какой-то прямоугольник сверху с красной вертикальной фигнёй Красная фигня — это позиция камеры на карте (белые квадраты внизу), а её высота — это собственно высота над уровнем моря.Что до 1 FPS — да, увы но у TNT2 (блин, TNT2!!) нет аппаратной поддержки вершинных массивов, поэтому похоже что проц каждый кадр гоняет через шину весь буфер. Кстати, ты исходные коды OpenGL, ссылку на которые я дал в прошлом сообщении, не смотрел? Смотрел, и всё знаю про такой стиль написания GL программ, я именно ему в детстве учился по замечательной книжке Краснова.Как доразберу формат до конца, сделаю всё-таки для виндовой версии возможность сброса на фиксированный конвейер. Чёрт возьми, TNT2… И это ещё я думал, что это я тут олдскульщик, со всеми своими усилиями по совместимости гитхабного кода с Win98SE =) |
-=CHE@TER=- |
![]()
Сообщение
#8
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Как доразберу формат до конца, сделаю всё-таки для виндовой версии возможность сброса на фиксированный конвейер. Смотри как тебе удобнее. Повторюсь, таких как я, наверное, не слишком много.Чёрт возьми, TNT2… И это ещё я думал, что это я тут олдскульщик, со всеми своими усилиями по совместимости гитхабного кода с Win98SE =) (*улыбается*) На самом деле ты молодец. Я, вон, тоже все программы для сайта собираю так, чтобы они тоже даже на Win98SE работали. Я просто в 2002 году компьютер купил (по тем временам он считался достаточно мощным) и с тех пор только память слегка увеличил (128 + 256 = 384 Мб), жёсткие диски большего объёма поставил и монитор заменил когда тот скончался. А, ещё пару лет назад на материнке полопались конденсаторы, так что пришлось их перепаивать. Для работы и не сильно навороченных игр с 2002 года пользуюсь этим компьютером и мне его без проблем хватает. Особенно хорошо отлаживать и писать всякие программы с тяжёлыми вычислениями - на небольших данных современные компьютера просто мигом программу исполняют, а здесь уже видно что скорость так себе, надо бы подумать как можно оптимизировать и сократить время работы.Кстати, о программах и Win98SE. Когда ты современным погром-мистам говоришь что твои программы работают на Windows XP, то всегда забавно смотреть, как они начинают пеной исходить, что, мол, система больше не поддерживается, там вирусы, трояны, гроб, кладбище, сидр. А если ты упоминаешь о том что твои программы и под Windows 98 работают, то им, горемычным, вообще, скорую вызывать приходится, ибо в своих выделениях они просто захлёбываются. (*улыбается*) Меня это всегда так безумно веселит. Ну не можешь ты в WinXP или Win98 - да и фиг бы с ним. Не-е-ет, надо всем и каждому доказать что это не ты такой, а система плохая. До этого была хорошая, проблем с ней не было, а тут бац! и плохая. |
hidefromkgb |
![]()
Сообщение
#9
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
Итак, ура. Геометрия отныне импортируется полностью корректно; теперь модельки не выглядят слепленными из разнородных кусков.
Оказывается, в заголовке каждого блока вершин был коэффициент масштабирования, который я до сей поры игнорировал. Теперь осталось понять, как вся эта радость текстурируется. Не то чтобы это было сильно важно, текстурки один хрен с почтовую марку размером и придётся их менять так или иначе, однако я уже закусил удила. |
hidefromkgb |
![]()
Сообщение
#10
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
|
-=CHE@TER=- |
![]()
Сообщение
#11
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
О-о-о! Классно! Это уже с освещением?
Выглядит здорово - будешь ремейк делать? (*улыбается*) |
hidefromkgb |
![]()
Сообщение
#12
|
Newbie ![]() Группа: Delegated Сообщений: 8 Регистрация: 8-March 19 Пользователь №: 18,032 Спасибо сказали: 1 раз(а) ![]() |
Нет, как такового освещения я в этих моделях не нашёл. На снимке источником освещения служит «налобный фонарь» на камере.
А насчёт переделки — я ж ещё в универе хотел, да всё никак времени не было. К слову, есть прогресс по текстурированию. Судя по всему, текстурных координат в ныне общепринятом смысле слова здесь вообще нет, а каждому примитиву просто приписывается отдельное изображение из .0 или .1 файла — притом для треугольников половина изображения, лежащая выше главной диагонали матрицы пикселей, отбрасывается. И разумеется текстура после этого повторяет все искажения, которые вносит примитив. Более того: я был неправ, предполагая что информация о соответствии текстур примитивам хранится в .WL3 — напротив, всё это я нашёл в .0 / .1 файле, когда задолбался так и эдак перебирать нерасшифрованные поля .WL3 моделей. |
![]() ![]() |
Упрощённая версия | Сейчас: 8th September 2024 - 11:02 |