まずは。あんまりドヤ顔で先生ぶるほどの実績があるわけではないです。
それやっちゃうと、お友達の橋本先生(仮)とか国立先生(仮)がおい!って言ってげらげら笑い出すので自分がやったことの記録として残しておきます。
OpenGLを使ってお絵描きソフトを作っているみなさん。本家のサンプルはダウンロードしましたか?
http://developer.apple.com/library/ios/#samplecode/GLPaint/Listings/ReadMe_txt.html
ここでプロジェクトをダウンロードして、半日ぐらいコードを眺めます
。このプロジェクト、iPhoneをシェイクするとお絵描きしたものをまるっと消してしまいます。
じゃあ、そこって何が書いてあるの?というのを眺めてみましょう。
にゃあ。glcClearColorで全部消してるだけじゃん。って
じゃあ、実際お絵描きしてるのはどこなんだろうと眺めてみる
glBlendFuncって何やってるんだろうと調べてみる。
どうも、既に書いてある色とこれから書こうとしているいろを混ぜてるらしい。
そーか。それで透明っぽい感じをだしているのか。なるほどすごいな。
解説はもっと詳しい
こことか
http://wisdom.sakura.ne.jp/system/opengl/gl17.html
わたしは本を買って読みました。6章に詳しくでてます
iPhone 3Dプログラミング ―OpenGL ESによるアプリケーション開発/Philip Rideout
¥3,990 Amazon.co.jp
じゃあ、書いてある色をまるっと消しちゃえばいいんじゃない。
これを
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
これに変えるだけです。
glBlendFunc(GL_ONE,GL_ZERO);
ゼロを掛けるんだって。あまりに簡単で気が抜けたでしょ
それやっちゃうと、お友達の橋本先生(仮)とか国立先生(仮)がおい!って言ってげらげら笑い出すので自分がやったことの記録として残しておきます。
OpenGLを使ってお絵描きソフトを作っているみなさん。本家のサンプルはダウンロードしましたか?
http://developer.apple.com/library/ios/#samplecode/GLPaint/Listings/ReadMe_txt.html
ここでプロジェクトをダウンロードして、半日ぐらいコードを眺めます
。このプロジェクト、iPhoneをシェイクするとお絵描きしたものをまるっと消してしまいます。
じゃあ、そこって何が書いてあるの?というのを眺めてみましょう。
// Erases the screen
- (void) erase
{
[EAGLContext setCurrentContext:context];
// Clear the buffer
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
// Display the buffer
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
にゃあ。glcClearColorで全部消してるだけじゃん。って
じゃあ、実際お絵描きしてるのはどこなんだろうと眺めてみる
// Set a blending function appropriate for premultiplied alpha pixel data
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_POINT_SPRITE_OES);
glTexEnvf(GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, GL_TRUE);
glPointSize(width / kBrushScale);
glBlendFuncって何やってるんだろうと調べてみる。
どうも、既に書いてある色とこれから書こうとしているいろを混ぜてるらしい。
そーか。それで透明っぽい感じをだしているのか。なるほどすごいな。
解説はもっと詳しい
こことか
http://wisdom.sakura.ne.jp/system/opengl/gl17.html
わたしは本を買って読みました。6章に詳しくでてます
じゃあ、書いてある色をまるっと消しちゃえばいいんじゃない。
これを
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
これに変えるだけです。
glBlendFunc(GL_ONE,GL_ZERO);
ゼロを掛けるんだって。あまりに簡単で気が抜けたでしょ