Category:Home/memo (Total 18 items)

≪ 6-10 | 1-5

Categories - memo

久し振りに更新

  • 2008-10-24 (金)
  • memo

しようと思ったけど、色んなことをすっかりさっぱり忘れてる…

とりあえずヘッダロゴを変えてみた

http://generation1986.g.hatena.ne.jp/VoQn/20080428/1209402555
を参考にして、というかovalをrectに変更して多少の数値を弄っただけなんだけど、random()のおかげでそれなりの見栄え。

  • Comments (Close): 0
  • TrackBack (Close): 0

パス上の座標を取得する

  • 2008-06-06 (金)
  • memo

パスで作った線上に点を追加して、その点を利用してさらに図形を作ったりできる。

path.points(amount=100)
path.point(t)
path.addpoint(t)

tは0から1の値になる。

適当に星を作って、パス上に座標を追加、それを座標に円を連続して書いてみた。

fill(0,0,0,0.5)
path=star(200,200,10,50,200)

var("star_points",NUMBER, 1,1,100)
var("oval_size",NUMBER, 1,1,10)
o=oval_size
p = star_points

for t in range(p+1):
    if p==0:
        pt=path.point(0)
        oval(pt.x-o, pt.y-o, o*2, o*2)
    else:
        pt = path.point(t/p)
        fill(t/p)
        oval(pt.x-o, pt.y-o, o*2, o*2)
  • Comments (Close): 0
  • TrackBack (Close): 0

time()を使う

  • 2008-05-31 (土)
  • memo

本家のBBSにあった投稿より
http://nodebox.net/code/index.php/shared_2008-05-27-20-32-36

以下は翻訳じゃないっす。

例えば、古いPCでデカめの動画を再生しようとすると、処理が追い付かなくてカクカクすることがあるけど、 この場合は音声と同期させる為もあって、フレームの処理をトバしてるわけですよね。多分。

で、NodeBoxのリアルタイムでのアニメーション処理はっていうと、speed()でfps設定するんだけど、これがあくまで最大値。
処理が追い付かなくなると当然fpsは落ちる。
で、その分はコマ落ちさせてくれるか?っていうとそうはならなくて、真面目に1フレームずつ処理してくれます。
そうするとどうなるか?っていうと、書き出した場合より遅い速度で再生されることになります。

QCでいうPatchtime代りにfpsを利用するとうまくいかないってことです。
サイトタイトルを思い出したので無理矢理QuartzComposerで例えてみました。

で、時間をどう取り扱おうか?ってのがこの記事の内容なんですが、Pythonのモジュールtimeを使います。

from time import time

でインポートして

time()

で呼び出します。多分unixtimeかな?

で、アニメーションで使う場合に、実行した時間をゼロにしたいので、def draw():の処理に入る前に一旦変数に入れておきます。これはスクリプトを実行した時の時間になります。
で、def draw():内でtime()を別の変数に入れます。def draw():内の処理はフレーム毎の処理なのでフレーム処理ごとに時間をリフレッシュしていきます。
この2つを引き算してやればスクリプト実行からの時間になるわけです。

from time import time

speed(30)
str=time()

def draw():
    cur=time()
    text(str,0,20)
    text(cur,0,40)
    text(cur-str,0,60)
  • Comments (Close): 0
  • TrackBack (Close): 0

coreimageを使用できるエフェクトを増やしてみる。

  • 2008-05-30 (金)
  • memo

ImageUnitだったら何でも使えるのかと思って、モナリザで変換したのとか試しても使えない。
それどころか、Leopardで追加されたDiscBlurとかも使えない。

で、Pythonも分からんくせにcoreimageの__init__.pyを覗いてみると、

        self.FILTER_COLORMATRIX            = "CIColorMatrix"
        self.FILTER_EDGES                  = "CIEdges"
        self.FILTER_MOTIONBLUR             = "CIMotionBlur"
        self.FILTER_DISCBLUR               = "CIDiscBlur"
        self.FILTER_ZOOMBLUR               = "CIZoomBlur"
        self.FILTER_BUMPDISTORTION         = "CIBumpDistortion"
        self.FILTER_HOLEDISTORTION         = "CIHoleDistortion"
        self.FILTER_CIRCLESPLASHDISTORTION = "CICircleSplashDistortion"
        self.FILTER_TWIRLDISTORTION        = "CITwirlDistortion"
        self.FILTER_CIRCULARWRAP           = "CICircularWrap"
        self.FILTER_KALEIDOSCOPE           = "CIKaleidoscope"
        self.FILTER_TRIANGLETILE           = "CITriangleTile"
        self.FILTER_PERSPECTIVETILE        = "CIPerspectiveTile"
        self.FILTER_STARSHINEGENERATOR     = "CIStarShineGenerator"
        self.FILTER_CHECKERBOARDGENERATOR  = "CICheckerboardGenerator"
        self.FILTER_BLOOM                  = "CIBloom"
        self.FILTER_PIXELATE               = "CIPixellate"
        self.FILTER_CRYSTALLIZE            = "CICrystallize"
        self.FILTER_SPOTLIGHT              = "CISpotLight"
        self.FILTER_SHADEDMATERIAL         = "CIShadedMaterial"
        self.FILTER_PAGECURLTRANSITION     = "CIPageCurlTransition"

とか一々やってるので、どうやら個別にひとつずつ読み込む為の処理を書いておかなければならないようです。

で、Discblurを増やしたい。
同じブラー系のmotionblurとかzoomblurの処理をコピペしていけばいいだろう。たぶん。

で、motionblurで検索して、みつかった行ごとコピペして、DiscblurとかDISCBLURとかに変える作業をして、 初期値はradius:8.0にしたりなんかして、

    def render_filter_discblur(self, layer, img, options):

        # Apply the Core Image Disc Blur filter effect,

        r = options["radius"]

        r = max(0.0, min(r, 100.0))
        p = {"inputRadius": r}
        img = self.filter(self.FILTER_DISCBLUR, img, p)

        return img  

こんな感じにしたところ無事に

canvas.append(img).filter("discblur")

とかするとDiscblur使えました。

  • Comments (Close): 0
  • TrackBack (Close): 0

coreimageをちょっと使ってみる。

  • 2008-05-29 (木)
  • memo

やれることが多いのでさわりだけ。

つーかやれることが多くて何をしたら良いのか分からないので、
http://nodebox.net/code/index.php/Core_Image
見ながらコツコツやってみる。

まず、単純に画像を読み込んで表示させてみる。

ci=ximport("coreimage")
img=ci.canvas()
img.append("/hoge/hoge/hoge.jpg")
img.draw()

ライブラリ読み込んで、キャンバス作って、レイヤーに画像読み込んで、描画する。おわり。

append()ってのは新しくレイヤーを作るんだけど、画像以外でもカラーとかパスとかムービーフレームとか別のキャンバスとか色々素材を使えるみたい。

試しにPathを使ってみると

ci=ximport("coreimage")
size(200,200)
font("Osaka")
fontsize(200)
p=textpath(u"あ",0,200)
img=ci.canvas(200)
img.append(p)
img.draw()

うまくいった。
ちなみに他のキャンバスをレイヤーに読み込んだりも出来るので、こんなまわりくどい使い方も出来ます。

ci=ximport("coreimage")
size(200,200)
font("Osaka")
fontsize(200)
p=textpath(u"あ",0,200)
img=ci.canvas(200)
img.append(p)
sub=ci.canvas(200)
sub.append(img)
sub.draw()

canvas.append()でこんだけ読み込めるらしい。

canvas.append(filename) canvas.append(clr) canvas.append(clr1, clr2, type="linear", spread=0.0) canvas.append(path, background=None, fill=None, stroke=None, strokewidth=None) canvas.append([clr1, clr2, clr3, ...], w, h) canvas.append(layer) canvas.append(canvas) canvas.append(layer.render()) canvas.append(canvas.flatten()) canvas.append(open(filename).read()) canvas.append(movieframe)

その上でレイヤー複数読み込んだり、フィルタかけたり出来る。

ci=ximport("coreimage")
size(200,200)
font("Osaka")
fontsize(200)
p=textpath(u"あ",0,200)
q=textpath(u"い",0,200)
img=ci.canvas(200)
img.append(p).filter("zoomblur",interface=True)
img.append(q).filter("crystallize",interface=True)
img.draw()

interface=Trueオプションでスライダが自動的に作られてベンリ。
とりあえずこのへんでおしまい。

  • Comments (Close): 0
  • TrackBack (Close): 0

Category:Home/memo (Total 18 items)

≪ 6-10 | 1-5

Entries in this Category
Tutorial
Library
Syndicate this site

RSS 1.0 Feed

Return to page top