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.