Я пытаюсь повернуть камеру-обскуры в 3D-пространстве. Раньше я просматривал комнату. В качестве хорошей практики я сначала сделал математику и попытался запрограммировать математику в C++.Вращение камеры-обскуры в 3D
// Camera position
vec3 cameraPos(0, 0, -19);
// Rotate camera
float& yaw;
vec3 c1(cos(yaw), 0, sin(yaw));
vec3 c2(0, 1, 0);
vec3 c3(-sin(yaw), 0, cos(yaw));
glm::mat3 R(c1, c2, c3);
То, что я сделал, чтобы повернуть камеру так:
if (keystate[SDLK_LEFT])
{
//cameraPos.x -= translation;
if (yaw > 0)
{
yaw = 0.01;
}
cout << yaw << endl;
cameraPos = R * cameraPos;
cout << "LEFT" << endl;
}
if (keystate[SDLK_RIGHT])
{
//cameraPos.x += translation;
if (yaw > 0)
{
yaw = -0.01;
}
cout << yaw << endl;
cameraPos = R * cameraPos;
cout << "RIGHT" << endl;
}
умножал вращение матрицы R с вектором положения камеры. Теперь происходит то, что комната движется только налево, независимо от того, какую клавишу я нажимаю.
В учебнике я следую говорит:
Если камера вращается с помощью матрицы R, то векторы, представляющей правую (ось х), вниз (ось у) и вперед (Z-ось) направления ван быть извлекаться как:
vec3 right(R[0][0],R[0][1],R[0][2]); vec3 down(R[1][0],R[1][1],R[2][2]); vec3 right(R[2][0],R[2][1],R[2][2]);
для модели вращающейся камеры вы должны использовать эти направления как при перемещения камеры и когда вы разыгрываете лучи.
Я не понимаю, как я должен использовать приведенную выше информацию.
Любая помощь или рекомендации оценены.
Спасибо за ваш ответ. Что касается желтого выделенного раздела, вы понимаете, что это значит? – Lebowski
Говорят, что каждая строка матрицы вращения соответствует вектору направления (относительно того, что представляет собой базовый кадр).Таким образом, строка 1 «R» является «правильным» вектором направления и т. Д. Сравните с x-hat, y-hat и z-hat в общих физических контекстах. Я считаю, что второе «право» - это опечатка и предназначалось для того, чтобы сказать «вперед». – user2475059
Да, я тоже так считаю. Спасибо :) – Lebowski