mdiapp開発報告所 このページをアンテナに追加 RSSフィード

2010-09-11

[] 1.35a (2010/09/11) 18:23  1.35a (2010/09/11) を含むブックマーク

f:id:MDIAPP:20100911182203p:image

bs_bezier_m( x, y ) 命令でサブパスを作成することで、複数パーツを持つパスや、ドーナツの穴のように抜けのある形状が描画できるようになりました。

function main( x, y, p )

  if not firstDraw then
    local distance = bs_distance( lastDrawX - x, lastDrawY - y )
    if distance < 50 then
      return 0
    end
  end

  local r,g,b = bs_fore()

  -- first path
  bs_bezier_begin( x,y )
  bs_bezier_l( x + 100, y )
  bs_bezier_l( x + 100, y + 100 )
  bs_bezier_l( x, y + 100 )
  bs_bezier_l( x, y )

  -- second path
  bs_bezier_m( x+10,y+10 )
  bs_bezier_l( x + 100-10, y+10 )
  bs_bezier_l( x + 100-10, y + 100-10 )
  bs_bezier_l( x + 10, y + 100-10 )
  bs_bezier_l( x + 10, y + 10 )

  bs_fill( r,g,b, 255 )

  lastDrawX = x
  lastDrawY = y
  firstDraw = false

  return 1
end

lastDrawX = 0
lastDrawY = 0
firstDraw = true

[][] SVG2BS 11:23  SVG2BSを含むブックマーク

http://hiruko.cool.ne.jp/blog/works/mdiapp/svg2bs.htm (SVG2BS - 日瑠子陛下行幸のようす on the WEB

宇河弘樹先生により開発された、SVG2BSというブラシスクリプト作成補助ツールが公開されています。ありがとうございます!

SVG形式のpath情報から、ブラシスクリプト用のソースコード配列データ)を生成するツールです。生成したソースコード文字列)を、「汎用ブラシ.bs」の末尾に加えると新たなブラシが完成します。

一式に添付されているサンプル「墨筆」などを試して頂ければ、ポテンシャルの高さが実感できるかと思います。一歩進んだブラシ作成に欠かせないツールになっていると思います。是非ともご活用ください!

f:id:MDIAPP:20100911111920p:image

[] 一様にランダム、ガウス分布にランダム 09:44  一様にランダム、ガウス分布にランダムを含むブックマーク

ブラシスクリプトで乱数を発生させるには、

  • math.random( a, b )
  • bs_grand( ave, sd1 )

の二つの方法があります。

普通に一様な分布の乱数を発生させたい場合は、math.randomを使います。math.random( a, b ) と渡せば、aからbの範囲の乱数値を得ることが出来ます。これは、一様な分布をしている、一般的な乱数値です。普通、乱数といえばこちらの事を言います。

偏りのある乱数分布を得たいなら、bs_grand関数を呼び出します。bs_grand( ave, sd1 ) を呼ぶと、aveを中心に、-sd1〜sd1の範囲内に68%の確率に収まるガウス分布正規分布)の乱数を得ることができます。-sd1〜sd1の範囲を大きく超えることもあります。散布ブラシのような偏りのある散布表現をしたい場合などに利用できます。特殊な乱数です。

f:id:MDIAPP:20100913093850p:image

ブラシスクリプトで比べてみましょう。

function param1()
  return "gauss", 0, 1, 0
end

function main( x, y, p )

  if not firstDraw then
    local d = bs_distance( lastDrawX - x, lastDrawY - y )
    if d < 30 then
      return 0
    end
  end

  local r,g,b = bs_fore()

  local i
  for i=0,2000 do
    local rad = math.random() * 3.14 * 2

    local distance = math.random( 0, 80 )
    if bs_param1() == 1 then
      distance = bs_grand( 0, 60 )
    end

    local dx,dy = bs_rotate( 0, distance, rad )
    bs_pixel_set( x + dx, y + dy, r,g,b,255 )
  end

  lastDrawX = x
  lastDrawY = y
  firstDraw = false

  return 1
end

lastDrawX = 0
lastDrawY = 0
firstDraw = true

f:id:MDIAPP:20100913094154p:image

宇河宇河 2010/09/12 00:09 ご紹介いただきありがとうございます!
しかも、超光速でのサブパス対応でさらに夢が広がりました!

いろんな方の作る触って楽しいブラシが
今後もまた増えそうで楽しみです!

MDIAPPMDIAPP 2010/09/12 07:54 お世話になっております。素晴らしいアプリをありがとうございます!「これはサブパス対応しなきゃいけない!」と燃え上がって対応させて頂きました(笑)。ブラシスクリプト開発者の皆さん、宜しくお願い致します!

トラックバック - http://d.hatena.ne.jp/MDIAPP/20100911