Ich versuche, eine Ray-Casting-Kamera in DirectX11 mit XMVector3Unproject() zu erstellen. Nach meinem Verständnis werde ich die (Vektor3) Position des Pixels auf der nahen Ebene und in einem separaten Aufruf eine entsprechende Position auf der fernen Ebene übergeben. Dann würde ich diese Vektoren subtrahieren, um die Richtung des Strahls zu erhalten. Der Ursprung wäre dann die Unprojected-Koordinate auf der nahen Ebene. Mein Problem hier ist der Ursprung des Strahls Berechnung in weitergegeben werden.Wie berechnet man die Position des Kamera-Strahls für die Verwendung mit XMVector3Unproject(), DirectX11?
Beispiel
// 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***
}
}
Hoffentlich ich das richtig bin zu verstehen. Jede Hilfe bei der Bestimmung der Strahlenursprünge oder Korrekturen würde sehr geschätzt werden.