Код: Выделить всё
auto [depthBytes, resolution] = sim.getVisionSensorDepth(CameraHandle,1);
int width = static_cast(resolution[0]);
int hight = static_cast(resolution[1]);
vector depth_in_float(width*hight);
memcpy(depth_in_float.data(),depthBytes.data(),width*hight*sizeof(float));
for (int i(0); i < depth_in_float.size(); ++i)
cout
[code]Return values
depth: the depth buffer. Use sim.unpackFloatTable to obtain an array of values
< /code>
Функция unpackfloattable < /code> ожидает < /p>
Данные: строка (значения между 0 и 255), который содержит упакованные
номера с плавающей точкой < /p>
< /blockquote>
, к сожалению, документация их api для CSt-let-le Date. Тем не менее, я могу посмотреть на источник их функции, который имеет эту реализацию. < /P>
std::tuple sim::getVisionSensorDepth(int64_t sensorHandle, std::optional options, std::optional pos, std::optional size)
{
bool _brk = false;
json _args(json_array_arg);
_args.push_back(sensorHandle);
if(options)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*options);
}
else _brk = true;
if(pos)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*pos);
}
else _brk = true;
if(size)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*size);
}
else _brk = true;
auto _ret = this->_client->call("sim.getVisionSensorDepth", _args);
return std::make_tuple(_ret[0].as(), _ret[1].as());
}
< /code>
К счастью, я обнаружил, что у них есть функция, которая распаковывает строку в номера с плавающей точкой, которая имеет эту реализацию < /p>
std::vector sim::unpackFloatTable(std::vector data, std::optional startFloatIndex, std::optional floatCount, std::optional additionalByteOffset)
{
bool _brk = false;
json _args(json_array_arg);
_args.push_back(bin(data));
if(startFloatIndex)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*startFloatIndex);
}
else _brk = true;
if(floatCount)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*floatCount);
}
else _brk = true;
if(additionalByteOffset)
{
if(_brk) throw std::runtime_error("no gaps allowed");
else _args.push_back(*additionalByteOffset);
}
else _brk = true;
auto _ret = this->_client->call("sim.unpackFloatTable", _args);
return _ret[0].as();
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -of-double