应对osg导入模型初始朝向不一致导致多模型运动动画计算姿态出错问题

本文介绍了在osg中遇到的模型导入后初始朝向不一致导致运动动画计算错误的问题。解决方案是通过分析模型名称末尾的标识来判断并调整模型的坐标轴,确保模型正向仅在xoy平面,z轴保持偏航不变。文中详细讨论了两种实现方法,并提出了命名规范以辅助姿态控制。
摘要由CSDN通过智能技术生成

1.问题

从3DMax中制作完成的模型,导出后的姿态各不相同,比如osg中自带的 .osg 格式模型,模型翻滚轴为x轴,俯仰轴为y轴,偏航轴为z轴。实际在osgEarth上使用的时候,如令模型初始方向为向北,即设置y轴为翻滚轴、x为俯仰轴、z轴为偏航轴。而系统交付使用的时候,使用方导入的模型坐标轴不一定按上面的来。

2.解决思路及控制要求

因此需要在对模型姿态进行控制与调整。
思路:通过对名字末尾的字符串进行判断,判断出模型当前轴向信息,然后进行调整。
要求:让模型制作方控制模型的正向仅在xoy平面,z轴控制偏航不变。并且使用方在命名模型的时候,在模型的名字最后二位修改为当前模型头部朝向,如东“_E"、西“_W"、南“_S"、北“_N",例如一个机头朝向西边的飞机模型 “plane.fbx”,则将名字命名为 “plane_W.fbx”。

3.实现方法

对文件名后两位进行检测,这里有两种方法,第一种为自己写的很low,第二种为经过高手指点后改进的版本。

3.1 很捞的版本(对名字字符串后向前遍历,碰到第一个‘ . ’后截取‘ . ’符号前两位的字符串,有漏洞



//---------------------------------------------------------------------------------------------------------------------------------------------------
//  说明:根据模型的名字字符串的最后两位判断模型朝向
//  日期:2020-12-7
//  作者:俺写的很捞的版本
//---------------------------------------------------------------------------------------------------------------------------------------------------
int determineModelToward(const QString modelFn)
{
   
    //用来保存截取的字符串
    QString temp;
    //用于返回的标识方向
    int toWard;

    //获取标识方向的尾标
    if(!(modelFn == NULL))
    {
   
        for(int i = (modelFn.size() -1); i >= 0; i--)
        {
   
            //取点号 '.'前面两位
            if(modelFn[i] == '.')
            {
   
                temp = modelFn.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值