2017-04-26 4 views
0

En dessinant une ligne 2d, comment ajouter un effet de lueur?directx11 ajouter lueur à DrawLine 2d

auto renderer::draw_line(point<float> const& start_point, point<float> const& end_point, float const stroke_width, color const& stroke_color) -> void { 

    brush->SetColor(D2D1::ColorF(stroke_color.r, stroke_color.g, stroke_color.b, stroke_color.a)); 

    device_context_d2d1->DrawLine(
     D2D1::Point2F(start_point.x + offsetX, start_point.y + offsetY), 
     D2D1::Point2F(end_point.x + offsetX, end_point.y + offsetY), 
     brush.get(), stroke_width 
    ); 

} 

Je pense qu'il a quelque chose todo avec cette fonction

ID2D1Effect* shadowEffect; 
device_context_d2d1->CreateEffect(CLSID_D2D1Shadow, &shadowEffect); 

Répondre

0

Vous pouvez appliquer Gaussian blur effect (qui est en fait utilisé dans l'effet d'ombre), puis (en option) apply Brightness effect à l'image floue et puis finalement tirage flou image au-dessus de l'image de ligne originale.

blurred line

+0

pas 100% sûr de la façon dont vous voulez dire. wouldnt que brouiller juste ma ligne et rien de plus? – vusuzireru

+0

Oui, mais c'est généralement comme cela que fonctionnent tous ces effets de lueur, prenez une partie «brillante» de l'image (ligne dans ce cas), brouillez-la et dessinez sur l'image originale (peut-être avec une luminosité ajustée). Si vous transformez la couleur de l'image floue en noir et que vous dessinez l'image originale sur celle-ci, vous obtiendrez un effet d'ombre. – VTT

+0

Merci pour l'info, je suis un peu confus sur la façon d'appliquer le flou à la ligne parce que SetInput prend une image? aussi comment est-ce que je flouterais juste un côté est là une sorte de fonction de région dans directx11? – vusuzireru