请求 RflySim3D 场景中的物体数据。该函数类似RflyReqVehicleData函数,它也会回传三维场景中物体的一些数据。但它一次只回传一个指定目标的数据。
参数 | 解释 |
---|---|
opFlag | 操作标志,用于指定返回的数据类型 |
objName | 物体名称或相机 ID,用于指定要获取数据的目标物体或相机。对于相机数据,可以指定相机的 ID。对于物体数据,可以指定物体的名称 |
colorStr | 颜色字符串,可选参数,用于指定数据的颜色 |
opFlag | 说明 |
---|---|
0 | 返回指定 ID 的相机(Camera)数据。 |
1 | 返回指定 ID 的飞机(Copter)数据。 |
2 | 返回指定名称的物体(Object)数据。 |
20 | 清除所有相机。 |
21 | 清除所有飞机。 |
22 | 清除所有物体。 |
23 | 清除所有飞机和物体。 |
24 | 清除所有相机、物体和飞机。 |
10 | 删除一个相机。 |
11 | 删除一个飞机。 |
12 | 删除一个物体。 |
当 opFlag 为 0 时,该函数会返回指定 ID(objName=seqID)的用于捕获图像的相机数据。相机数据结构如下所示:
struct CameraData {
int checksum = 0; // 校验和,常数 1234567891
int SeqID; // 相机序号
int TypeID; // 相机类型
int DataHeight; // 图像像素高度
int DataWidth; // 图像像素宽度
float CameraFOV; // 相机视场角
float PosUE[3]; // 相机的中心位置
float angEuler[3]; // 相机的欧拉角
double timestmp; // 时间戳
};
当 opFlag 为 1 时,该函数会返回指定 ID 的飞机(objName=CopterID)的数据。飞机数据结构如下所示
struct CoptReqData {
int checksum = 0; // 校验和,常数 1234567891
int CopterID; // 飞机 ID
float PosUE[3]; // 飞机的中心位置(人为三维建模时指定,姿态坐标轴,不一定在几何中心)
float angEuler[3]; // 飞机的欧拉角
float boxOrigin[3]; // 物体几何中心坐标
float BoxExtent[3]; // 物体外框长宽高的一半
double timestmp; // 时间戳
};
当 opFlag 为 2 时,该函数会返回指定 ID(objName= seqID/ ObjName[32])的物体的数据。物体数据结构如下所示:
struct ObjReqData {
int checksum = 0; // 校验和,常数 1234567891
int seqID = 0;
float PosUE[3]; // 物体的中心位置(人为三维建模时指定,姿态坐标轴,不一定在几何中心)
float angEuler[3]; // 物体的欧拉角
float boxOrigin[3]; // 物体几何中心坐标
float BoxExtent[3]; // 物体外框长宽高的一半
double timestmp; // 时间戳
char ObjName[32] = { 0 }; // 碰物体的名字
};
操作示例
当opFlag==0时,它可以根据请求创建一个相机用于捕获图像,而相机的数据可以通过该函数来获得:
RflyReqObjData 0 0 FFFFFF
当opFlag==1时,打开RflySim3D,鼠标双击地面+按下字母O+数字3,创建一个ID飞机(ID默认为1000),输入命令
RflyReqObjData 1 1000 FFFFFF
当opFlag==2时,在RflySim3D中,并不是所有物体都是Copter类的对象(例如地形、障碍、建筑等),而此接口可以用于获取这些非Copter的物体的信息。打开RflySim3D,双击地面,我们可以看到鼠标击中地面后,屏幕上输出了一些信息,其中第一个单词表示击中物体的名字,也就是说“地形的名字为Landscape_1”
然后我们使用命令
RflyReqObjData 2 Landscape_1 FFFFFF
表示我们想知道名为“Landscape_1”的对象的信息。