У меня проблема с генерацией лучей, которую я не понимаю.Направление для моего луча вычислено неправильно.Я перенес этот код из DirectX 11 в Vulkan, где он работает нормально, поэтому я был удивлен, что не смог заставить его работать:
vec4 farPos = inverseViewProj * vec4(screenPos, 1, 1);
farPos /= farPos.w;
r.Origin = camPos.xyz;
r.Direction = normalize(farPos.xyz - camPos.xyz);
И все же этот код работает отлично:
vec4 nearPos = inverseViewProj * vec4(screenPos, 0, 1);
nearPos /= nearPos.w;
vec4 farPos = inverseViewProj * vec4(screenPos, 1, 1);
farPos /= farPos.w;
r.Origin = camPos.xyz;
r.Direction = normalize(farPos.xyz – nearPos.xyz);
[Правка] Матрица и положение камеры установлены следующим образом:
const glm::mat4 clip(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 1.0f);
projMatrix = clip * glm::perspectiveFov(FieldOfView, float(ViewWidth), float(ViewHeight), NearZ, FarZ);
viewMatrix = glm::inverse(glm::translate(glm::toMat4(Rotation), -Position));
buffer.inverseViewProjMatrix = glm::inverse(projMatrix * viewMatrix);
buffer.camPos = viewMatrix[3];
[Правка2] То, что я вижу на экране, будет правильным, если я начну с начала координат.Однако, если я, например, двигаюсь влево, это выглядит так, как будто я двигаюсь направоВсе мои лучи кажутся возмущенными.В некоторых случаях обтекание камеры выглядит так, как будто я двигаюсь вокруг другой точки пространства.Я предполагаю, что положение камеры не совпадает с особенностью моей матрицы перспективы, но я не могу понять, почему.
Я думаю, что я неправильно понимаю что-то базовое.Чего мне не хватает?