
项目开发商 3DMMEx 成功推出经典款 微软3D电影制作器 в Linux 无需 Wine 或虚拟机。3DMMEx 源代码移植的作者 Ben Stone 谈到了已完成的工作。据他介绍,该项目已达到一个重要的里程碑:程序现在可以在 Windows 系统中编译和运行。 Linux这使得 3DMMEx 成为已知第一个在 3D Movie Maker 之外运行的分支版本。 Windows关于此次转会的公告日期为…… 9的五月2026年.
微软3D电影制作器 ——一款1995年推出的儿童程序,用于创建简单的3D动画:用户选择场景、放置角色和物体、为其分配动作、添加对话、音效和音乐。长期以来,该项目一直作为那个时代的封闭历史文物而存在。 Windows 95,但在 2022 年 5 月,微软根据 MIT 许可证开源了 3D Movie Maker。微软官方存储库 在 github 上可用; 说明中明确指出,这是 1995 年原始项目的源代码,以 MIT 许可证发布为开源软件。
开放源代码成为多次尝试复兴该程序的起点。首先是……项目 3DMMForever该项目致力于现代化构建流程,并使其能够使用现代工具进行编译。后来,由于开发进度放缓,Ben Stone 创建了一个分支。 3DMMEx该项目的目标是保留经典的 3D Movie Maker 体验,但增加一些小的改进,并使代码能够移植到现代系统。
移植工作并非简单地重新编译旧代码。3D Movie Maker 的源代码是用旧的 C++ 方言、Microsoft Visual C++、Win32 API 和 32 位内存模型编写的。此外,其内部库使用了静态依赖、内联 x86 汇编、旧的指针大小假设以及链接到 Windows特定子系统。
必须做什么
用 SDL 替换 Win32 层。 3D Movie Maker 使用内部应用程序框架 考艾岛最初,它抽象了一些系统功能,但实际上仍然依赖于 Win32。在 3DMMEx 中,图形界面的实现被转移到了 SDL2这使我们能够在保留原有应用程序架构的同时,替换窗口子系统、输入处理和渲染部分。
重写渲染和输入流程。 在 Win32 中只需一次调用即可完成的某些操作,在 SDL 中却必须手动实现。例如,处理字体时就需要手动实现。 Windows 虽然沿用了现有的字体枚举和创建函数,但在便携版本中,这部分逻辑必须针对每个平台单独编写。同样,键盘快捷键系统也需要重新实现,因为旧版本存在一些问题。 Windows该实现方式不能直接用于 Linux.
移除内联汇编器。 Kauai及其相关组件使用了手工优化的x86汇编代码,其中包括用于内存复制、图像处理和数据压缩的函数。为了提高可移植性,这些部分被替换为C/C++版本。据作者称,这不仅简化了外部编译过程。 Windows但在某些情况下,由于标准 C 库中 memcpy 和 memmove 的现代实现,性能甚至有所提高。
了解静态库。 3D Movie Maker 有两个重要的外部依赖项: 布兰德 и AudioManBRender 是 Argonaut Software 开发的一款用于图形处理的 3D 引擎。它的源代码也是开源的,但其中包含大量的 x86 汇编代码。3DMMEx 使用的是其一个变体,其中汇编部分被替换成了可移植代码。
用 AudioMan 替换 Linux. 图书馆 AudioMan 它不仅负责声音播放,还负责在应用程序内导入和录制声音。由于它与……紧密相关 Windows-声音和COM接口,开发者没有直接移植。对于非-Windows- 新增了一个基于该系统的声音播放和录制模块 迷你音响.
增加对 MIDI 和视频插入的支持。 为 Linux端口已集成 流体合成器 用于 MIDI 播放和 的GStreamer 用于播放视频屏幕保护程序。我们还必须解决迁移旧程序时遇到的常见问题。 Windows-POSIX 环境下的程序:文件名区分大小写、路径中的反斜杠、平台特定的文件处理函数以及其他一些小问题,这些问题共同导致应用程序启动失败。
编写适用于 64 位系统的代码。 旧代码大多假定运行在 32 位环境下。在移植过程中,我们发现存在指针被强制转换为 32 位数字的情况,并且保存到磁盘的结构体大小取决于指针的大小。为了保持与 3D Movie Maker 项目文件的兼容性,我们在代码中添加了结构体大小检查和单独的序列化逻辑。
改进调试和测试。 考艾岛的部分内部测试已转移到 谷歌测试此外,代码中还添加了对接口脚本执行的额外检查和日志记录。这一点至关重要,因为 3D Movie Maker 的大部分逻辑并非存在于常规 C++ 代码中,而是存在于应用程序自身的脚本中。
现在 在 3DMMEx 存储库中 公开支持 Linux通过 SDL2 实现图形和输入,使用 Visual Studio 2022、Clang 和 GCC 构建,支持 x64 和 ARM64 的 64 位版本,用可移植的 C++ 替换了内联汇编,添加了单元测试,改进了鼠标处理,新增了键盘快捷键,并支持更高质量的音频导入。用于构建 Linux 需要 CMake、Ninja、GCC 以及开发库 SDL2、SDL2_ttf、GStreamer、GTK3、iconv 和 Fontconfig。
而 Linux该版本必须从源代码构建。作者计划稍后为常用发行版准备即用型二进制版本。移植本身已经可以正常工作:据 Ben Stone 称,所有 3DMMEx 功能在 SDL 中都能正常运行。Linux尽管在舞台上拖动演员时鼠标操作仍然存在问题,但这些版本仍然可用。此外,未来可能的发展方向之一是移植到…… macOS 此外,还可以通过 Emscripten 在浏览器中运行。
因此,微软在2022年开放源代码,不仅使得这款老程序得以以存档形式保存,而且最终实现了向现代平台的全面移植。如今,3D Movie Maker不再仅仅是那个时代的博物馆展品。 Windows 95,同时也作为一个例子,说明以自由许可发布代码如何能让一个长期被弃用的应用程序在几十年后重获新生。
来源: linux.org.ru
