DirectX 中的色键
ChromaKey in DirectX
我需要使用 Direct2d 实现一些色度键功能。
我有一些来自 MSDN 的代码示例:
ComPtr<ID2D1Effect> chromakeyEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ChromaKey, &chromakeyEffect);
chromakeyEffect->SetInput(0, bitmap);
chromaKeyEffect->SetValue(D2D1_CHROMAKEY_PROP_COLOR, {0.0f, 1.0f, 0.0f, 0.0f});
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_TOLERANCE, 0.2f);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_INVERT_ALPHA, false);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_FEATHER, false);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(chromakeyEffect.Get());
m_d2dContext->EndDraw();
不过,我对 WinAPI 有点陌生。
我们的平台具有 ID3D11Device
的 yield 实例功能,我收到 DX11Texture
作为输入。
我有两个问题:
1.如何从ID3D11Device
得到m_d2dContext
?
2. 如何从DX11Texture
得到ID2D1Image
?
- How can I get m_d2dContext from ID3D11Device?
你不能,至少不能直接。
您创建了一个 D2D 工厂,并从那里在 DXGI 资源之上创建了一个渲染目标,该资源又派生自特定的 D3D11 纹理,因此属于特定的 D3D11 设备。结合所有这些,您可以使用 D2D 绘制特定的 D3D11 纹理。
- How can I get ID2D1Image from DX11Texture?
您案例的 MSDN 文档入口点是:Direct2D and Direct3D Interoperability Overview。特别针对 D3D 纹理到 D2D 图像的场景,建议的路径是这样的:
There are two primary ways to use Direct2D and Direct3D together:
[...]
By using CreateSharedBitmap to create an ID2D1Bitmap from an IDXGISurface, you can write a Direct3D scene to a bitmap and render it with Direct2D.
我需要使用 Direct2d 实现一些色度键功能。
我有一些来自 MSDN 的代码示例:
ComPtr<ID2D1Effect> chromakeyEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ChromaKey, &chromakeyEffect);
chromakeyEffect->SetInput(0, bitmap);
chromaKeyEffect->SetValue(D2D1_CHROMAKEY_PROP_COLOR, {0.0f, 1.0f, 0.0f, 0.0f});
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_TOLERANCE, 0.2f);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_INVERT_ALPHA, false);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_FEATHER, false);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(chromakeyEffect.Get());
m_d2dContext->EndDraw();
不过,我对 WinAPI 有点陌生。
我们的平台具有 ID3D11Device
的 yield 实例功能,我收到 DX11Texture
作为输入。
我有两个问题:
1.如何从ID3D11Device
得到m_d2dContext
?
2. 如何从DX11Texture
得到ID2D1Image
?
- How can I get m_d2dContext from ID3D11Device?
你不能,至少不能直接。
您创建了一个 D2D 工厂,并从那里在 DXGI 资源之上创建了一个渲染目标,该资源又派生自特定的 D3D11 纹理,因此属于特定的 D3D11 设备。结合所有这些,您可以使用 D2D 绘制特定的 D3D11 纹理。
- How can I get ID2D1Image from DX11Texture?
您案例的 MSDN 文档入口点是:Direct2D and Direct3D Interoperability Overview。特别针对 D3D 纹理到 D2D 图像的场景,建议的路径是这样的:
There are two primary ways to use Direct2D and Direct3D together:
[...]
By using CreateSharedBitmap to create an ID2D1Bitmap from an IDXGISurface, you can write a Direct3D scene to a bitmap and render it with Direct2D.