2016-03-13 4 views
0

Возможно ли сделать что-то подобное в Direct2D или Direct3D?Рисование полигонов (треугольников) в DirectX/Direct2D/Direct3D

Cone image

Я хочу сделать что-то вроде этого, используя Direct2D/Direct3D, но плоскую 2D форму, подобную показанной на рисунке. Спасибо

+0

Почему вы ограничиваете себя Direct2D? Вы хотите нарисовать простой треугольник, или вы хотите нарисовать все это поле сетки с помощью «поднятого» треугольника? – Pod

+0

@Pod Я хочу нарисовать простой треугольник как часть сканирования сонара с симулятора робота ARIA. До тех пор, как он использует DirectX, я не против, если это сочетание D2D или D3D. До сих пор я использовал только D2D, но если D3D можно смешивать с ним, тогда все в порядке. –

+0

@SilentFart Правильно ли я предполагаю, что это не треугольник, а сектор круга (круговой внешний край), поскольку это сканирование сонара? – Chexxor

ответ

0

Это может быть неточный ответ .. но может быть руководством.

D2D1Factory*   pD2DFactory  = NULL; 
ID2D1HwndRenderTarget* pD2DRenderTarget = NULL; 
ID2D1DCRenderTarget* pD2DDCRenderTarget=NULL; 
ID2D1Bitmap*   pD2DBitmap  = NULL; 

D2D1CreateFactory(D2D1_FACTORY_TYPE_MULTI_THREADED,&pD2DFactory); 


RECT rc = {dx,dy,dx+dw,dy+dh}; 
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
     D2D1_RENDER_TARGET_TYPE_DEFAULT, 
     D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,D2D1_ALPHA_MODE_IGNORE), 
     0,0, D2D1_RENDER_TARGET_USAGE_NONE, D2D1_FEATURE_LEVEL_DEFAULT); 

pD2DFactory->CreateDCRenderTarget(&props,&pD2DDCRenderTarget); 
pD2DDCRenderTarget->BindDC(hDC,&rc); 
pD2DDCRenderTarget->CreateBitmap (D2D1::SizeU(sw,sh),(void*)p_bmp,pitch, 
      D2D1::BitmapProperties(D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,D2D1_ALPHA_MODE_IGNORE)), 
      &pD2DBitmap); 

pD2DDCRenderTarget->BeginDraw();  
pD2DDCRenderTarget->DrawBitmap(pD2DBitmap, 
      D2D1::RectF((FLOAT)dx,(FLOAT)dy,(FLOAT)dw,(FLOAT)dh),1.0,D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, 
      D2D1::RectF((FLOAT)sx,(FLOAT)sy,(FLOAT)sw,(FLOAT)sh)); 
pD2DDCRenderTarget->EndDraw();  

SafeRelease(&pD2DBitmap); 
SafeRelease(&pD2DDCRenderTarget);  
SafeRelease(&pD2DFactory); 
+0

Спасибо за ваши усилия, но да, это не совсем правильно –