如何在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 ); }
这是文档中的示例。我已经包括了“D2d1.h”,我只是不知道如何创建“m_pRenderTarget”。我正在写一个Kinect项目,我想在图像上画一条线。我是新来的,请帮帮我。你看到这一页了吗 快速入门教程详细介绍了如何使用Direct2D的步骤 您还可以下载Windows SDK,该示例包含Direct2D演示,其中包含如何创建Direct2D渲染目标的完整步骤 我已经写了一个程序来画一个矩形,稍加修改,它就可以画一条线了,仅供大家参考如何在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.
// 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 ;
}