如何在C++;(DirectX图形) //绘制网格背景。 int width=静态_cast(rtSize.width); int height=静态施法(rtSize.height); 对于(int x=0;xDrawLine( D2D1::点2F(静态投影(x),0.0f), D2D1::Point2F(静态铸件(x)、rtSize.高度), m_pLightSlateGrayBrush, 0.5f ); }

如何在C++;(DirectX图形) //绘制网格背景。 int width=静态_cast(rtSize.width); int height=静态施法(rtSize.height); 对于(int x=0;xDrawLine( D2D1::点2F(静态投影(x),0.0f), D2D1::Point2F(静态铸件(x)、rtSize.高度), m_pLightSlateGrayBrush, 0.5f ); },directx,kinect,direct2d,Directx,Kinect,Direct2d,这是文档中的示例。我已经包括了“D2d1.h”,我只是不知道如何创建“m_pRenderTarget”。我正在写一个Kinect项目,我想在图像上画一条线。我是新来的,请帮帮我。你看到这一页了吗 快速入门教程详细介绍了如何使用Direct2D的步骤 您还可以下载Windows SDK,该示例包含Direct2D演示,其中包含如何创建Direct2D渲染目标的完整步骤 我已经写了一个程序来画一个矩形,稍加修改,它就可以画一条线了,仅供大家参考 // Draw a grid background.

这是文档中的示例。我已经包括了“D2d1.h”,我只是不知道如何创建“m_pRenderTarget”。我正在写一个Kinect项目,我想在图像上画一条线。我是新来的,请帮帮我。

你看到这一页了吗

快速入门教程详细介绍了如何使用Direct2D的步骤

您还可以下载Windows SDK,该示例包含Direct2D演示,其中包含如何创建Direct2D渲染目标的完整步骤

我已经写了一个程序来画一个矩形,稍加修改,它就可以画一条线了,仅供大家参考

// Draw a grid background.
        int width = static_cast<int>(rtSize.width);
        int height = static_cast<int>(rtSize.height);

        for (int x = 0; x < width; x += 10)
        {
            m_pRenderTarget->DrawLine(
                D2D1::Point2F(static_cast<FLOAT>(x), 0.0f),
                D2D1::Point2F(static_cast<FLOAT>(x), rtSize.height),
                m_pLightSlateGrayBrush,
                0.5f
                );
        }
#包括
#包括
#如果(P){P->RELEASE();P=NULL;}
ID2D1Factory*g_pD2DFactory=NULL;//Direct2D工厂
ID2D1HwndRenderTarget*g_pRenderTarget=NULL;//渲染目标
ID2D1SolidColorBrush*g_pBlackBrush=NULL;//黑色画笔,反映线条颜色
VOID CreateD2DResource(HWND HWND)
{
如果(!g_pRenderTarget)
{
HRESULT-hr;
hr=D2D1CreateFactory(D2D1\u工厂类型\u单螺纹,&g\u pD2DFactory);
如果(失败(小时))
{
MessageBox(hWnd,“创建D2D工厂失败!”,“错误”,0);
返回;
}
//获取绘图区域的大小
RECT-rc;
GetClientRect(hWnd和rc);
//创建Direct2D渲染目标
hr=g_pD2DFactory->CreateHwnRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hWnd,
D2D1::SizeU(右栏-左栏,下栏-上栏)
), 
&g_pRenderTarget
) ;
如果(失败(小时))
{
MessageBox(hWnd,“创建渲染目标失败!”,“错误”,0);
返回;
}
//创建笔刷
hr=g_pRenderTarget->CreateSolidColorBrush(
D2D1::ColorF(D2D1::ColorF::黑色),
&g_pBlackBrush
) ;
如果(失败(小时))
{
MessageBox(hWnd,“创建笔刷失败!”,“错误”,0);
返回;
}
}
}
空抽绳(HWND HWND)
{
创建数据源(hwnd);
g_pRenderTarget->BeginDraw();
//将背景色清除为白色
g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
//画矩形
g_pRenderTarget->DrawLine(
D2D1::点2F(100.0f,100.0f),
D2D1::点2F(500.0f,500.0f),
g_pBlackBrush
);
HRESULT hr=g_pRenderTarget->EndDraw();
如果(失败(小时))
{
MessageBox(NULL,“绘制失败!”,“错误”,0);
返回;
}
}
空洞清理()
{
安全释放(g_pRenderTarget);
安全释放(g_pBlackBrush);
安全释放(g_PD2工厂);
}
LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM)
{
开关(信息)
{
案例WM_油漆:
抽绳(hwnd);
返回0;
案例WM_键控:
{ 
交换机(wParam)
{ 
案件VK_逃逸:
发送消息(hwnd,WM_CLOSE,0,0);
打破
违约:
打破
} 
} 
打破
案例WM_销毁:
清理();
PostQuitMessage(0);
返回0;
}
返回DefWindowProc(hwnd、message、wParam、lParam);
}
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、PSTR szCmdLine、int iCmdShow)
{
WNDCLASSEX绞车;
winClass.lpszClassName=“Direct2D”;
winClass.cbSize=sizeof(WNDCLASSEX);
winClass.style=CS_HREDRAW | CS_VREDRAW;
winClass.lpfnWndProc=WndProc;
winClass.hInstance=hInstance;
winClass.hIcon=NULL;
winClass.hIconSm=NULL;
winClass.hCursor=LoadCursor(空,IDC_箭头);
winClass.hbrBackground=NULL;
winClass.lpszMenuName=NULL;
winClass.cbClsExtra=0;
winClass.cbWndExtra=0;
if(!RegisterClass(&winClass))
{
MessageBox(NULL,文本(“此程序需要Windows NT!”),“错误”,MB_ICONERROR);
返回0;
}   
HWND HWND=CreateWindowEx(空,
“Direct2D”,//窗口类名称
“绘制矩形”,//窗口标题
WS\u重叠窗口,//窗口样式
CW_USEDEFAULT,//初始x位置
CW\U USEFAULT,//初始y位置
600,//初始x尺寸
600,//初始y尺寸
NULL,//父窗口句柄
NULL,//窗口菜单句柄
hInstance,//程序实例句柄
NULL);//创建参数
显示窗口(hwnd、iCmdShow);
更新窗口(hwnd);
味精;
零内存(&msg,sizeof(msg));
while(GetMessage(&msg,NULL,0,0))
{
翻译信息(&msg);
发送消息(&msg);
}
返回msg.wParam;
}

我正在做一个Kinect程序,图像中只有Kinect的投影,我是否需要做些什么使线条覆盖在图像上?
#include <windows.h>
#include <D2D1.h>

#define SAFE_RELEASE(P) if(P){P->Release() ; P = NULL ;}

ID2D1Factory*           g_pD2DFactory   = NULL; // Direct2D factory
ID2D1HwndRenderTarget*  g_pRenderTarget = NULL; // Render target
ID2D1SolidColorBrush*   g_pBlackBrush   = NULL; // A black brush, reflect the line color

VOID CreateD2DResource(HWND hWnd)
{
    if (!g_pRenderTarget)
    {
        HRESULT hr ;

        hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &g_pD2DFactory) ;
        if (FAILED(hr))
        {
            MessageBox(hWnd, "Create D2D factory failed!", "Error", 0) ;
            return ;
        }

        // Obtain the size of the drawing area
        RECT rc ;
        GetClientRect(hWnd, &rc) ;

        // Create a Direct2D render target
        hr = g_pD2DFactory->CreateHwndRenderTarget(
            D2D1::RenderTargetProperties(),
            D2D1::HwndRenderTargetProperties(
            hWnd, 
            D2D1::SizeU(rc.right - rc.left,rc.bottom - rc.top)
            ), 
            &g_pRenderTarget
            ) ;
        if (FAILED(hr))
        {
            MessageBox(hWnd, "Create render target failed!", "Error", 0) ;
            return ;
        }

        // Create a brush
        hr = g_pRenderTarget->CreateSolidColorBrush(
            D2D1::ColorF(D2D1::ColorF::Black),
            &g_pBlackBrush
            ) ;
        if (FAILED(hr))
        {
            MessageBox(hWnd, "Create brush failed!", "Error", 0) ;
            return ;
        }
    }
}

VOID DrawLine(HWND hwnd)
{
    CreateD2DResource(hwnd) ;

    g_pRenderTarget->BeginDraw() ;

    // Clear background color to White
    g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

    // Draw Rectangle
    g_pRenderTarget->DrawLine(
        D2D1::Point2F(100.0f, 100.0f),
        D2D1::Point2F(500.0f, 500.0f),
        g_pBlackBrush
        );

    HRESULT hr = g_pRenderTarget->EndDraw() ;
    if (FAILED(hr))
    {
        MessageBox(NULL, "Draw failed!", "Error", 0) ;
        return ;
    }
}


VOID Cleanup()
{
    SAFE_RELEASE(g_pRenderTarget) ;
    SAFE_RELEASE(g_pBlackBrush) ;
    SAFE_RELEASE(g_pD2DFactory) ;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)   
{
    switch (message)    
    {
    case   WM_PAINT:
        DrawLine(hwnd) ;
        return 0 ;

    case WM_KEYDOWN: 
        { 
            switch( wParam ) 
            { 
            case VK_ESCAPE: 
                SendMessage( hwnd, WM_CLOSE, 0, 0 ); 
                break ; 
            default: 
                break ; 
            } 
        } 
        break ; 

    case WM_DESTROY: 
        Cleanup(); 
        PostQuitMessage( 0 ); 
        return 0; 
    }

    return DefWindowProc (hwnd, message, wParam, lParam) ;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{

    WNDCLASSEX winClass ;

    winClass.lpszClassName = "Direct2D";
    winClass.cbSize        = sizeof(WNDCLASSEX);
    winClass.style         = CS_HREDRAW | CS_VREDRAW;
    winClass.lpfnWndProc   = WndProc;
    winClass.hInstance     = hInstance;
    winClass.hIcon         = NULL ;
    winClass.hIconSm       = NULL ;
    winClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    winClass.hbrBackground = NULL ;
    winClass.lpszMenuName  = NULL;
    winClass.cbClsExtra    = 0;
    winClass.cbWndExtra    = 0;

    if (!RegisterClassEx (&winClass))   
    {
        MessageBox ( NULL, TEXT( "This program requires Windows NT!" ), "error", MB_ICONERROR) ;
        return 0 ;  
    }   

    HWND hwnd = CreateWindowEx(NULL,  
        "Direct2D",                 // window class name
        "Draw Rectangle",           // window caption
        WS_OVERLAPPEDWINDOW,        // window style
        CW_USEDEFAULT,              // initial x position
        CW_USEDEFAULT,              // initial y position
        600,                        // initial x size
        600,                        // initial y size
        NULL,                       // parent window handle
        NULL,                       // window menu handle
        hInstance,                  // program instance handle
        NULL) ;                     // creation parameters

        ShowWindow (hwnd, iCmdShow) ;
        UpdateWindow (hwnd) ;

        MSG    msg ;  
        ZeroMemory(&msg, sizeof(msg)) ;

        while (GetMessage (&msg, NULL, 0, 0))  
        {
            TranslateMessage (&msg) ;
            DispatchMessage (&msg) ;
        }

        return msg.wParam ;
}