c#上的斜角或凹陷效应算法

时间:2012-04-17 16:12:26

标签: c# algorithm image-processing graphics gdi

我正在寻找为一组随机封闭的beizier形状生成斜角/浮雕效果的方法。我发现以下帖子似乎符合我的要求。

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

如何将此移植到C#?我可以使用任何可用的算法吗?或者可以使用任何.NET映像库或一些代码片段来启动我?

我需要在服务器上运行此代码,以生成具有透明度的动态形状。

1 个答案:

答案 0 :(得分:0)

  1. 从闭合的多边形/折线/路径创建“网格”
    • 基座是通过斜面/凹陷宽度扩大的基本形状
    • 在它上面或下面是你的形状
    • 通过围绕基本对称形状的中心缩放来完成放大
    • 或通过垂直移位+线/曲线放大/交叉切割来连接
    • 第二种选择对代码很复杂但总是正确的
  2. 创建法线
    • 光源正常红色(通常光线位于左上角)
    • 和'网格'上的曲面法线绿色(对于每个边,区域或像素)
    • 光线法线对于方向光的整个区域可以是恒定的(远光源像 阳光)
    • 或针对点光源(近光源)计算每个点
    • 所有法线都必须是单位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表示他们的方向相反
  4. 有关更清晰的信息,请参阅图片

    enter image description here

    PS。 '网格'仍然可以是2D 只有法线必须是3D