Suche senden
Hochladen
Cocos2d x-sprite3d
•
1 gefällt mir
•
4,666 views
aktsk
Folgen
Reisen
Technologie
Melden
Teilen
Melden
Teilen
1 von 31
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Cocos2d-x(JS) ハンズオン #10「3D機能とVR機能」
Cocos2d-x(JS) ハンズオン #10「3D機能とVR機能」
Tomoaki Shimizu
Cocos2d-xによる最新ゲーム開発
Cocos2d-xによる最新ゲーム開発
Chukong Technologies Japan
Cocos2d-x 3D Extension
Cocos2d-x 3D Extension
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Tomoaki Shimizu
㊱タイルマップに挑戦
㊱タイルマップに挑戦
Nishida Kansuke
Cocos2d-x(JS) ハンズオン #09「ラベル・テキストボックス」
Cocos2d-x(JS) ハンズオン #09「ラベル・テキストボックス」
Tomoaki Shimizu
cocos2d-xを利用したパズドラ風ゲームの作成
cocos2d-xを利用したパズドラ風ゲームの作成
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Tomoaki Shimizu
Empfohlen
Cocos2d-x(JS) ハンズオン #10「3D機能とVR機能」
Cocos2d-x(JS) ハンズオン #10「3D機能とVR機能」
Tomoaki Shimizu
Cocos2d-xによる最新ゲーム開発
Cocos2d-xによる最新ゲーム開発
Chukong Technologies Japan
Cocos2d-x 3D Extension
Cocos2d-x 3D Extension
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Tomoaki Shimizu
㊱タイルマップに挑戦
㊱タイルマップに挑戦
Nishida Kansuke
Cocos2d-x(JS) ハンズオン #09「ラベル・テキストボックス」
Cocos2d-x(JS) ハンズオン #09「ラベル・テキストボックス」
Tomoaki Shimizu
cocos2d-xを利用したパズドラ風ゲームの作成
cocos2d-xを利用したパズドラ風ゲームの作成
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Tomoaki Shimizu
Cocos最新情報(2015/6/30)
Cocos最新情報(2015/6/30)
Chukong Technologies Japan
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島
Tomoaki Shimizu
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
Kohki Miki
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Tomoaki Shimizu
cocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみよう
Tomoaki Shimizu
Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Tomoaki Shimizu
cocos2d-xとCocosBuilder
cocos2d-xとCocosBuilder
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Tomoaki Shimizu
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
Tomoaki Shimizu
Cocos2d xで簡単なゲームを作ってみよう!
Cocos2d xで簡単なゲームを作ってみよう!
Tomoaki Shimizu
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Akihiro Matsuura
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Tomoaki Shimizu
CocosBuilderとcocos2d-x JSB
CocosBuilderとcocos2d-x JSB
Tomoaki Shimizu
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
Tomoaki Shimizu
cocos2d-x 3.0 新しい物理演算クラスの利用
cocos2d-x 3.0 新しい物理演算クラスの利用
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Tomoaki Shimizu
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Tomoaki Shimizu
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Tomoaki Shimizu
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Tomoaki Shimizu
Weitere ähnliche Inhalte
Was ist angesagt?
Cocos最新情報(2015/6/30)
Cocos最新情報(2015/6/30)
Chukong Technologies Japan
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島
Tomoaki Shimizu
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
Kohki Miki
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Tomoaki Shimizu
cocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみよう
Tomoaki Shimizu
Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Tomoaki Shimizu
cocos2d-xとCocosBuilder
cocos2d-xとCocosBuilder
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Tomoaki Shimizu
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
Tomoaki Shimizu
Cocos2d xで簡単なゲームを作ってみよう!
Cocos2d xで簡単なゲームを作ってみよう!
Tomoaki Shimizu
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Akihiro Matsuura
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Tomoaki Shimizu
CocosBuilderとcocos2d-x JSB
CocosBuilderとcocos2d-x JSB
Tomoaki Shimizu
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
Tomoaki Shimizu
cocos2d-x 3.0 新しい物理演算クラスの利用
cocos2d-x 3.0 新しい物理演算クラスの利用
Tomoaki Shimizu
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Tomoaki Shimizu
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Tomoaki Shimizu
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Tomoaki Shimizu
Was ist angesagt?
(20)
Cocos最新情報(2015/6/30)
Cocos最新情報(2015/6/30)
cocos2d-x公開講座 in 鹿児島
cocos2d-x公開講座 in 鹿児島
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
cocos2d-xとCocosBuilderでゲームを作ってみよう
cocos2d-xとCocosBuilderでゲームを作ってみよう
Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
cocos2d-xとCocosBuilder
cocos2d-xとCocosBuilder
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
Cocos2d xで簡単なゲームを作ってみよう!
Cocos2d xで簡単なゲームを作ってみよう!
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
CocosBuilderとcocos2d-x JSB
CocosBuilderとcocos2d-x JSB
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
cocos2d-x 3.0 新しい物理演算クラスの利用
cocos2d-x 3.0 新しい物理演算クラスの利用
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.4を使用した、Androidアプリの開発環境構築について
Ähnlich wie Cocos2d x-sprite3d
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Nishida Kansuke
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Tomoaki Shimizu
Cocosサービスについて
Cocosサービスについて
Chukong Technologies Japan
かんたんなcocos2d-xの紹介
かんたんなcocos2d-xの紹介
Tomoaki Shimizu
Cocos2dx 8hour
Cocos2dx 8hour
Tomohiko Okita
Cocos最新情報(2015/7/23)
Cocos最新情報(2015/7/23)
Chukong Technologies Japan
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島
Tomoaki Shimizu
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Tomoaki Shimizu
Cocos2d platforms
Cocos2d platforms
Keisuke Hata
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
Game Tools & Middleware Forum
3 dプリンタの使い方
3 dプリンタの使い方
mgwsuzuki
Cocos2d-x Console @Cocos Talks #3
Cocos2d-x Console @Cocos Talks #3
Akihiro Matsuura
Decksetがよかった話
Decksetがよかった話
Kohki Miki
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
Akihiro Matsuura
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!
vi-iv
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
nyagasuki
Cocos2d-x(v3.x)で作るマルチプラットフォームゲーム
Cocos2d-x(v3.x)で作るマルチプラットフォームゲーム
Norio Akagi
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Tomoaki Shimizu
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!
Yuichi Higuchi
Ähnlich wie Cocos2d x-sprite3d
(20)
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Cocosサービスについて
Cocosサービスについて
かんたんなcocos2d-xの紹介
かんたんなcocos2d-xの紹介
Cocos2dx 8hour
Cocos2dx 8hour
Cocos最新情報(2015/7/23)
Cocos最新情報(2015/7/23)
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Cocos2d-x公開講座 in 鹿児島
Cocos2d-x公開講座 in 鹿児島
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Windowsでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
Cocos2d platforms
Cocos2d platforms
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
3 dプリンタの使い方
3 dプリンタの使い方
Cocos2d-x Console @Cocos Talks #3
Cocos2d-x Console @Cocos Talks #3
Decksetがよかった話
Decksetがよかった話
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
Cocos2d-x でのクラウドサービス活用方法 - 週刊アスキーセミナー
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
Cocos2d-x(v3.x)で作るマルチプラットフォームゲーム
Cocos2d-x(v3.x)で作るマルチプラットフォームゲーム
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!
Mehr von aktsk
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
aktsk
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
aktsk
Deploy Rails Application on Docker with Elasticbeanstalk
Deploy Rails Application on Docker with Elasticbeanstalk
aktsk
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
aktsk
黒板プロジェクト
黒板プロジェクト
aktsk
千メモUiの秘密
千メモUiの秘密
aktsk
20130719 始めるdev ops
20130719 始めるdev ops
aktsk
Hyper → Highspeed → Development
Hyper → Highspeed → Development
aktsk
Mehr von aktsk
(8)
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
Deploy Rails Application on Docker with Elasticbeanstalk
Deploy Rails Application on Docker with Elasticbeanstalk
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
黒板プロジェクト
黒板プロジェクト
千メモUiの秘密
千メモUiの秘密
20130719 始めるdev ops
20130719 始めるdev ops
Hyper → Highspeed → Development
Hyper → Highspeed → Development
Cocos2d x-sprite3d
1.
Sprite3D Tips @第5回cocos2d-x勉強会 株式会社アカツキ 河野
洋志
2.
自己紹介 • 河野 洋志(こうの
ひろし) • 株式会社アカツキ エンジニア • サウザンドメモリーズを担当 • 主にサーバサイド • Ruby on Rails, MySQL, Redis, AWS, etc… • cocos2d-x…? C++…?
3.
残念ながら… • サウザンドメモリーズはcocos2d-x製ではありま せん • 弊社ではcocos2d-xを利用した別のプロジェクト が進行中です!
4.
!?
5.
• ということで… • 本来開発・運用で得られた知見をお話できれば ベストだったのですが知見ゼロ •
cocos2d-x界隈で最近おもしろそうなものないか なーということで ver 3.1 で新しく追加された Sprite3Dについて簡単にご紹介したいと思います
6.
目次 • cocos2d-x Ver
3.1で追加されたSprite3Dクラス の紹介 • Sprite3Dの使い方 • シェーダー拡張 • Sprite3Dで(まだ?)できないこと
7.
目次 • cocos2d-x Ver
3.1で追加されたSprite3Dクラス の紹介 • Sprite3Dの使い方 • シェーダー拡張 • Sprite3Dで(まだ?)できないこと
8.
Sprite3Dとは • 3Dモデルをスプライトとして扱うことができる クラス • 対応フォーマットは
.obj • 呼び出し時にテクスチャ画像をsetする auto model3d = Sprite3D::create("sample.obj");! model3d->setTexture(“sample.png”);
9.
API • 3D APIはもちろん、これまでの2Dスプライトで 使えたAPIはほとんど使える •
Sprite3DクラスはSpriteクラス同様Nodeクラス を継承しているため • 移動、拡縮、その他アクションなど
10.
Position3D • z軸は手前が正、奥が負 • パースがかかっているので、設定したx,
yより も手前側は画面縁に、奥側は画面中央寄りに 配置される auto model_a = Sprite3D::create("sample.obj");! model_a->setTexture("sample.png");! model_a->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height * 2 / 3, 400));! this->addChild(model_a);! ! auto model_b = Sprite3D::create("samle.obj");! model3_b->setTexture("samle.png");! model3_b->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height / 2, 0));! this->addChild(model_b);! ! auto model_c = Sprite3D::create("samle.obj");! model3_c->setTexture("samle.png");! model3_c->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height * 1 / 3, -400));! this->addChild(model_c); model_a model_b model_c
11.
Rotation3D • Vec3を渡して3次元的なrotationを設定できる auto model_a
= Sprite3D::create("sample.obj");! model_a->setTexture("sample.png");! model_a->setRotation3D(Vec3(90.0f, 0.0f, 0.0f));! model_a->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height * 2 / 3, 0));! model_a->setScale(15);! this->addChild(model_a);! ! auto model_b = Sprite3D::create("sample.obj");! model_b->setTexture("sample.png");! model_b->setRotation3D(Vec3(0.0f, 90.0f, 0.0f));! model_b->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height / 2, 0));! model_b->setScale(15);! this->addChild(model_b);! ! auto model_c = Sprite3D::create("sample.obj");! model_c->setTexture("sample.png");! model_c->setRotation3D(Vec3(0.0f, 0.0f, 90.0f));! model_c->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height / 3, 0));! model_c->setScale(15);! this->addChild(model_c);
12.
移動・拡縮 • 移動 ! ! • 拡縮 void
HelloWorld::onTouchesEnded(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event)! {! for (auto touch: touches) {! auto location = touch->getLocation();! auto action = MoveTo::create(0.5f, location);! model3d->runAction(action);! }! } void HelloWorld::onTouchesEnded(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event)! {! for (auto touch: touches) {! auto location = touch->getLocation();! auto seq = Sequence::create(ScaleTo::create(0.1f, 75.f),! ScaleTo::create(0.1f, 30.f),! ScaleTo::create(0.1f, 45.f), NULL);! model3d->runAction(seq);! }! }
13.
回転 • z軸方向にしか回転してくれない ! ! • Vec3クラスを渡すと3次元的に回転できる void
HelloWorld::onTouchesEnded(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event)! {! for (auto touch: touches) {! auto location = touch->getLocation();! auto action = RotateBy::create(0.5f, 360);! model3d->runAction(action);! }! } void HelloWorld::onTouchesEnded(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event)! {! for (auto touch: touches) {! auto location = touch->getLocation();! auto action = RotateBy::create(0.5f, Vec3(location.x, location.y, 30));! model3d->runAction(action);! }! }
14.
回転(余談) ! • 上記メソッドを使うとペラペラになって面白い RotateBy::create(float duration,
float deltaAngleZ_X, float deltaAngleZ_Y);
15.
目次 • cocos2d-x Ver
3.1で追加されたSprite3Dクラス の紹介 • Sprite3Dの使い方 • シェーダー拡張 • Sprite3Dで(まだ?)できないこと
16.
シェーダー拡張 • シェーダーを拡張することでトゥーンレンダリン グ(っぽいこと)などができるようになる
17.
シェーダ拡張 • cpp-testの中に含まれるEffect3DOutlineクラスにつ いて解説していきます • cocos2d-x/tests/cpp-tests/Classes/Sprite3DTest •
3Dプログラミングについては詳しくないので詳しい ところまでソースは追いません…(追えませんでした) • 間違いがあれば是非指摘してください
18.
3DEffectクラス • 3Dエフェクトに関する抽象クラス class Effect3D
: public Ref! {! public:! virtual void drawWithSprite(EffectSprite3D* sprite, const Mat4 &transform) = 0;! protected:! Effect3D() : _glProgramState(nullptr) {}! virtual ~Effect3D()! {! CC_SAFE_RELEASE(_glProgramState);! }! protected:! GLProgramState* _glProgramState;! };! • OpenGLシェーダを格納する _glProgramState プロパティを持つ • シェーダを描画する drawWithSprite() メソッド
19.
3DEffectOutlineクラス • シェーダーを読み込んで描画を実行するクラス class Effect3DOutline:
public Effect3D! {! public:! static Effect3DOutline* create();! ! void setOutlineColor(const Vec3& color);! ! void setOutlineWidth(float width);! ! void drawWithSprite(EffectSprite3D* sprite, const Mat4 &transform);! ! protected:! ! Effect3DOutline();! virtual ~Effect3DOutline();! ! bool init();! ! Vec3 _outlineColor;! float _outlineWidth;! public:! static const std::string _vertShaderFile;! static const std::string _fragShaderFile;! static const std::string _keyInGLProgramCache;! static GLProgram* getOrCreateProgram();! ! };! • 初期化時にシェーダーを 読み込む • drawWithSprite()の実装 もこのクラスにあります
20.
シェーダ • Resources/Shaders3D 以下に配置 •
OutLine.frag • OutLine.vert uniform vec3 OutLineColor;! uniform vec4 u_color;! ! void main(void)! {! gl_FragColor = vec4(OutLineColor,1.0) * u_color;! } attribute vec4 a_position;! attribute vec3 a_normal;! uniform float OutlineWidth;! ! void main(void)! {! vec4 pos = CC_MVPMatrix * a_position;! vec4 normalproj = CC_MVPMatrix * vec4(a_normal, 0);! normalproj = normalize(normalproj);! pos.xy += normalproj.xy * (OutlineWidth * (pos.z * 0.5 + 0.5));! ! gl_Position = pos;! }
21.
EffectSprite3Dクラス • Sprite3Dクラスを継承して3DEffectを追加できる ように拡張 class EffectSprite3D
: public Sprite3D! {! public:! static EffectSprite3D* createFromObjFileAndTexture(const std::string& objFilePath, const std::string& textureFilePath);! void setEffect3D(Effect3D* effect);! void addEffect(Effect3D* effect, ssize_t order);! void eraseEffect(Effect3D* effect);! ssize_t getEffectCount() const;! Effect3D* getEffect(ssize_t index) const;! virtual void draw(Renderer *renderer, const Mat4 &transform, bool transformUpdated) override;! protected:! EffectSprite3D();! virtual ~EffectSprite3D();! ! std::vector<std::tuple<ssize_t,Effect3D*,CustomCommand>> _effects;! Effect3D* _defaultEffect;! CustomCommand _command;! };!
22.
EffectSprite3Dクラス • 使い方 auto model
= EffectSprite3D::createFromObjFileAndTexture("sample.obj", "sample.png");! model->setScale(45);! model->setRotation3D(Vec3(265.0f, 265.0f, 265.0f));! model->setPosition3D(Vec3(visibleSize.width / 2, visibleSize.height / 2, 0));! ! auto effect = Effect3DOutline::create();! effect->setOutlineColor(Vec3(1,1,0));! effect->setOutlineWidth(0.03f);! model->addEffect(effect, 1);! ! this->addChild(model);
23.
目次 • cocos2d-x Ver
3.1で追加されたSprite3Dクラス の紹介 • Sprite3Dの使い方 • シェーダー拡張 • Sprite3Dで(まだ?)できないこと
24.
できないこと • タップイベントの取得 • getBoundBox()でRectが取得できない •
物理演算 • アニメーション • モデルの表示、アクション以上のことはできない auto position = model3d->getPosition3D();! CCLOG("position: X:%f Y:%f Z:%f", position.x, position.y, position.z);! auto rect = model3d->getBoundingBox();! CCLOG("bounding box: MinX:%f MaxX:%f MinY:%f MaxY:%f", rect.getMinX(), rect.getMaxX(), rect.getMinY(), rect.getMaxY());! ! // cocos2d: position: X:320.000000 Y:480.000000 Z:0.000000! // cocos2d: bounding box: MinX:320.000000 MaxX:320.000000 MinY:480.000000 MaxY:480.000000
25.
おや、cocos2d-xのようすが…
26.
期待ag…と思ったらマージされてた https://github.com/cocos2d/cocos2d-x/pull/7085
27.
こいつ…動くぞ!
28.
Animation3D • Animate3DクラスはActionとして実装されている • Animation3DからAction(Animate3D)をcreateする •
.c3t フォーマットに対応 auto animation = Animation3D::getOrCreate("Sprite3DTest/girl.c3t");! if (animation)! {! auto animate = Animate3D::create(animation); ! auto spawn = Spawn::create(animate, RotateBy::create(animation->getDuration(), Vec3(0.0f, 90.0f, 0.0f)), NULL);! sprite->runAction(RepeatForever::create(spawn));! }
29.
まとめ • Sprite3Dについて簡単に紹介しました • Position,
Rotate, Action, etc… • つい先日アニメーションもマージされたので、 今後に期待 • でもここまでやるならUni(ry
30.
参考 • cocos2d-x公式のサンプルプロジェクト • https://github.com/cocos2d/cocos2d-x/tree/ v3/tests/cpp-tests/Classes/Sprite3DTest •
EarthWarrior3D • https://github.com/chukong/EarthWarrior3D
31.
ご清聴ありがとうございました
Jetzt herunterladen