㈠ 基于Qt的Live2D示例(几乎都是官方给的代码就是啦!)
长久未更新,计划在疫情期间整理某段遗忘代码,却意外发现了Live2D的趣味性。由此,我萌生了将Live2D模型投射到屏幕上的想法。Live2D在C++的桌面引擎中支持DirectX、OpenGL、Cocos2d-x,我选择使用OpenGL的Cubism SDK。由于Qt也支持OpenGL,我利用Qt资源简化了开发过程。首先下载Cubism SDK并编译Demo,遇到错误后修改CMakeLists.txt以兼容最新版本的msvc编译器,同时加入glew和glfw,项目顺利编译。接下来分析代码文件,移除无用部分并用Qt的QOpenGLWidget替代LAppView。为了兼容OpenGL函数,修改Framework,使QOpenGLWidget支持glClearDepthf。调整窗口属性以实现“透明”效果,包括设置窗口属性和响应WM_MOUSEACTIVATE消息。尽管窗口看起来透明,但模型仍然遮挡屏幕,这与项目中遇到的类似问题相关。尝试使用WS_EX_LAYERED解决,但失败后我采用了一种新的方法:通过LAppModel的HitTest接口判断鼠标是否在模型上,进而动态调整窗口属性实现透明。处理坐标变换以确保模型正确显示。通过LAppModel和LAppDelegate整合LAppLive2DManager类,移除模型切换代码,实现模型固定位置显示。利用矩阵调整模型位置,允许通过鼠标拖动模型。实现了一个可拖动的模型,并在接下来探讨Windows Toast Notification的集成。对于UWP应用相对简单,但Win32程序涉及COM接口的复杂性。通过定义AppUserModelID和CLSID,复制组件,实现Toast Notification的生成。Toast可以区分用户点击的具体消息,并在程序初始化时进行配置。检测Toast激活参数后,避免加载图形界面,仅在Toast激活时执行函数。最后,解决了插件系统相关的线程问题、数据拉取的cookies存储、libzip的文件管理等复杂性,确保了程序的正常运行。此外,还实现了一些有趣的功能,如音乐播放、查询未提交作业、文件压缩等插件。整个项目涉及多种技术挑战,最终完成了从代码到功能的完整实现。分享链接,将release版本发布。