Domanda

Sto cercando di più o meno Ricrea di Johnny Lee Wii testa monitoraggio app , ma utilizzando un toolkit realtà aumentata per il tracciamento e WPF per la grafica. Per fare questo, ho bisogno di creare una macchina fotografica prospettiva utilizzando i parametri sopra, sotto, a destra, e sinistra per creare il mio tronco di visualizzazione, invece di campo visivo e rapporto di aspetto (per chi ha familiarità con OpenGL, voglio usare l'equivalente WPF di glFrustum invece di gluPerspective)

Il problema è che queste opzioni non sembrano essere disponibile su Classe PerspectiveCamera di WPF. Probabilmente potrei creare la matrice di proiezione manualmente se dovessi usare e MatrixCamera, ma mi piacerebbe evitarlo. Qualcuno sa di un modo migliore per fare questo?

È stato utile?

Soluzione

Non ho mai fatto trovare un modo integrato per effettuare questa operazione, così ho scritto la mia. La matematica dietro di esso si possono trovare nella documentazione OpenGL glFrustum . Se qualcun altro mai eseguito in questo problema, questo dovrebbe funzionare per voi:

public Matrix3D CreateFrustumMatrix(double left, double right, double bottom, double top, double near, double far)
{
    var a = (right + left) / (right - left);
    var b = (top + bottom) / (top - bottom);
    var c = -(far + near) / (far - near);
    var d = -2 * far * near / (far - near);

    return new Matrix3D(
        2 * near / (right - left), 0,                         0, 0,
        0,                         2 * near / (top - bottom), 0, 0,
        a,                         b,                         c, -1,
        0,                         0,                         d, 0);
}

Basta impostare MatrixCamera.ProjectionMatrix per il valore di ritorno del metodo stesso, e sei a posto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top