Друзья, сегодня хочу поговорить об автомобиле, который для многих из нас является не просто машиной, а настоящим произведением инженерного и дизайнерского искусства. Речь, конечно же, о Москвиче-408. Историческая справка Первый экземпляр собрали в 1964 году, а серийное производство стартовало осенью того же года. Автомобиль выпускался на МЗМА (позднее АЗЛК) в Москве, а с 1966 года — и на Ижевском автозаводе. Дизайн: революция на фоне эволюции Москвич-408 многое унаследовал от предшественников – моделей 403 и 407. Однако кузов 408-го был абсолютно новым и стилистически революционным. Если «Москвич-407» представлял собой классическую «круглую мыльницу» в стилистике 50-х годов, то 408-й предлагал совершенно иной подход — лаконичный, гармоничный и элегантный. В его облике читался «плоскостной» дизайн – прямые линии в сочетании с плоскими поверхностями. Фирменный «нос» с обратным наклоном радиаторной решётки и небольшими «капюшонами» над фарами стал настоящей визитной карточкой. Автомобиль получил панорамные переднее и заднее стёкла и изящные вертикальные задние фонари «а-ля Чайка». На момент начала производства — осень 1964 года — «Москвич-408» выглядел очень современно, даже ультрамодно. Он ничуть не уступал своим зарубежным аналогам: американо-британскому Ford Cortina, французскому Renault 8/10 или немецкому Opel Kadett. Технические характеристики По технической части «Москвич-408» был вполне прогрессивен для своего времени: ПараметрЗначениеТип кузоваЦельнометаллический седан несущего типаГабариты4090 x 1550 x 1480 ммКолёсная база2400 ммДвигательБензиновый, рядный 4-цилиндровыйМощность50 л.с.Коробка передачМеханическая, 4-ступенчатая (рычаг на рулевой колонке)Максимальная скорость120 км/чРазгон до 100 км/ч29 сСнаряжённая масса990 кг Утрата элегантности: рестайлинг 1969 года C 6 декабря 1969 года с конвейера АЗЛК стали сходить видоизменённые 408-е и 412-е. Обе модели получили одинаковые изменения в рамках унификации: Легендарный криволинейный спидометр в стиле «спейс-эйдж» (космической эстетики) заменён на тривиальное заводское изделие. Изменилась крышка багажника. Но самое печальное - вертикальные задние фонари уступили место горизонтальным. Да, возможно, это было продиктовано производственной необходимостью. Но, коллеги, я позволю себе высказать крамольную мысль: это была потеря. Потеря той самой уникальной элегантности, того шарма, который делал «Москвич-408» узнаваемым с первого взгляда. Горизонтальные фонари сделали корму более обыденной, лишив её той изюминки, что была у вертикальных «чаек». Завершение эпохи Производство «Москвича-408» продолжалось до декабря 1975 года. На смену ему с февраля 1976 года пришло семейство «Москвич-2138». Так закончилась история одной из самых стильных советских малолитражек.
ml64, SUPER !!! Прям образец для сложного проекта MASM64. У меня если что, дилетантский, наверно, вопрос, поэтому сильно не пинайте. Если у меня видеокарта не будет поддерживать Вулкан, ну и соответственно драйвер не заработает, то этот проект, который в этом треде ( Москвич-408 — элегантность, ставшая классикой ) возможно ли переделать под обычный стандартный OpenGL, чтобы на любых компьютерах запускался ? Или это нереально, т.к. много кода придётся переделывать ?
Да, возможно. Это приложение состоит из четырёх независимых блоков: app (всё, что связано с WinAPI), vk (среда Vulkan), obj (файлы 3D-модели .obj и .mat, а также парсеры вершин, нормалей, полигонов и материалов) и SPIR-V (вершинный и фрагментный шейдеры). Достаточно заменить контекст vk на контекст OpenGL. У меня пока нет готового кода на MASM, но во вложении подходящий код на VBA. В теме РБМК и движок OpenGL на MASM объект рисуется по модели OpenGL 1.0 (как у NeHe), а во вложенном файле Immediate mode заменён на vertex arrays. Было ~65 000 вызовов DLL за кадр (glBegin / glVertex3f / glNormal3fv / glTranslatef / glMaterialfv) -> стало ~15. Вся сетка (11 520 квадов) рисуется одним glDrawArrays. И вот этой функции glDrawArrays можно передать данные, полученные от парсера .obj-файла: Код (Text): Call glVertexPointer(3, GL_FLOAT, 0, lpVerts) Call glNormalPointer(GL_FLOAT, 0, lpNorms) Call glColorPointer(3, GL_FLOAT, 0, lpCols) Call glDrawArrays(GL_QUADS, 0, gVertCount)
Да, и мой OpenGL микро-движок был основан на уроке 10 NeHe. Но это OpenGL 1.0: Код (C): for (int loop_m = 0; loop_m < numtriangles; loop_m++) { glBegin(GL_TRIANGLES); glNormal3f( 0.0f, 0.0f, 1.0f); x_m = sector1.triangle[loop_m].vertex[0].x; y_m = sector1.triangle[loop_m].vertex[0].y; z_m = sector1.triangle[loop_m].vertex[0].z; u_m = sector1.triangle[loop_m].vertex[0].u; v_m = sector1.triangle[loop_m].vertex[0].v; glTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m); x_m = sector1.triangle[loop_m].vertex[1].x; y_m = sector1.triangle[loop_m].vertex[1].y; z_m = sector1.triangle[loop_m].vertex[1].z; u_m = sector1.triangle[loop_m].vertex[1].u; v_m = sector1.triangle[loop_m].vertex[1].v; glTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m); x_m = sector1.triangle[loop_m].vertex[2].x; y_m = sector1.triangle[loop_m].vertex[2].y; z_m = sector1.triangle[loop_m].vertex[2].z; u_m = sector1.triangle[loop_m].vertex[2].u; v_m = sector1.triangle[loop_m].vertex[2].v; glTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m); glEnd(); } Для примера NeHe это было допустимо. Но современные 3D-модели содержат огромное количество полигонов. Например, этот "Москвич": И для отрисовки каждого полигона уже нельзя вызывать glBegin/glEnd. Теперь из вершин, нормалей, индексов и материалов формируются массивы, загружаются в G-RAM, и дальше с ними работает GPU. Поэтому Vulkan можно условно заменить только на OpenGL 4.0+ с VAO/VBO/EBO и шейдерами: Код (C): // Настройка VAO/VBO один раз glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), vertices.data(), GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), indices.data(), GL_STATIC_DRAW); // ... настройка атрибутов ... // Отрисовка каждого кадра: glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0);
ml64, OpenGL у меня, скорее всего, не ниже 4.x, несмотря на возраст видеокарты, а вот Вулкан она не поддерживает. В связи с этим вопрос: если я вас попрошу переделать проект под мою видеокарту - вы мне откажете, потому что это сложно и долго или можете пойти на встречу, если я буду себя хорошо вести ?
Без проблем, но сначала мне нужно закончить с Вулканом. Я сейчас пишу парсер материалов. Как только "Москвич" станет синим, а не радужным, я смогу переключиться на OpenGL. Но за это время Вы можете и сами это сделать - примерный код на VBA я дал. Перевести на ассемблер - дело техники. На Вулкане самое сложное - это следить за структурами. У OpenGL только одна большая структура - pfd. Так что там всё намного проще.
Страшновато мне что-то самому это переделывать. Размер кода приличный для ассемблера, боюсь что-нибуть напутать. Лучше подожду вас. Мне же не горит, торопиться некуда.
У меня "Москвич" уже синий (в смысле: парсер материалов в целом готов), но нет ни прозрачности, ни отражений. Сейчас вот так: А надо, чтобы было вот так: Так что придётся подождать --- Сообщение объединено, 28 июл 2026 в 05:20 --- Освещение надо добавить Чтобы было вот так:
Исправил серьёзный баг, который мешал запускаться на интегрированных GPU. Ну и бонусом подправил цвета (пока не настроены Ambient, Specular и Transparency - всё имитируется одним Diffuse)