*

GL_SCISSOR_TESTを使ったクリッピング

公開日: : 最終更新日:2013/11/20 cocos2d-x ,

Clipping

cocos2dでNodeの描画をクリッピングするにはCCClippingNodeやCGContextClipToMaskを使う方法などがあります。
これらはパスからマスク画像を作成することで任意の形にクリッピングできますが、
単にNodeのサイズでクリッピングしたい場合にコンテンツサイズが変化する状況では使いにくいと思います。
この場合GL_SCISSOR_TESTを使うのが簡単だと思います。

GL_SCISSOR_TESTを使ってクリッピング

やり方はCCNodeから派生したクラスでvisit関数を以下のように上書きするだけです。

static cocos2d::CCRect convertToWorldSpace(cocos2d::CCNode *node, const cocos2d::CCRect &r) {
    CCPoint leftBottom = r.origin;
    CCPoint rightTop = leftBottom + r.size;
    
    leftBottom = node->convertToWorldSpace(leftBottom);
    rightTop = node->convertToWorldSpace(rightTop);
    
    return CCRectMake(leftBottom.x, leftBottom.y, rightTop.x - leftBottom.x, rightTop.y - leftBottom.y);
}

void ClippingNode::visit() {
  CCRect bounds = CCRectMake(0, 0, this->getContentSize().width, this->getContentSize().height);
  bounds = ::convertToWorldSpace(this, bounds);

  glEnable(GL_SCISSOR_TEST);
  CCEGLView::sharedOpenGLView()->setScissorInPoints(bounds.getMinX(), bounds.getMinY(), bounds.size.width, bounds.size.height);
  CCNode::visit();
  glDisable(GL_SCISSOR_TEST);
}

クリッピング領域はWorld座標で指定するようです。

サンプルはいつもの場所です。

Sponsored Link

関連記事

teach_s.png

English Monsters1.0がAppStoreの審査通過

English Monsterが遂にAppStoreで公開されました。 一度AppStor

記事を読む

4300d3f14f7f754c5b2cd5b720efb39f.png

cocos2dxでマルチスレッド

cocos2dxでマルチスレッドをいじったときのメモ あらかじめautoreleaseに

記事を読む

df40.png

【イーモン】デザフェス用ミニゲーム

2014年11月8日のデザインフェスタ用に作ったミニゲームです! シルエットまたは単語の意味が

記事を読む

cocos2dx_portrait.png

Macでcocos2dxをiOSとAndroid向けにビルド

前回Androidの開発環境をセットアップでAndroidの開発環境が準備をしました。 今

記事を読む

products-ico5.png

cocos2d-x v2.2からv3.3への移行

最近、イーモンの更新でiTunesにバイナリをアップロードしたら、 2015年2月から64

記事を読む

ace.png

イーモン v2.2審査

v2.2を審査に出しました! イーモンxエースクラウンの特別クエストが追加されます!

記事を読む

blog.png

cocos2d-x v2.2からv3.3rc0 その2

イーモンを鋭意更新中です。 アイキャッチは魔法使いの高ランク装備グラです。 coc

記事を読む

emon.png

【イーモン】v1.5リリース

やっとv1.5リリースできました。 継続的にプレイを続けてもらえるように ゲームのバランス

記事を読む

no image

UIAlertのTextFieldでキーボードが表示されない(iOS7)

TextField付きのUIAlertViewでたまにキーボードが表示されないことがあり、 ながら

記事を読む

internet_share.png

インターネット共有のステータスバーを表示させない

私の作っているアプリではcocos2d-xでCCEAGLViewを表示させるUIViewCo

記事を読む

Sponsored Link

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Sponsored Link

  • 発音辞書イーモン
  • English Monsters
  • sLog(時間管理アプリ)
  • 生粋のC++プログラマーです。 最近は、Objective-Cやxcode、cocos2d-xなどを学びながらiPhoneアプリを開発しています。

Google+ Google
PAGE TOP ↑