plumageRender/base/renderConfig.cpp

83 lines
3.8 KiB
C++
Raw Normal View History

2024-04-17 11:26:38 +08:00
#include "renderConfig.h"
2024-04-19 18:08:16 +08:00
void PlumageConfig::PlumageConfiguration::readConfigurationFromToml(std::string configFilePath,Settings& settings)
2024-04-17 11:26:38 +08:00
{
2024-04-18 18:26:07 +08:00
auto config = toml::parse(configFilePath);
auto& tomlSettings = toml::find(config, "settings");
settings.width = toml::find<uint32_t>(tomlSettings, "width");
settings.height = toml::find<uint32_t>(tomlSettings, "height");
settings.multiSampling = toml::find<bool>(tomlSettings, "multiSampling");
auto sampleCount = toml::find<uint32_t>(tomlSettings, "sampleCount");
settings.rotateModel = toml::find<bool>(tomlSettings, "rotateModel");
settings.modelRotateSpeed = toml::find<float>(tomlSettings, "modelRotateSpeed");
settings.startFrameIndex = toml::find<uint32_t>(tomlSettings, "startFrameIndex");
settings.endFrameIndex = toml::find<uint32_t>(tomlSettings, "endFrameIndex");
settings.videoFrameRate = toml::find<uint32_t>(tomlSettings, "videoFrameRate");
2024-04-19 18:08:16 +08:00
auto& camera = toml::find(tomlSettings, "camera");
2024-04-22 18:19:55 +08:00
settings.calibrationWidth = toml::find<int>(camera, "cam_width");
settings.calibrationHeight = toml::find<int>(camera, "cam_height");
std::string fX = toml::find<std::string>(camera, "fx");
std::string fY = toml::find<std::string>(camera, "fy");
2024-04-19 18:08:16 +08:00
std::string cX = toml::find<std::string>(camera, "cX");
std::string cY = toml::find<std::string>(camera, "cY");
std::vector<float> bottomCenter = toml::find<std::vector<float>>(camera, "bottomCenter");
std::vector<float> bottomNormal = toml::find<std::vector<float>>(camera, "bottomNormal");
2024-04-23 16:56:42 +08:00
std::vector<float> cameraFixation = toml::find<std::vector<float>>(camera, "center");
2024-04-19 18:08:16 +08:00
std::vector<std::vector<float>> cameraTracks = toml::find<std::vector<std::vector<float>>>(camera, "cameraTracks");
std::vector<std::vector<std::vector<float>>> cameraAngle = toml::find<std::vector<std::vector<std::vector<float>>>>(camera, "cameraAngle");
2024-04-23 16:56:42 +08:00
2024-04-19 18:08:16 +08:00
auto& debug = toml::find(tomlSettings, "debug");
settings.validation = toml::find<bool>(debug, "validation");
settings.vsync = toml::find<bool>(debug, "vsync");
settings.headless = toml::find<bool>(debug, "headless");
settings.outputPNGimage = toml::find<bool>(debug, "outputPNGimage");
settings.debugMode = toml::find<bool>(debug, "debugMode");
//settings.cleanUpImageSequece = toml::find_or<bool>(debug, "cleanUpImageSequece");
/*
2024-04-23 16:56:42 +08:00
conversion: type and coordinate system(rotation had been converted)
2024-04-19 18:08:16 +08:00
*/
2024-04-23 16:56:42 +08:00
2024-04-19 18:08:16 +08:00
size_t sz;
2024-04-22 18:19:55 +08:00
settings.fX = std::stof(fX, &sz);
settings.fY = std::stof(fY, &sz);
2024-04-19 18:08:16 +08:00
settings.cX = std::stof(cX, &sz);
settings.cY = std::stof(cY, &sz);
settings.bottomCenter = glm::vec3(bottomCenter[0], -bottomCenter[1], -bottomCenter[2]);
settings.bottomNormal = glm::vec3(bottomNormal[0], -bottomNormal[1], -bottomNormal[2]);
2024-04-23 16:56:42 +08:00
settings.cameraFixation = glm::vec3(cameraFixation[0], -cameraFixation[1], -cameraFixation[2]);
2024-04-19 18:08:16 +08:00
auto cameraTracksAndAngleSize = std::min(cameraTracks.size(), cameraAngle.size());
settings.cameraTracks.resize(cameraTracksAndAngleSize);
settings.cameraAngle.resize(cameraTracksAndAngleSize);
2024-04-18 18:26:07 +08:00
2024-04-19 18:08:16 +08:00
for (uint64_t i = 0; i < cameraTracksAndAngleSize; i++)
{
settings.cameraTracks[i] = glm::vec3(cameraTracks[i][0], -cameraTracks[i][1], -cameraTracks[i][2]);
2024-04-19 18:08:16 +08:00
settings.cameraAngle[i] = glm::mat3(glm::vec3(cameraAngle[i][0][0], cameraAngle[i][0][1], cameraAngle[i][0][2]),
glm::vec3(cameraAngle[i][1][0], cameraAngle[i][1][1], cameraAngle[i][1][2]),
glm::vec3(cameraAngle[i][2][0], cameraAngle[i][2][1], cameraAngle[i][2][2]));
}
2024-04-22 18:19:55 +08:00
float ratioX = settings.width / settings.calibrationWidth;
float ratioY = settings.height / settings.calibrationWidth;
settings.fX = settings.fX * ratioX;
settings.fY = settings.fY * ratioY;
settings.cX = settings.cX * ratioX;
settings.cY = settings.cY * ratioY;
2024-04-17 11:26:38 +08:00
}
PlumageConfig::PlumageConfiguration::PlumageConfiguration()
{
2024-04-19 18:08:16 +08:00
readConfigurationFromToml(filePath.configFilePath, settings);
2024-04-17 11:26:38 +08:00
}
PlumageConfig::PlumageConfiguration::~PlumageConfiguration()
{
}