2017-02-19 2 views
0

Ich versuche den Punkt zu konvertieren von dem ich auf den Bildschirm klicke, um eine Strahlrichtung von wo ich bin zu bekommen Klicken. Irgendwann wird dies für eine Art Kreuzung verwendet werden. Die Richtung, die ich jetzt habe, scheint seltsame Ergebnisse zu produzieren, und ich bin mir nicht sicher warum.Wie bekomme ich die Strahlrichtung von wo ich in Weltkoordinaten auf den Bildschirm klicke (DX11, C++)

projectionMatrix = XMLoadFloat4x4(this->projectionMatrix); 
viewMatrix = XMLoadFloat4x4(this->viewMatrix); 

pointX = ((2.0f * (float)mouseX)/(float)screenWidth) - 1.0f; 
pointY = (((2.0f * (float)mouseY)/(float)screenHeight) - 1.0f) * -1.0f; 

pointX = pointX/XMVectorGetX(projectionMatrix.r[0]); 
pointY = pointY/XMVectorGetY(projectionMatrix.r[1]); 

inverseViewMatrix = XMMatrixInverse(nullptr, viewMatrix); 

direction = 
    XMVectorSet((pointX * XMVectorGetX(inverseViewMatrix.r[0])) + (pointY * XMVectorGetX(inverseViewMatrix.r[1])) + XMVectorGetX(inverseViewMatrix.r[2]), 
       (pointX * XMVectorGetY(inverseViewMatrix.r[0])) + (pointY * XMVectorGetY(inverseViewMatrix.r[1])) + XMVectorGetY(inverseViewMatrix.r[2]), 
       (pointX * XMVectorGetZ(inverseViewMatrix.r[0])) + (pointY * XMVectorGetZ(inverseViewMatrix.r[1])) + XMVectorGetZ(inverseViewMatrix.r[2]), 0.0f); 

Dies scheint in einem gewissen Winkel in Ordnung zu arbeiten, aber wenn es einen bestimmten Punkt erreicht, wird es Spinnen zu stoppen und die „unerwarteten“ Ergebnisse. Vielleicht ist das Problem mit dem Z-Wert, da dies die Richtung ist, der ich mich nicht stellen kann?

Im Videobeispiel lasse ich die Kamera in die Richtung schauen (dreht sich nur um die Y-Achse der Welt) und die Richtung basiert auf der Mausbewegung. Wie Sie sehen können, scheint es in einem Bereich gut zu funktionieren, aber sobald es einen bestimmten Punkt erreicht, beginnt es sich rückwärts zu bewegen und hört auf, der Maus zu folgen.

https://i.gyazo.com/c0e1cd6bc5c36a7a488ba81928061104.mp4

Wer weiß, was ist der Grund dafür?

Edit: Gelöst wurde das Problem meiner Kamera Rotation acos verwendet, die gab mir 0-180 Freiheitsgrad statt atan 0-360

Antwort

0

Das Problem war meine Kamera Rotation acos verwendet, die gab mir 0-180 Grad Freiheit anstelle von atan

Verwandte Themen