fix camera no a circle after rotation

test-headless
InkSoul 2024-04-27 17:13:59 +08:00
parent d67df39ef1
commit 2e2808962f
5 changed files with 24 additions and 20 deletions

View File

@ -49,7 +49,7 @@ private:
matrices.view = LookAt(position, lookAtPoint, up, false, true);
}
//viewPos = glm::vec4(position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f);
viewPos = glm::vec4(position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f);
updated = true;
};
@ -222,13 +222,13 @@ public:
glm::vec3 t = -R * from; // t = -R * from;
//R = glm::transpose(R);
/**/
glm::mat4 m = glm::mat4(
xAxis.x, xAxis.y, xAxis.z, t.x,
yAxis.x, yAxis.y, yAxis.z, t.y,
zAxis.x, zAxis.y, zAxis.z, t.z,
0, 0, 0, 1);
/**/
/*
//R = glm::transpose(R);
glm::mat4 m = glm::mat4(

View File

@ -50,14 +50,16 @@ void PlumageConfig::PlumageConfiguration::readConfigurationFromToml(std::string
settings.bottomCenter = glm::vec3(bottomCenter[0], -bottomCenter[1], -bottomCenter[2]);
settings.bottomNormal = glm::vec3(bottomNormal[0], -bottomNormal[1], -bottomNormal[2]);
settings.cameraFixation = glm::vec3(cameraFixation[0], -cameraFixation[1], -cameraFixation[2]);
std::vector<glm::vec3> cameraTrackToFixation;
auto cameraTracksAndAngleSize = std::min(cameraTracks.size(), cameraAngle.size());
settings.cameraTracks.resize(cameraTracksAndAngleSize);
settings.cameraAngle.resize(cameraTracksAndAngleSize);
cameraTrackToFixation.resize(cameraTracksAndAngleSize);
for (uint64_t i = 0; i < cameraTracksAndAngleSize; i++)
{
settings.cameraTracks[i] = glm::vec3(cameraTracks[i][0], -cameraTracks[i][1] , -cameraTracks[i][2]);
cameraTrackToFixation[i] = settings.cameraTracks[i] - settings.bottomCenter;
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]),
@ -78,20 +80,21 @@ void PlumageConfig::PlumageConfiguration::readConfigurationFromToml(std::string
settings.cameraFixation = cameraTracksRotationMatrix * glm::vec4(settings.cameraFixation, 1.0f);
settings.bottomCenter = cameraTracksRotationMatrix * glm::vec4(settings.bottomCenter, 1.0f);
glm::vec3 translate =glm::vec3(0.f,0.f,0.f) - settings.bottomCenter;
glm::vec3 translate =glm::vec3(0.0f,0.0f,0.0f) - settings.bottomCenter;
glm::mat4 trans = glm::mat4(1.0f);
trans = glm::translate(trans, translate);
settings.cameraFixation = trans * glm::vec4(settings.cameraFixation, 1.0f);
settings.bottomCenter = trans * glm::vec4(settings.bottomCenter, 1.0f);
for (uint64_t i = 0; i < cameraTracksAndAngleSize; i++)
{
settings.cameraTracks[i] = trans * glm::vec4(settings.cameraTracks[i], 1.0f);
settings.cameraTracks[i] = cameraTracksRotationMatrix * glm::vec4( settings.cameraTracks[i],1.0f) ;
settings.cameraTracks[i] = glm::vec3(settings.cameraTracks[i][0], -settings.cameraTracks[i][1], settings.cameraTracks[i][2]);
cameraTrackToFixation[i] = cameraTracksRotationMatrix * glm::vec4(cameraTrackToFixation[i], 1.0f);
cameraTrackToFixation[i] = trans * glm::vec4(cameraTrackToFixation[i], 1.0f);
cameraTrackToFixation[i] = glm::vec3(std::truncf(cameraTrackToFixation[i][0] * 10000) / 10000, -std::truncf(cameraTrackToFixation[i][1] * 10000)/10000, -std::truncf(cameraTrackToFixation[i][2] * 10000)/10000);
settings.cameraTracks[i] = settings.bottomCenter + cameraTrackToFixation[i] ;
settings.cameraAngle[i] = cameraTracksRotationMatrix * glm::mat4(settings.cameraAngle[i]) ;
}
//translate = settings.bottomCenter - ;
//trans = glm::translate(trans, translate);
trans = glm::translate(trans, translate);

View File

@ -45,7 +45,7 @@ namespace PlumageConfig
uint32_t height = 720;
bool multiSampling = false; // 多重采样
VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_4_BIT; // 多重采样倍率
bool rotateModel = true; // Ä£ÐÍ×ÔÐýת
bool rotateModel = false; // Ä£ÐÍ×ÔÐýת
float modelRotateSpeed = 2.0f; // 自旋转速度
uint32_t startFrameIndex = 1; // 图片序列开始帧
@ -90,7 +90,7 @@ namespace PlumageConfig
struct FilePath
{ //model path
std::string glTFModelFilePath = getAssetPath() + "models/classic_round_side_table.glb";
std::string glTFModelFilePath = getAssetPath() + "models/cube.gltf";
std::string modelVertShaderPath = getAssetPath() + "buster_drone/shaders/glsl/mesh.vert.spv";
std::string modelFragShaderPath = getAssetPath() + "buster_drone/shaders/glsl/mesh.frag.spv";
@ -144,7 +144,7 @@ namespace PlumageConfig
std::string hdr2ktxShFilePath = getAssetPath() + "script/hdr2ktxShFilePath.sh";
// 配置文件路径,命令行传入后保存在这
//std::string configFilePath = getAssetPath() + "config/guanzi.toml";
std::string configFilePath = getAssetPath() + "config/yukino_original_coord.toml";
std::string configFilePath = getAssetPath() + "config/yukino_traj1_matrix.toml";
} filePath;

View File

@ -3,7 +3,7 @@ width = 1080
height = 720
multiSampling = false
sampleCount = 4
rotateModel = true
rotateModel = false
modelRotateSpeed = 2.0
startFrameIndex = 1
endFrameIndex = 200

View File

@ -1532,17 +1532,18 @@ PlumageRender::PlumageRender()
float modelSize = std::max(models.scene.aabb[0][0], std::max(models.scene.aabb[1][1], models.scene.aabb[2][2]));
// Center and scale model
float scale = (1.0f / modelSize) * modelSize;
glm::vec3 translate = -glm::vec3(models.scene.aabb[3][0], models.scene.aabb[3][1], models.scene.aabb[3][2]);
translate += -0.5f * glm::vec3(models.scene.aabb[0][0], models.scene.aabb[1][1], models.scene.aabb[2][2]);
float scale = 0.75f;//(1.0f / modelSize) * modelSize/4;
glm::vec3 translate = glm::vec3(models.scene.aabb[3][0], models.scene.aabb[3][1], models.scene.aabb[3][2]);
//translate += - modelSize / 4 * glm::vec3(models.scene.aabb[0][0], models.scene.aabb[1][1], models.scene.aabb[2][2]);
//glm::vec3 translate = glm::vec3(0.f, 0.f, 0.f);
//camera.setPosition(glm::vec3(0, 0, -modelSize - 2));
translate = glm::vec3(-0.0f, -5.0f, -0.0f);
shaderDataScene.model = glm::mat4(1.0f);
shaderDataScene.model[0][0] = scale;
shaderDataScene.model[1][1] = scale;
shaderDataScene.model[2][2] = scale;
//shaderDataScene.model = glm::translate(shaderDataScene.model, translate);
shaderDataScene.model = glm::translate(shaderDataScene.model, translate);
//camera.setPosition(glm::vec3(0, 0, -modelSize - 2));
//glm::vec3 aabbMax = glm::vec3(models.scene.aabb[0][0], models.scene.aabb[1][1], models.scene.aabb[2][2]);
//glm::vec3 aabbMin = glm::vec3(models.scene.aabb[3][0], models.scene.aabb[3][1], models.scene.aabb[3][2]);
@ -1635,7 +1636,7 @@ PlumageRender::PlumageRender()
//camera.setPerspective(glm::radians(45.f), settings.width / settings.height, 1.f, 256.f);
camera.setProjectionMatrix(settings.fX,settings.fY,settings.cX,settings.cY,1.f, 256.f,settings.width,settings.height,false,true);
//camera.setPerspective(settings.fX, settings.fY, settings.cX, settings.cY, 0.1f, 100.0f);
camera.setLookAtPoint(settings.cameraFixation);
camera.setLookAtPoint(settings.bottomCenter);
//camera.setUp(glm::vec3(0.f,1.f,0.f));
camera.setUp(glm::vec3(0.f,1.f,0.f));
camera.rotationSpeed = 0.25f;