使用Lua导入.BVH运动数据/LUA表格,然后使用表格对.OBJ进行动画处理。
这是否可能,因为.BVH文件是文本驱动的,而.OBJ文件也是文本驱动的,我一直在研究这段代码,但似乎还是有些遗漏。
``` 将脚本导入到lua表中
--[[将.BVH(运动捕捉)文件解析为Lua表格式。
--]]
--有效的BVH变换令牌及它们--四元数序列等效物的列表。本地xform_tokens = {
}
Xrotation =“rx”,Yrotation =“ry”,Zrotation =“rz”,Xposition =“tx”,Yposition =“ty”,Zposition =“tz”
--主要功能
BVH2Table = function(bhvfilename)local bhvfile,linenumber,bvhtable,level_temp_info,line,rest,_ =0)
assert(io.open(bhvfilename)),0,{},{}
当时,读入文本文件的每一行使用repeat
linenumber = linenumber + 1 line = bhvfile:read(“*line”)--修剪行= line and string.gsub(string.gsub(line,“^ [\ t] *”,“”),“[ \ t \ n] * $”,“”)或nil--启用注释和while行
直到行或(行~ =“”且字符串.sub(line,1,1)~ =“#”)时,_,_,令牌= string.find(line或“”,“^(%u%l {}:]+)”)--其余部分的行,剥离_,_,rest = string.find(line或“”,“^ [%u%l {}:]+ [\ t](%a%d%s%c%p] *)”)
完
local function parse_error(err,...)
error(string.format(“%s:%d:%s”,bhvfilename,linenumber,string.format(err,unpack(arg))),
完
local function checktoken(ctoken)if ctoken ~ = token then
parse_error(“令牌%s预期,得到%s”,ctoken,token)bvhtable.root_segment = {}
完
end
local function read_joint_level(level)local level_temp_info = {rotation_seq = {},level = level} --存储动画帧解码时使用的信息表.insert(levels_temp_info,level_temp_info)级别旋转={} --每个动画帧一个
checktoken(“ {”)readline()while token ~ = “}”do
if token ==“OFFSET”then local ox,oy,oz
_,_,ox,oy,oz = string.find(rest,“[\ t] *( [ % - %+ $d] +)[\ t] +( [%-%+%d] +)[\ t] +( [ %-%+%d] +)“)
角度
完
table.insert(level_temp_info.rotation_seq,token)table.insert(level_temp_info.rotation_seq,0)
--“rx”,“ry”或“rz”-放置点
完
级别中的偏移量= vec4(ox,oy,oz)elseif token ==“CHANNELS”then
local _,e,channelcount = string.find(rest,“(【% d】+)[\ t] *”)for i = 1,channelcount do
当地chname-提取通道名称(例如“Xrotation”)_,e,chname = string.find(rest,“(%w +)[\ t] *”,e)当地令牌= xform_tokens [chname]或
parse_error(“未知通道类型%s”,chname或“(无)”)if string.sub(token,1,1)~ =“t”then - 忽略翻译令牌。
完
end elseif token ==“JOINT”or token ==“End”then
当地newlevel = {} level.segments = level.segments or {} - 确保我们有一个表格level.segments [(token ==“End”)and “EndSite”or rest] = newlevel - 新水平readline()read_joint_level(newlevel)
elseif token ~ =“}”then
parse_error(“非法/未知令牌'%s'”,token)readline()
end
--读取分层结构
readline()checktoken(“HIERARCHY”)readline()checktoken(“ROOT”)readline()read_joint_level(bvhtable.root_segment)readline()
- 读取帧(将它们插入层次结构的正确位置)
checktoken(“MOTION”)readline()
checktoken(“Frames:”)_,_,bvhtable.framecount = string.find(rest,“(【% d】+)”)readline()
checktoken(“Frame”)_,_,bvhtable.frametime = string.find(rest,“(【% d。】+)”)readline()
对于fr = 1,bvhtable.framecount do if token或not line then parse_error(“期待
原文链接 https://stackoverflow.com/questions/6132749
.obj
不支持动画,因此您无法将动画数据放入 .obj
文件中。
现在,如果您将 Lua 作为 3D 引擎的脚本语言,您可以加载 .bvh
,然后将这些动作应用于在 3D 引擎中加载的 .obj
模型,但这更多是关于您的 3D 引擎而不是关于 Lua 的问题。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
抱歉,但您的问题似乎是如何将3D动画文件应用于3D模型文件。
答案是您不需要这样做,它们只是不同的文件格式,您可能正在问错问题。