Я пытаюсь создать камеру качания лучей в DirectX11 с помощью XMVector3Unproject(). По моему мнению, я буду проходить в позиции (Vector3) пикселя на ближней плоскости и в отдельном вызове - соответствующую позицию на дальнем плане. Тогда я бы вычитал эти векторы, чтобы получить направление луча. Тогда происхождение будет непроектированной координатой на ближней плоскости. Моя проблема здесь вычисления координат луча будет принят в.Как рассчитать положение луча камеры для использования с XMVector3Unproject(), DirectX11?
Пример
// assuming screenHeight and screenWidth are the number of pixels.
const uint32_t screenHeight = 768;
const uint32_t screenWidth = 1024;
struct Ray
{
XMFLOAT3 origin;
XMFLOAT3 direction;
};
Ray rays[screenWidth * screenHeight];
for (uint32_t i = 0; i < screenHeight; ++i)
{
for (uint32_t j = 0; j < screenWidth; ++j)
{
// 1. ***calculate and store the current pixel position on the near plane***
// 2. ***calculate the corresponding point on the far plane***
// 3. ***pass both positions separately into XMVector3Unproject() (2 total calls to the function)***
// 4. ***store the returned vectors' difference into rays[i * screenWidth + j].direction***
// 5. ***store the near plane pixel position's returned vector into rays[i * screenWidth + j].origin***
}
}
Надеюсь, я правильно понять это. Любая помощь в определении происхождения луча или исправлений была бы весьма признательна.