Libgdx 导入blender 3D动画

2023-10-30

导入blender3D模型可以看上篇libgdx导入blender模型

本篇3D动画在上篇的基础上。

具体参考官网 3D 动画和蒙皮
blender动画参考 八个案例教程带你从0到1入门blender【已完结】

打开上次的blender的,选则物体属性
在这里插入图片描述
点击位置和旋转x,y,z后面的小点,确定初始x,y,z位置,和初始角度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改数值,并点击锁后面的方块
在这里插入图片描述
点击播放,查看动画
在这里插入图片描述
导出fbx,与上篇导出模型一致。导出时需要选择自定义属性
在这里插入图片描述
在这里插入图片描述

转换为g3dj,这里看不明白的去看我上篇,不会blender的建模的去看视频教程
上篇libgdx导入blender模型
blender动画参考 八个案例教程带你从0到1入门blender【已完结】
在这里插入图片描述

项目中使用,将导出的cube.g3dj放入项目assets/data下

package top.wuliaodebaozi2.blockgame.blockgameinternal;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.loader.G3dModelLoader;
import com.badlogic.gdx.graphics.g3d.utils.AnimationController;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.utils.JsonReader;

/**
 * Example program that imports "myModel.g3dj" from the assets folder and renders it onto the screen.
 */
public class ImportG3DJ implements ApplicationListener {
    private Environment environment;
    private PerspectiveCamera camera;
    private CameraInputController cameraController;
    private ModelBatch modelBatch;
    private Model model;
    private ModelInstance instance;

    private AnimationController controller;

    @Override
    public void create() {
        // Create an environment so we have some lighting
        environment = new Environment();
        environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
        environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

        modelBatch = new ModelBatch();

        // Create a perspective camera with some sensible defaults
        camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        camera.position.set(10f, 10f, 10f);
        camera.lookAt(0, 0, 0);
        camera.near = 1f;
        camera.far = 300f;
        camera.update();

        // Import and instantiate our model (called "myModel.g3dj")
        ModelBuilder modelBuilder = new ModelBuilder();
        model = new G3dModelLoader(new JsonReader()).loadModel(Gdx.files.internal("data/cube.g3dj"));
        instance = new ModelInstance(model);
        controller = new AnimationController(instance);
        controller.setAnimation("Cube|CubeAction",-1);

        cameraController = new CameraInputController(camera);
        Gdx.input.setInputProcessor(cameraController);
    }

    @Override
    public void render() {
        cameraController.update();
        controller.update(Gdx.graphics.getDeltaTime());
        // Clear the stuff that is left over from the previous render cycle
        Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        // Let our ModelBatch take care of efficient rendering of our ModelInstance
        modelBatch.begin(camera);
        modelBatch.render(instance, environment);
        modelBatch.end();
    }

    @Override
    public void dispose() {
        modelBatch.dispose();
        model.dispose();
    }

    @Override
    public void resize(int width, int height) { }

    @Override
    public void pause() { }

    @Override
    public void resume() { }
}

这里主要与上篇导入模型的代码区别在于,增加了

ModelInstance instance;
AnimationController controller;
public void create() {
    ...
    instance = new ModelInstance(model);
    controller = new AnimationController(instance);
    controller.setAnimation("Cube|CubeAction",-1);
}
public void render() {
    ...
    controller.update(Gdx.graphics.getDeltaTime());
    ...
}

代码中controller.setAnimation(“Cube|CubeAction”,-1); 动画的名字
用文本方式打开导出的cube.g3dj 可以看到"animations"数据块,看到id,就是动画的名字
在这里插入图片描述

效果:
https://live.csdn.net/v/280148
请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Libgdx 导入blender 3D动画 的相关文章

  • 将数据从服务传递到活动

    我有自行运行的服务 服务自动启动 我有活动 在此 Activity 按钮中启动该方法DoIt Button setOnClickListener new OnClickListener public void onClick View v
  • Android-如何将 android.net.Uri 对象转换为 java.net.URI 对象?

    我正在尝试获得一个FileInputStream用户从图片库中选择的图像上的对象 这是安卓URI由返回android provider MediaStore Images Media INTERNAL CONTENT URI content
  • 为什么反射会减慢Android手机的速度

    我多次读到反射会降低手机性能 这有多真实 例如 在我的例子中 我从 Web 服务获取一些参数 这些参数与我在 Android 应用程序中的类的参数同名 所以我只是使用java字段和反射设置这些参数的值 它似乎并没有降低性能 有人可以向我解释
  • 覆盖 Android 中的电源按钮

    我正在开发一个应用程序 其中我需要在按下电源按钮时执行一个操作 但不幸的是我无法处理按下电源按钮时的操作 我尝试使用 onKeyDown 和dispatchKeyEvent 方法 但似乎没有任何效果 任何人都可以建议我解决这个问题的任何其他
  • Android 全屏对话框确认和拒绝操作

    材料设计中的全屏对话框应该在操作栏 工具栏上有确认和拒绝操作 我的问题是 我该怎么做 显示对话框 getFragmentManager beginTransaction add R id container new MyDialogFrag
  • ADB TCPIP 连接问题

    我有两台 Galaxy S3 其中一个已扎根 另一个则未扎根 因此 当我尝试通过本地网络连接它们时 计算机可以看到已root的计算机 但是正常的就卡在tcpip这一步了 所以 我写 adb tcpip 5555 It says restar
  • 如何禁用操作栏上“向上”按钮的翻转?

    背景 我做了一个 应用程序管理器 https play google com store apps details id com lb app manager 替代应用程序 我希望添加 RTL 从右到左 语言的翻译 因为我知道在某些 And
  • Android 上的 MIDI:Java 和/或 AIR 库

    一段时间以来 我一直在考虑在 iPad 上 重新 构建一个应用程序 其中我将使用 Objective C 和DSMI http dsmi tobw net 将 MIDI 信号发送到主机 这还不错 我的意思是 除了实际编写应用程序之外 现在我
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 在运行时更改用作背景的 Drawable xml 内的形状纯色

    我有一个 Drawable xml 文件 background xml
  • Android 中的库可以有自己的意图过滤器吗?

    我想开发一个可以包含在其他 Android 应用程序中的库来拦截某些类型的意图 是否可以 我创建了一个库和一个测试项目 两者都有自己的AndroidManifest xml文件 在库的清单中 我为操作 TEST 定义了一个意图过滤器 但是
  • 哪个视图最亮?

    在Android中 哪个是轻量级视图 例如 View Textview Edittext 等 在某些情况下 我们需要使用视图来填充区域而不向用户显示视图 同时屏幕加载速度应该很快 您可以使用空间 android widget Space S
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • Android MulticastSocket.joinGroup 不会触发发送 IGMP 消息

    Code MulticastSocket s new MulticastSocket InetAddress addr InetAddress getByName 230 230 230 1 s joinGroup addr 在 Ubunt
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • LifeCycleAware Fragment 中的片段生命周期事件

    我有一个生命周期感知片段和一个LifecycleObserver class public class MyFragment extends Fragment Override public void onCreate Nullable B
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • 2021-05-01

    def print topic texts n topics n words 输出主题模型结果 param n topics LDA主题数量 param n words 主题的词范围 数量 return 输出公共主题 单日主题 准备语料库
  • python中的类与对象

    1 类和对象的关系 类就相当于 lt 模板 gt 或者 lt 模具 gt 对象就相当于 lt 产品 gt 得有了类 我们才能制造各种对象 就像我们有了模具 才能生产各种产品一样 Python中 万事万物都可以是对象 类 这种模板层级的本身也
  • linux入门---如何实现用户切换

    目录标题 基本用户认识 用户的切换 su su exit su 用户名 sudo 基本用户认识 在linux系统中将用户分为两个大类一个是root用户一个是普通用户 root用户是linux操作系统的超级管理员 相当于古代的皇帝不会受到任何
  • spring 事务总结

    参考视频 https www bilibili com video BV1aC4y1p7bF p 5 参考文档 https www cnblogs com myitnews p 12364455 html autoid 4 0 0 事务开启
  • 电源防反接电路设计

    在直流电源系统中 电源的输入端 为了防止电源正负极接反 通常会在输入端对电源进行防反接保护 防反接保护的方法有很多种 今天就来介绍一下 二极管防反接 利用二极管的单向导通特点实现防反接 这种方式是最简单的防反接方法 成本也低 但是缺点也很明
  • 机器学习概述

    一 定义 机器学习是一门从数据中研究算法的科学学科 机器学习直白来讲 是根据已有的数据 进行算法选择 并基于算法和数据构建模型 最终对未来进行预测 通过数据训练出一个模型 gt 预测未知属性 理性认识 输入 x X 属性值 输出 y Y 目
  • string篇

    目录 构造函数原型 赋值重载函数 assign 拼接函数原型 append 查找和替换函数原型 find replace 字符串比较函数 compare 字符存取 at 插入和删除字符串 insert erase 获取子串 substr s
  • Swift 使用CocoaPods 导入第三方网络库——Alamofire

    1 在已经安装了CocoaPods的前提下 cd进入项目所在目录 创建Podfile文件 touch Podfile 2 打开pod file文件 open e Podfile 3 在打开的Podfile文本编辑器里输入 source ht
  • 【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据

    springboot篇章整体栏目 一 springboot整合swagger 超详细 二 springboot整合swagger 自定义 超详细 三 springboot整合token 超详细 四 springboot整合mybatis p
  • 基于Java+SpringBoot+Vue+Uniapp前后端分离疫情酒店管控系统设计与实现(有需求文档、演示视频)

    博主介绍 全网粉丝3W 全栈开发工程师 从事多年软件开发 在大厂呆过 持有软件中级 六级等证书 可提供微服务项目搭建与毕业项目实战 博主也曾写过优秀论文 查重率极低 在这方面有丰富的经验 博主作品 Java项目案例 主要基于SpringBo
  • GPS监控经济效益

    一 贵公司车辆使用过程中 是否有一些困惑 1 车辆去向不明 行驶路线无法掌控 车辆离开就好像失控一样 2 车辆利用率低 一天的事情两天做 真正的 早出晚归 3 车辆空载率高 由于货主和物流企业之间信息交流不畅 或者公司调度因为缺乏有效的实时
  • python 金融时间序列分析_利用动态深度学习预测金融时间序列基于Python

    作者 Jeremy Curuksu Forecasting the evolution of events over time is essential to many applications such as option pricing
  • 【深度学习】【NLP】NLP课件整理 第四章:RNN,LSTM,GRU,注意力机制,Attention

    文档 4 1 认识RNN模型 note 了解什么是RNN模型 了解RNN模型的作用 了解RNN模型的分类 文档 4 2 传统RNN模型 note 了解传统RNN的内部结构及计算公式 掌握Pytorch中传统RNN工具的使用 了解传统RNN的
  • hadoop安装

    hadoop思想 分而治之 并行计算 计算向数据移动 数据本地化读取 模块 common 支持hadoop其他模块的公共工具 hdsf 分布式存储 相比于其他分布式文件系统设计思想是为了做计算使用 MapReduce 分布式计算 yarn
  • 数字孪生模型构建理论及应用

    源自 计算机集成制造系统 作者 陶飞 张贺 戚庆林 徐 俊 孙铮 胡天亮 刘晓军 刘庭煜 关俊涛 陈畅宇 孟凡伟 张辰源 李志远 魏永利 朱铭浩 肖斌 摘 要 数字孪生作为实现数字化转型和促进智能化升级的重要使能途径 一直备受各行各业关注
  • 模拟器件

    模拟部分RF也有采用cmos工艺的 就是堆一些二极管 三极管做一个设备 感觉和大学接触的模拟电路很类似 RF现在工艺和asic数字差不多了 也22nm了 我一直以为RF使用GaAs 和数字部分不同 哈哈哈 大约几千个器件堆个模拟器件出来 好
  • 【机器学习】为何要归一化和归一化,标准化的处理方法

    为何要归一化 如何归一化和标准化 为何要归一化 提升模型的收敛速度 提升模型的精度 总结 如何归一化和标准化 min max 0 1 标准化 z score 标准差 标准化 nonlinearity 非线性 归一化 为何要归一化 提升模型的
  • 生产排程系统_案例:PCBA应用易普优APS实现高级计划排程

    一 项目介绍 1 生产计划现状 某PCBA企业 以下简称A企业 的产品生产是典型的多品种 小批量 多变化的生产模式 其中产品种类有1000多种 主流的200多种 每个月数百个生产订单 分解到工序以后的工单达数千个 该企业的计划采用了计划部
  • 【OpenGL】笔记十九、深度测试

    1 流程 在前面的教程中 我们有简略介绍过深度测试 它的存在帮助我们最终渲染的画面不会存在那些本应被遮挡住了的图像 其实若深究其中的原理的话 倒也没多复杂 就是每次渲染一个图形时测测当前这个要渲染的像素是否是目前离屏幕最近的 若是 就说明没
  • Libgdx 导入blender 3D动画

    导入blender3D模型可以看上篇libgdx导入blender模型 本篇3D动画在上篇的基础上 具体参考官网 3D 动画和蒙皮 blender动画参考 八个案例教程带你从0到1入门blender 已完结 打开上次的blender的 选则