live2dmesh渲染优先级_如何渲染Live2D模型
上一篇如何引入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模型相关推荐
- 5渲染判断_云渲染怎么收费,5大云渲染平台实测,您选对了吗?
3DMAX云渲染平台都怎么收费?5大云渲染平台测试后才知道差距这么大,您用对了吗? 本次共计测试了3个镜头,为了让大家很直观地感受各个平台渲染时间和费用上的对比,我整理了个表格,供大家自行参考和判断. ...
- 5渲染判断_先渲染再对焦,KeyShot 深度通道在 Photoshop 中的对接
事情的起因,是在我用华为 P40 Pro 手机的时候,发现华为拍照系统当中的先拍照后对焦功能实在强大,那我会想到这个东西能不能用在我们产品渲染当中呢? 仔细想一想这个东西,无非就是通过距离判断相机对焦 ...
- file_get_contents js没有渲染数据_浏览器渲染页面那些事
浏览器 浏览器是一种软件,它可以从远程服务器(或本地磁盘)中加载文件并显示文件,它可以允许用户和它交互. 浏览器的核心是浏览器引擎.在不同的浏览器中,根据浏览器引擎的不同,它们显示页面的内容或者顺序会 ...
- Python笔记_64_Vue_M-V-VM思想_显示数据_常用指令_操作属性_绑定事件_操作样式_条件渲染指令_列表渲染指令
文章目录 Vue vue.js的M-V-VM思想 快速使用 显示数据 常用指令 操作属性 绑定事件 操作样式 条件渲染指令 列表渲染指令 Vue vue.js是目前前端web开发最流行的工具库,由尤雨 ...
- live2dmesh渲染优先级_live2dsdk的opengl示例详解
(第一次写,有错误恳请指正XD) (希望能帮助到感兴趣的小伙伴) (看客别看到这么多代码就想走!! 后面有生成示例:3) 先放张图介绍一下各个类的基本功能 首先进入程序入口 int main(int ...
- CR渲染器全景图如何渲染颜色通道_如何高效自学3D,鹅厂设计师分享他的经验...
在这之前,我只会一些基本的3D知识,软件也只是会一点C4D,曾经也断断续续的学了蛮久,但始终不得要领,属于关掉教程就不会做的那种. 这是17年刚学3D时做的练习 通过真实项目,过程中不断发现问题再解决 ...
- 浏览器渲染机制面试_浏览器渲染原理
本文目录结构 问题 浏览器渲染原理 渲染过程 1. 浏览器接收到 HTML ⽂件并转换为 DOM 树 当我们打开⼀个⽹⻚时,浏览器都会去请求对应的 HTML ⽂件.虽然平时我 们写代码时都会分为 JS ...
- opengl游戏引擎源码_跨平台渲染引擎之路:拨云见日
前言 最近在工作中越来越多地接触到一些3D以及相比常见特性更酷炫的效果,因此萌发了想要自己从0开始打造一个渲染引擎的念头,一方面是为了更好地实现公司业务的需求,另一方面则是可以学到整个渲染流水线上的方 ...
- 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)
客户端渲染换为服务器端渲染 关于服务器与客户端应用程序渲染的讨论很多. 虽然没有"一刀切"的解决方案,但我将尝试从不同的角度主张客户端(特别是AngularJS). 首先是建筑. ...
- 火狐浏览器title过长显示不全_浏览器渲染
简述 浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎.渲染引擎在不同的浏览器中也不是都相同的.目前市面上常见的浏览器内核可以分为这四种:Trident(I ...
最新文章
- GATB=The Genome Analysis Toolbox with de-Bruijn graph 带有de-Bruijn图的基因组分析工具箱
- (0104)iOS开发之在Mac上用Charles给iPhone抓包
- 创新的缩略图展示javascript类库 - Kort.js
- crontab用法 时间配置_Linux指定的时间运行自定义命令的两种方式
- echarts图表实例
- JavaScript中字符串去掉特殊字符和转义字符
- 如何控制让PO的数量不超过PR数量
- PL/SQL 存储过程学习2 条件语句
- PyTorch GPU安装指南 (Ubuntu 16.04 anaconda cuda8.0 cuDNN6.0)
- html 模板配置,模板文件配置
- 2.js深入(以通俗易懂的语言解释JavaScript)
- 半导体物理学学习资源
- Python实现熵权法(正负指标)并计算综合评分—————附增完整代码和测试用例
- android 实现表格横向混动_凌派锐·混动:技术赋能下的越级表现
- 【渗透测试】常用工具总结
- 周末了,看,首富出门遛狗。
- SAP ABAP BOM 创建 CSAP_MAT_BOM_CREATE 多备选BOM
- An error occurred while attempting to sign 处理方法
- infor接口调用,okhttp不同版本使用
- Unity3D之鼠标的隐藏与显示