2012-03-30 8 views
0

Wenn Sie einen gegebenen Scheitelpunkt haben, wie können Sie feststellen, ob dieser Scheitelpunkt links oder rechts (oder möglicherweise direkt in einer Linie) mit der Kamera liegt? Alle Informationen, die ich hier finde, zeigen, wie man es in 2D macht, aber ich brauche 3D.Bestimmen, ob sich ein Scheitelpunkt links oder rechts von der Kamera befindet

Wenn ich den Lookvektor der Kamera an den Standort der Kamera anschließe, habe ich den Strahl, den ich brauche. Aber der up-Vektor muss auch in die Gleichung geworfen werden, so scheint es ein wenig schwierig.

Ich denke, ich muss eine Transformation finden, die den up-Vektor = (0, 1, 0) und den Look-Vektor = (0, 0, 1) macht und dann diese Transformation auf den Scheitelpunkt anwenden. Dann können Sie einfach sagen, ob die x-Koordinate der Vertikalen kleiner als die der Kamera ist, dann ist sie links davon, sonst ist sie rechts.

Antwort

0

Es ist so einfach wie das Multiplizieren des Vektors mit der View-Projection-Matrix. Hier ist, was es läuft darauf hinaus, obwohl, so dass Sie nicht eine vollständige Matrix-Multiplikation zu tun haben (nur einen Abschnitt der resultierenden Matrix überprüfen, müssen zu sehen, welche Seite des Bildschirms der Scheitelpunkt eingeschaltet ist)

private bool left(Vector3 v) 
    { 
     if (viewProjection.M11 * v.X + viewProjection.M21 * v.Y + viewProjection.M31 * v.Z + viewProjection.M41 < 0) 
      return true; 
     return false; 
    } 

viewProjection ist offensichtlich nur die View-Matrix * Projektionsmatrix