문제

큐브 렌더링이 있습니다 Viewport3D 그리고 모든 큐브가 사용자에게 보이는지 알아내는 방법을 알아야합니다.

편집 : 명확하게 .. 나는 여기에서 가까운/먼 비행기 거리 때문에 클리핑에 대해 이야기하고 있지 않습니다. 큐브가 카메라 필드에 맞게 키가 크거나 넓다는 것을 의미합니다.

모든 도움이 대단히 감사하겠습니다!

미리 감사드립니다.

도움이 되었습니까?

해결책

나는 해결책을 제공 할 수 없지만 아마도 당신을 올바른 방향으로 가리킬 수 있습니다.

당신이 잡아야 할 것은 뷰 평면에서 큐브의 2D 투영 정도입니다. 그런 다음 Min 및 Max X & Y 값에 대해 간단한 점검을 수행하여 큐브 전체가 보이는지 확인할 수 있습니다.

범위까지 공차 계수를 추가하면 반올림 오류가 필요합니다.

편집 : 방금 "2D Projection WPF"를 검색했습니다. 링크 일어났다. 그것은 당신이 원하는 것을 다루는 것처럼 보입니다.

추가 편집 : 위의 링크에서 관련 코드 섹션을 여기에서 복사했습니다.

public static Rect Get2DBoundingBox(ModelVisual3D mv3d)
{
    bool bOK;

    Matrix3D m = MathUtils.TryWorldToViewportTransform(vpv, out bOK);

    bool bFirst = true;    
    Rect r = new Rect();

    if (mv3d.Content is GeometryModel3D)
    {
        GeometryModel3D gm3d = (GeometryModel3D) mv3d.Content;

        if (gm3d.Geometry is MeshGeometry3D)
        {
            MeshGeometry3D mg3d = (MeshGeometry3D)gm3d.Geometry;

            foreach (Point3D p3d in mg3d.Positions)
            {
                Point3D pb = m.Transform(p3d);
                Point p2d = new Point(pb.X, pb.Y);
                if (bFirst)
                {
                    r = new Rect(p2d, new Size(1, 1));
                    bFirst = false;
                }
                else
                {
                    r.Union(p2d);
                }
            }
        }
    }

    return r;
}

다른 팁

Flipcode에서 Frustum Culling에 대한 튜토리얼을 기억합니다.

플립 코드 - Frustum Culling

도움이되기를 바랍니다.

나는 이것과 비슷한 일을한다고 생각할 수 있습니다.

카메라와 관련된 큐브의 가장 가까운 지점을 확인하고 가까운 클리핑 평면에서 클립되어 있는지 확인하십시오. 내가 생각할 수있는 카메라에서 가장 가까운 지점은 큐브를 구성하는이 지점 중 하나입니다. 따라서 큐브의 6 지점 각각을 확인하고 클리핑 중인지 확인해야합니다. 그들 중 어느 것도 없다면, 당신의 큐브는 완전히 보이면 큐브를, 그리고 분명히 멀리 클리핑 평면에 대해서도 확인해야합니다.

코드는 간단합니다.

for each point of cube do
    if !(point is in farClippingPlane and nearClippingPlane)
       return false;
    end if
end for
return true
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top