Udostępnij za pośrednictwem


Efekt transformacji perspektywy 3D

Użyj efektu przekształcenia perspektywy 3D, aby obrócić obraz w 3 wymiarach tak, jakby był wyświetlany z odległości.

Transformacja perspektywy 3D jest wygodniejsza niż efekt transformacji 3D, ale uwidacznia tylko podzbiór funkcji. Możesz obliczyć pełną macierz transformacji 3D i zastosować bardziej dowolną macierz transformacji do obrazu przy użyciu efektu transformacji 3D.

Identyfikator CLSID dla tego efektu jest CLSID_D2D13DPerspectiveTransform.

Przykładowy obraz

Przed
obraz przed efektem.
Po
obraz po wykonaniu efektu.
ComPtr<ID2D1Effect> perspectiveTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DPerspectiveTransform, &perspectiveTransformEffect);

perspectiveTransformEffect->SetInput(0, bitmap);

perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN, D2D1::Vector3F(0.0f, 192.0f, 0.0f));
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION, D2D1::Vector3F(0.0f, 30.0f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(perspectiveTransformEffect.Get());
m_d2dContext->EndDraw();

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
InterpolacjaMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE
Tryb interpolacji, który jest używany na obrazie. Istnieje 5 trybów skalowania, które wahają się w zakresie jakości i szybkości.
Typ jest D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE.
Wartość domyślna to D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE
Tryb używany do obliczania obramowania obrazu, miękkiego lub twardego. Aby uzyskać więcej informacji, zobacz Tryby obramowania.
Typ to D2D1_BORDER_MODE.
Wartość domyślna to D2D1_BORDER_MODE_SOFT.
Głębokość
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
Odległość od PerspectiveOrigin do płaszczyzny projekcji. Wartość określona w dips i musi być większa niż 0.
Typ to FLOAT.
Wartość domyślna to 1000.0f.
PerspektywaOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN
Lokalizacja X i Y przeglądarki w scenie 3D. Ta właściwość jest D2D1_VECTOR_2F zdefiniowana jako: (punkt X, punkt Y). Jednostki znajdują się w adresach IP.
Wartość Z należy ustawić za pomocą właściwości głębokości.
Typ jest D2D1_VECTOR_2F.
Wartość domyślna to {0.0f, 0.0f}.
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
Tłumaczenie efektu wykonuje przed obracanie płaszczyzny projekcji. Ta właściwość jest D2D1_VECTOR_3F zdefiniowana jako: (X, Y, Z). Jednostki znajdują się w adresach IP.
Typ jest D2D1_VECTOR_3F.
Wartość domyślna to {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Tłumaczenie efektu wykonuje po obróceniu płaszczyzny projekcji. Ta właściwość jest D2D1_VECTOR_3F zdefiniowana jako: (X, Y, Z). Jednostki znajdują się w adresach IP.
Typ jest D2D1_VECTOR_3F.
Wartość domyślna to {0.0f, 0.0f, 0.0f}.
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
Punkt środkowy obrotu, który wykonuje efekt. Ta właściwość jest D2D1_VECTOR_3F zdefiniowana jako: (X, Y, Z). Jednostki znajdują się w adresach IP.
Typ jest D2D1_VECTOR_3F.
Wartość domyślna to {0.0f, 0.0f, 0.0f}.
Obrót
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
Kąty obrotu dla każdej osi. Ta właściwość jest D2D1_VECTOR_3F zdefiniowana jako: (X, Y, Z). Jednostki są w stopniach.
Typ jest D2D1_VECTOR_3F.
Wartość domyślna to {0.0f, 0.0f, 0.0f}.

Tryby interpolacji

Wyliczenie Opis
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Próbkuje najbliższy pojedynczy punkt i używa go. Ten tryb używa mniej czasu przetwarzania, ale generuje obraz o najniższej jakości.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR Używa próbki czterech punktów i interpolacji liniowej. Ten tryb używa więcej czasu przetwarzania niż tryb najbliższego sąsiada, ale generuje obraz o wyższej jakości.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC Używa 16 przykładowego jądra sześciennego do interpolacji. Ten tryb używa najbardziej czasu przetwarzania, ale generuje obraz o wyższej jakości.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Używa 4 próbek liniowych w jednym pikselu do dobrego anty aliasowania krawędzi. Ten tryb jest dobry do skalowania w dół o małe ilości na obrazach z kilkoma pikselami.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Używa filtrowania anisotropowego do próbkowania wzorca zgodnie z przekształconym kształtem mapy bitowej.

Nuta

Jeśli nie wybierzesz trybu, efekt zostanie domyślnie D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.

Nuta

Tryb anisotropowy generuje mapę mipmap podczas skalowania, jednak jeśli ustawisz właściwość Cached na wartość true dla efektów, które są danymi wejściowymi tego efektu, mipmapy nie będą generowane za każdym razem dla wystarczająco małych obrazów.

Tryby obramowania

Nazwa Opis
D2D1_BORDER_MODE_SOFT Efekt podpełnia obraz przezroczystymi czarnymi pikselami, ponieważ interpoluje, co powoduje miękką krawędź.
D2D1_BORDER_MODE_HARD Efekt zaciska dane wyjściowe do rozmiaru obrazu wejściowego.

Mapa bitowa wyjściowa

Rozmiar mapy bitowej wyjściowej zależy od macierzy transformacji stosowanej do obrazu.

Efekt wykonuje operację przekształcania, a następnie stosuje pole ograniczenia wokół wyniku. Mapa bitowa danych wyjściowych jest rozmiarem pola ograniczenia.

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Minimalny obsługiwany serwer Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Nagłówek d2d1effects.h
Biblioteka d2d1.lib, dxguid.lib

ID2D1Effect