2012-04-17 43 views
4

我正在尋找方法來爲一組隨機閉合的貝塞爾形狀生成斜角/浮雕效果。我遇到以下帖子,似乎符合我的要求。c上的斜角或凹陷效果算法#

https://dsp.stackexchange.com/questions/530/bitmap-alpha-bevel-algorithm

我怎麼得到這個移植到C#?有沒有可用的算法,我可以使用?或者,有沒有任何.NET圖像庫可供使用或一些代碼片段讓我開始?

我需要在服務器上運行此代碼以生成圍繞它們具有透明度的動態形狀。

+3

你引用的是寫在OpenCV中職的例子中,已經有OpenCV中的C#.NET包裝叫Emgucv – elasticrash 2013-02-19 13:07:31

+0

@elasticrash ..謝謝您。我做了進一步的搜索和這個鏈接似乎有幫助http://stackoverflow.com/questions/85569/net-dotnet-wrappers-for-opencv – user3526 2013-02-21 00:28:25

回答

0
  1. 創建從封閉的多邊形/折線/路徑
    • 基地「目」被放大的基本形狀由錐/凹陷寬度
    • 頂部上或在它下面是您的形狀
    • 放大做通過圍繞基本對稱形狀的中心縮放
    • 或通過垂直移位+行/曲線放大/相交切割加入
    • 第二選擇對代碼複雜但總是形狀正確
  2. 創建法線
    • 垂直於光源RED(通常燈亮左上角)
    • 以及表面法線上的「網格」 GREEN(每邊,區域或像素)
    • 對於方向光的整個區域(遠處的光源如 陽光),光法線可以是恆定的
    • 或計算出的fo r點光源的每個點(關閉光源)
    • 所有正常必須是單位3D矢量!
  3. 渲染 '目' 與光(簡單正常照明就足夠)

    lighted color = base color * dot_product(light normal,surface normal) 
    
    • 點積是標量矢量乘法這樣

      (A.B) 
      = dot_product(A(x1,y1,z1),B(x2,y2,z2)) 
      = (x1*x2)+(y1*y2)+(z1*z2) 
      
    • 當A ,B是單位矢量,那麼結果是< -1,+ 1>

    • 0意味着A,B是垂直
    • +/- 1意味着它們是平行
    • -1意味着它們具有相反的方向

見更加清晰圖像

enter image description here

PS。 「網格」可還是2D只有法線必須是3D