質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

7270閲覧

openframeworksでグラデーションの線を引きたい

gotchcuru

総合スコア29

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2016/03/20 18:45

編集2016/03/20 18:48

グラデーションの線を引きたい

いま、openframeworksで、あるデータをグラフで表示するアプリを制作しています。

そこで、以下の画像のようなグラデーションのグラフを描きたいのですが、やり方がよくわからず、困っています。

イメージ説明

FBOを使って、描いたラインであらかじめ用意しておいたグラデーション画像をマスクすれば簡単にできると思い、以下のサイトを参考にしたのですが、これがうまくいかず...orz

画像を形を指定してマスクする

どなたか簡単に実現できる方法をご存知の方がいればご教授いただきたいです。

いちおう私が書いたコードも載せておきます。。。

C++

1 2//-------------------------------------------------------------- 3void ofApp::setup(){ 4 5 ofPath line = ofPath(); 6 line.setStrokeColor(ofColor(255, 0, 0)); 7 line.setFilled(false); 8 line.setStrokeWidth(1); 9 line.moveTo(0, 0, 0); 10 line.lineTo(100 ,100 ,0); 11 12 fbo.allocate(ofGetWidth(), ofGetHeight()); 13 fbo.begin(); 14 line.draw(); 15 fbo.end(); 16 17 img.load("test.jpg"); 18 img.getTexture().setAlphaMask(fbo.getTexture()); 19} 20 21//-------------------------------------------------------------- 22void ofApp::update(){ 23 24} 25 26//-------------------------------------------------------------- 27void ofApp::draw(){ 28 29 img.draw(0, 0); 30 31} 32

上のコードはtest.jpg(※)をマスクして、(0,0)から(100,100)の線を引こうとしています。

(※)test.jpgは以下のようなグラデーション画像です。

test.jpg

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私は openFrameworks はおろか、OpenGL プログラミングすらしたことがないので(興味はありますが)、外している可能性が高いですが...

C++

1 fbo.allocate(ofGetWidth(), ofGetHeight());

ここですが、以下のように、

C++

1fbo.allocate(ofGetWidth(), ofGetHeight(), GL_RED);

として、赤単色(グレースケールと同等)のバッファを作らないといけないのではないでしょうか? 画像を形を指定してマスクするでは、GL_LUMINANCE を使用していますが、こちらの質問 によると、GL_LUMINANCE は OpenGL 4.0 で非推奨になったようです。

このバッファをアルファチャネルとして設定した際、明るさ 0.0 で塗られた部分は透明になり、明るさ 1.0 で塗られた部分は不透明になるようです。というわけで、明るさ 1.0 で (0, 0) から (100, 100) の線を引いてみてください。

投稿2016/03/21 15:51

tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問