基于Qt的Live2D模型显示以及控制

部署运行你感兴趣的模型镜像

基于Qt的Live2D模型显示以及控制

基本说明

Live2D官方提供有控制Live2D模型的SDK,而且还提供了一个基于OpenGL的C++项目Example,我们可以基于该项目改成Qt的项目,做一个桌面端的Live2D桌宠程序。

DesktopLive2D

基于上面的修改,我开发了一个Live2D模型桌面程序,可以把live2D模型放在桌面上,进行互动,支持自定义加载模型,帧率设置,快速切换模型,鼠标互动。后续准备加上ChatGPT和TTS。

这是一个基于Qt和Live2D SDK的桌面应用程序,用于展示和交互Live2D模型。主要亮点包括:

1.采用MVC架构,通过LAppLive2DManager管理模型,LAppView负责渲染,LAppDelegate处理事件

2.使用单例模式管理核心组件,如LAppDelegateLAppLive2DManager

// LAppLive2DManager.cpp - 模型管理
void LAppLive2DManager::ChangeScene(Csm::csmInt32 index) {
    _sceneIndex = index;
    ReleaseAllModel();
    // 加载新模型
    LAppModel* model = new LAppModel();
    model->LoadAssets("path/to/model", "model.model3.json");
    _models.PushBack(model);
}

渲染系统

// LAppView.cpp - OpenGL渲染
void LAppView::Render() {
    // 设置渲染目标
    SwitchRenderingTarget(_renderTarget);
    
    // 清理缓冲区
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    // 绘制模型
    for (csmUint32 i = 0; i < _models.GetSize(); i++) {
        LAppModel* model = _models[i];
        model->Draw(*_viewMatrix);
    }
}

交互系统

// Live2DWidget.cpp - 鼠标交互
void Live2DWidget::mousePressEvent(QMouseEvent *e) {
    isPressed = true;
    float x = TransformViewX(e->x());
    float y = TransformViewY(e->y());
    LAppLive2DManager::GetInstance()->OnTap(x, y);
}

资源管理

支持多种Live2D模型格式(.moc3)
灵活的动作和表情系统

// LAppModel.cpp - 动作控制
CubismMotionQueueEntryHandle LAppModel::StartRandomMotion(
    const csmChar* group, 
    csmInt32 priority,
    ACubismMotion::FinishedMotionCallback onFinishedMotionHandler
) {
    if (_modelSetting->GetMotionCount(group) == 0) return -1;
    
    csmInt32 no = rand() % _modelSetting->GetMotionCount(group);
    return StartMotion(group, no, priority, onFinishedMotionHandler);
}

移植Qt

Qt中有封装的OpenGL类(QOpenGLWidget),我们要做的就是把模型渲染在我们自己的OpenGL窗口上。

  1. 准备以上文件后我们用Qt Creator新建一个带界面UI文件的Qt程序,编译器使用MSVC对应的版本,名字叫Live2DDemo,然后把以上链接库,源文件,头文件添加到项目中。

  2. 添加完成后Qt工程如下所示

我们需要在mainwindow.h中手动链接一下这些库。

#pragma comment(lib, “kernel32.lib”)
#pragma comment(lib, “user32.lib”)
#pragma comment(lib, “gdi32.lib”)
#pragma comment(lib, “OpenGL32.lib”)
#pragma comment(lib, “glu32.lib”)

pro文件配置中加一个预定义宏,表示在WINDOWS平台

DEFINES += CSM_TARGET_WIN_GL

Framework的头文件直接把SDK中的Framework/src/目录下的所有文件直接复制过来就行,不用删除其中的cpp文件。GL和GLFW的文件夹名字不能改,因为它们源码就是以“GL/*.h"的方式包含的。如果更改了,需要去源码那里改一下头文件的包含。

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值