上一篇如何引入Live2D SDK的专栏发出去之后,有小伙伴找到我一起做Live2D相关的App,看来这块的确是有需求的。所以这个专栏我估摸着不能再咕了。

那么上一回我们讲到,如何为一个工程引入Live2D SDK,在引入SDK之后,自然是要把我们的Live2D模型渲染到视图上。

为了更好的理解,避免ObjC孤儿语言造成理解障碍,下面会以在Qt中渲染Live2D作为例子。

先上Demo地址

https://github.com/CmST0us/Nodoka

值得注意的是,需要先参考 https://github.com/CmST0us/Nodoka/blob/master/vendor/download_live2d_native_sdk.txt 来下载配置SDK

先看看Live2D Native SDK的架构

Live2D Native SDK 架构

Core层作为Live2D会社的技术核心,并不对外开放,程序在编译时需要手动链接对应的链接库。你可以在SDK的Core目录中找到相关的内容。

接下来是支撑Framework的基础组建,包括数学计算,一些Json、字符串工具、便于跨平台的自定义类型,以及用于家在模型参数的ID组件。

考虑到一切对模型的操作最终目的都是渲染出来,我按照自己的理解把Render渲染层放在了较底层的地方。接下来是用于加载模型的ModelLoader,ModelLoader通过对模型的json配置文件解析正确得找到对应的moc3模型,贴图,以及各类附加资源文件。其次,ParameterSystem提供了对模型参数修改的能力,你可以获取到这个模型的所有参数,并对他进行修改。

在这之上就是方便你整活的各种辅助系统了,包括呼吸,眨眼,姿势,表情,动作以及物理效果。关于辅助系统的讲解我还是咕到下一篇,本章我就只聊聊怎么让一个模型显示出来

创建自定义内存管理对象

对应文件 l2dapp.h 和 l2dapp.cpp

这部分其实并没有好说的,直接照搬SDK的Demo代码就行。因为Live2D作为一个跨平台组件,需要考虑各个平台的差异。使用一个自定义的内存管理对象方便你灵活的分配内存。例如你可以为全局分配一个内存池,避免频繁的申请内存,或者你可以监控内存分配,优化程序。由于这部分属于比较工程上的内容,这里就先跳过,日后有缘再见

模型对象

对应文件 l2dmodel.h 和 l2dmodel.cpp

一个标准Live2D模型应该有下图所示的目录结构(ModelName为模型名字)Live2D 模型目录结构

我们需要首先加载的是ModelName.model3.json文件,这个文件里面包含了一个Live2D模型的资源文件的索引信息。我们将这个文件全部读取出来,使用Csm::CubismModelSettingJson加载

加载模型索引文件

加载好索引信息之后,我们再去找对应的资源文件就很容易了。整个资源文件加载流程我分为这几步加载模型

加载效果(Effect)

加载动作(Motion)

加载物理(Physics)

创建渲染器

加载贴图

本篇为了最简单渲染模型(好像说了几次了),只实现了1、5、6。那么加载模型的时候,流程其实和加载模型索引大同小异。加载模型

首先通过模型索引使用GetModelFileName方法,获取模型文件路径。值得注意的是,这个路径是相对json索引文件的路径,你需要拼接一下才能拿到完整的路径。

同样将文件读取到内存后使用父类的LoadModel方法加载内存。

然后为这个模型创建一个新的布局

创建渲染器直接调用父类CreateRenderer方法即可,但是在创建贴图的时候,你需要将一个png文件读取为OpenGL纹理,同时非常关键的一点,你要设置纹理采样方式

纹理采样方式

建议使用图中所示的采样配置,否则会出现图像有锯齿的问题。

创建好纹理后,将纹理索引绑定到贴图索引,即调用BindTexture方法即可。

绑定纹理

OpenGL渲染

对应文件l2drenderwidget.cpp

我这里直接使用了Qt的OpenGLWidget实际应用时可根据自己需要

首先需要使用glewInit初始化GLEW,然后配置

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

最后加载模型及其资源文件。!强烈建议在OpenGL初始化时加载模型,否则会出现OpenGL上下文不对导致模型显示有问题。

在每次渲染刷新中渲染刷新

注意调用glClear清屏。对于模型的更新需要调用模型的Update方法。在更新完模型之后,调用DrawModel方法绘制模型。

需要说明一下setMVPMatrixWithSize方法用于设置模型的位置,需要转换为OpenGL纹理坐标系。

live2dmesh渲染优先级_如何渲染Live2D模型相关推荐

  1. 5渲染判断_云渲染怎么收费,5大云渲染平台实测,您选对了吗?

    3DMAX云渲染平台都怎么收费?5大云渲染平台测试后才知道差距这么大,您用对了吗? 本次共计测试了3个镜头,为了让大家很直观地感受各个平台渲染时间和费用上的对比,我整理了个表格,供大家自行参考和判断. ...

  2. 5渲染判断_先渲染再对焦,KeyShot 深度通道在 Photoshop 中的对接

    事情的起因,是在我用华为 P40 Pro 手机的时候,发现华为拍照系统当中的先拍照后对焦功能实在强大,那我会想到这个东西能不能用在我们产品渲染当中呢? 仔细想一想这个东西,无非就是通过距离判断相机对焦 ...

  3. file_get_contents js没有渲染数据_浏览器渲染页面那些事

    浏览器 浏览器是一种软件,它可以从远程服务器(或本地磁盘)中加载文件并显示文件,它可以允许用户和它交互. 浏览器的核心是浏览器引擎.在不同的浏览器中,根据浏览器引擎的不同,它们显示页面的内容或者顺序会 ...

  4. Python笔记_64_Vue_M-V-VM思想_显示数据_常用指令_操作属性_绑定事件_操作样式_条件渲染指令_列表渲染指令

    文章目录 Vue vue.js的M-V-VM思想 快速使用 显示数据 常用指令 操作属性 绑定事件 操作样式 条件渲染指令 列表渲染指令 Vue vue.js是目前前端web开发最流行的工具库,由尤雨 ...

  5. live2dmesh渲染优先级_live2dsdk的opengl示例详解

    (第一次写,有错误恳请指正XD) (希望能帮助到感兴趣的小伙伴) (看客别看到这么多代码就想走!! 后面有生成示例:3) 先放张图介绍一下各个类的基本功能 首先进入程序入口 int main(int ...

  6. CR渲染器全景图如何渲染颜色通道_如何高效自学3D,鹅厂设计师分享他的经验...

    在这之前,我只会一些基本的3D知识,软件也只是会一点C4D,曾经也断断续续的学了蛮久,但始终不得要领,属于关掉教程就不会做的那种. 这是17年刚学3D时做的练习 通过真实项目,过程中不断发现问题再解决 ...

  7. 浏览器渲染机制面试_浏览器渲染原理

    本文目录结构 问题 浏览器渲染原理 渲染过程 1. 浏览器接收到 HTML ⽂件并转换为 DOM 树 当我们打开⼀个⽹⻚时,浏览器都会去请求对应的 HTML ⽂件.虽然平时我 们写代码时都会分为 JS ...

  8. opengl游戏引擎源码_跨平台渲染引擎之路:拨云见日

    前言 最近在工作中越来越多地接触到一些3D以及相比常见特性更酷炫的效果,因此萌发了想要自己从0开始打造一个渲染引擎的念头,一方面是为了更好地实现公司业务的需求,另一方面则是可以学到整个渲染流水线上的方 ...

  9. 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)

    客户端渲染换为服务器端渲染 关于服务器与客户端应用程序渲染的讨论很多. 虽然没有"一刀切"的解决方案,但我将尝试从不同的角度主张客户端(特别是AngularJS). 首先是建筑. ...

  10. 火狐浏览器title过长显示不全_浏览器渲染

    简述 浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎.渲染引擎在不同的浏览器中也不是都相同的.目前市面上常见的浏览器内核可以分为这四种:Trident(I ...

最新文章

  1. GATB=The Genome Analysis Toolbox with de-Bruijn graph 带有de-Bruijn图的基因组分析工具箱
  2. (0104)iOS开发之在Mac上用Charles给iPhone抓包
  3. 创新的缩略图展示javascript类库 - Kort.js
  4. crontab用法 时间配置_Linux指定的时间运行自定义命令的两种方式
  5. echarts图表实例
  6. JavaScript中字符串去掉特殊字符和转义字符
  7. 如何控制让PO的数量不超过PR数量
  8. PL/SQL 存储过程学习2 条件语句
  9. PyTorch GPU安装指南 (Ubuntu 16.04 anaconda cuda8.0 cuDNN6.0)
  10. html 模板配置,模板文件配置
  11. 2.js深入(以通俗易懂的语言解释JavaScript)
  12. 半导体物理学学习资源
  13. Python实现熵权法(正负指标)并计算综合评分—————附增完整代码和测试用例
  14. android 实现表格横向混动_凌派锐·混动:技术赋能下的越级表现
  15. 【渗透测试】常用工具总结
  16. 周末了,看,首富出门遛狗。
  17. SAP ABAP BOM 创建 CSAP_MAT_BOM_CREATE 多备选BOM
  18. An error occurred while attempting to sign 处理方法
  19. infor接口调用,okhttp不同版本使用
  20. Unity3D之鼠标的隐藏与显示

热门文章

  1. svn合并分支到主干
  2. 如何一键开通局域网共享
  3. 2022华为杯研究生数学建模竞赛F题思路解析
  4. switchHosts 介绍
  5. SwitchHost无法切换环境
  6. python2.7详细安装教程_python2.7安装图文教程
  7. 商业计划书-智能导盲仗
  8. 使用sklearn加载波士顿房价数据集
  9. android 华为 imei,华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei...
  10. Pillow 10行代码给营业执照模板写数据,批量生产