簡體   English   中英

從3D平滑過渡到2D

[英]Smooth transition from 3D to 2D

我正在編寫自己的3D引擎,並使用此矩陣進行透視。 (這是一個標准矩陣,因此沒有什么有趣的)

public static Matrix3D PrespectiveFromHV(double fieldOfViewY, double aspectRatio, double zNearPlane, double zFarPlane, double mod)
    {
        double height = 1.0 / Math.Tan(fieldOfViewY / 2.0);
        double width = height / aspectRatio;
        double d = zNearPlane - zFarPlane;

        var rm = Math.Round(mod, 1);

        var m = new Matrix3D(
                width, 0, 0, 0,
                0, height, 0, 0,
                0, 0, (zFarPlane / d) * rm, (zNearPlane * zFarPlane / d) * rm,
                0, 0, (-1 * rm), (1 - rm)
            );

        return m;
    }

通過忽略該矩陣,我可以使場景看起來像2D。

但是要做的是使3D平滑過渡到2D並返回...

有人知道嗎? 為了使平滑過渡成為可能,我必須對此矩陣進行哪些更改?

我將在m和恆矩陣I之間使用插值,如下所示:

讓alpha * m +(1-alpha)* I中的alpha從1變為0

編輯:

你能詳細說明一下嗎

通過忽略該矩陣,我可以使場景看起來像2D。

這個想法是在2D(通過忽略矩陣)和3D(使用矩陣)之間進行插值。 如果您說明完全忽略矩陣的方式,則插值應該向前。

好吧..忽略“預期”矩陣我做了兩件事...首先,我忽略了矩陣調用中的預期矩陣

var matrix =
Matrix3DHelper.RotateByDegrees(renderParams.AngleX, renderParams.AngleY, renderParams.AngleZ) *
perspectiveMaterix;

我只是不使用PerspectiveMatrix ...

第二步..當progectin指向屏幕時,我忽略“ W”參數

private Point3D GetTransformedPoint(Point3D p, Matrix3D m)
{
double w = (((m.M41 * pX) + (m.M42 * pY)) + (m.M43 * pZ)) + m.M44;
double x = ((((m.M11 * pX) + (m.M12 * pY)) + (m.M13 * pZ)) + m.M14) / (w);
double y = ((((m.M21 * pX) + (m.M22 * pY)) + (m.M23 * pZ)) + m.M24) / (w);
double z = (((m.M31 * pX) + (m.M32 * pY)) + (m.M33 * pZ)) + m.M34;
return new Point3D(x, y, z, w);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM