You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
Introduction In this article, I'm going to show you how to reproduce "retro" visual effects as seen in the "8-bit" musical levels from Rayman Legends. If you have never heard of Rayman Legends or want to see in action the visual effects, you can watch this video showing all the 8-bit music levels (warning: spoilers!). All of these visual effects are post-processing effects. Meaning that we take a
Posted on January 8, 2016 21 minutes Mamadou Babaei Update [2020/10/23]: Since I wrote this tutorial many things has changed in Cocos2d-x and I haven’t been using it in years as I switched to Unreal Engine 4. According to this GitHub issue opened by my blog readers, in order for this code to work there has to be some modifications to the code which is provided on that issue by @lazerfalcon and @ma
cocos2d-x Advent Calendar21日目の記事です。 はじめに 今回はアウトラインを色付けるサンプルを元に、Glowエフェクトっぽいモノを作っていきます。 Glowエフェクトとは、その名の通り光る演出です。 フラグメントシェーダーの用意 早速ですが、サンプルのフラグメントシェーダーを元にGlowエフェクトっぽく書いたのが下記になります。 varying vec4 v_fragmentColor; varying vec2 v_texCoord; uniform float u_ctime; uniform float u_threshold; uniform float u_radius; uniform vec4 u_outlineColor; void main() { float radius = u_radius; vec4 accum = vec4(0.0);
ofFboのバッファ内でアルファブレンディングを行う際、ウィンドウに直接描画するのと同じ方法ではうまくいかない場合があります。 まずはこちらのソースコードと、キャプチャをご覧ください。 ofEnableBlendMode(OF_BLENDMODE_ALPHA); ofBackground(0, 0, 0); ofSetColor(255, 255, 255,100); for (int i = 0;i < 10;i++){ ofRect(i*30, i*30, 50, 50); } 上記ソースを、ウィンドウとFboにそれぞれ描画しています。 左がウィンドウに直接描画したもの、右がFboに描画した後、ウインドウに再度描画したものです。 既に結果が違ってしまっています。アルファ値が、Fboの方が小さいように見えますが、そういうことではありません。次にウィンドウ側の背景色を変更してみます。 Fb
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 前提 『マルチプラットフォームのためのOpenGL ES入門 基礎編―Android/iOS対応グラフィックスプログラミング』 の抜粋メモです。13章の内容。 コードについて詳細は↑を参照してください。 シェーダと行列 Matrix OpenGL で頻出するのは 4 x 4 の行列。 行列を OpenGL ES の用途に限って言い表せば、 ベクトルに対する計算内容を保存したもの と言える。GPU とはベクトルと行列に対する演算を得意とするハードウェアであり、行列とベクトルの演算は専用の演算装置によって行われるため、非常に高速に処理できる
前提 『マルチプラットフォームのためのOpenGL ES入門 基礎編―Android/iOS対応グラフィックスプログラミング』 の抜粋メモです。5章、6章あたり。 1〜4 はありません。 コードについては断片のみなので、本書を読んでください。 5章 glClearColor void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) maskは塗りつぶすバッファの種類 GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT GL_STENCIL_BUFFER_BIT OpenGL ES は、用途の違う3枚のバッファを組み合わせて描画を行う。それぞれ保存する内容やメモリの使用量が異なる。 カラーバッファは、ディスプレイのひとつひとつのピクセル情報の集合を保存するただのメ
void sample_TextureUse2_rendering(GLApplication *app) { // サンプルアプリ用データを取り出す Extension_TextureUse2 *extension = (Extension_TextureUse2*) app->extension; glClearColor(0.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // attr_posを有効にする glEnableVertexAttribArray(extension->attr_pos); glEnableVertexAttribArray(extension->attr_uv); // unif_textureへテクスチャを設定する glUniform1i(extension->unif_texture, 0);
ガウシアンブラー 前回はエッジ検出の手法の一つ、laplacian フィルタを解説しました。前々回に紹介した sobel フィルタと比較すると、細い線による繊細なエッジ検出ができるのでしたね。 さて、今回はフィルタ系の処理をもう一つ取り上げます。今回のフィルタはかなり実用性の高いものです。今後様々なエフェクト処理を行なっていく上で欠かせないぼかし系処理の代表格、gaussian フィルタ(ガウシアンフィルタ)です。 ガウシアンぼかし、あるいはガウスぼかしなどと呼ばれるぼかし処理は、様々なペイントソフトやフォトレタッチソフトにも搭載されています。そもそも[ ぼかす ]という処理に優劣があるのかというところに疑問を抱く方ももしかしたらいるかもしれませんが、gaussian フィルタが優れているポイントはいくつかあります。 処理結果が自然で美しく仕上がる 大きくぼかしを掛けることが可能 その割に
今日は、GLSLによるカートゥーンを紹介しようと思います。割と簡単にでき、それなりに見栄えがするからです。その応用として、輪郭線も描画します。 カートゥーンの原理 カートゥーンはセルアニメ調のレンダリングです。左下の図に示すように、頂点vにおいて、法線と光源ベクトル(頂点から光源へのベクトル)との内積(照度)を、右下の図のようなテクスチャのs座標に当てはめることで簡単に実現できます。 更に、次の図の左のように、視線ベクトルと法線の内積を考えると、輪郭となる部分はほぼ0になります。そのため、その内積をt座標に割り当てることで、輪郭線を実現できます。 s座標もt座標も単位ベクトル同士の内積で計算できますが、その範囲は-1~1になるため、テクスチャマッピング(glTexParameterによる指定)をクランプに設定する必要があります。 バーテックスシェーダ(頂点シェーダ) 今回は、頂点シェーダで
FrameBufferやRenderBufferなど、バッファという言葉はOpenGLやWebGLを扱っていると頻繁に目にします。 ある程度理解していますが、時間を置くとどうしても理解が曖昧になるので、いったん自分の理解の範囲内で備忘録としてまとめました。 なので、間違いや勘違いがあるかもしれません。(もしなにか間違ってたら指摘してくれるとうれしいです) Framebuffer Object まず、FrameBuffer ObjectとRenderBufferについての簡単な関係図を書きました↓ 見て分かるように、FrameBuffer Objectは「Color Buffer」「Depth Buffer」「Stencil Buffer」を内包しています。 つまり、FrameBuffer Objectはこれらいくつかのバッファを統合するオブジェクトです。 それ自身に値を保持しているわけでは
2013-09-30 OpenGL ES 3.0 @ ETC2/EAC圧縮テクスチャ OpenGL ES 3.0 iOS 7 OpenGL 4.3 ETC2/EAC圧縮テクスチャとは 圧縮テクスチャはiOSだけをターゲットにした場合はPVRTCだけを使えばよかったのですがAndroidではGPU毎にS3TC,ATITC,PVRTC,ETCと乱立している状態でマルチプラットフォームを考えた場合に問題になりました。アプリ起動時にサーバーから対応するテクスチャをダウンロードする、もしくは最悪全形式をアプリ内に含めるかいっそ圧縮しないなどの対処がとられていました。更に各圧縮テクスチャ毎に癖があり見た目を同じにするのも難しいものでした。デスクトップ版はどうかと言うとS3TCやBPTCなどDDS形式がサポートしているものが対応されていることが多かったですがやはり標準化はされていませんでした。OpenG
Hardware GPU InformationSince the introduction of the original iPhone, Apple has continued to improve the GPU capabilities in new iOS devices. When you write a Metal or OpenGL ES app, you need to understand the specific limits of each device you app runs on. Currently, two distinct GPU categories are in common use:The Apple A7 and A8 GPUsThe PowerVR SGX 543 and 554 GPUsTable 2-1 lists the devices
OpenGL ESを使ったアプリのチューニングについて、 予習としてXcodeやInstrumentsの使い方をメモ。 実際に使ってみた上でのチェックポイントや良かったプラクティス等、随時追記していきます。 Instrumentsでボトルネックを診断 OpenGL ES Analyzer を使った自動診断 Instrumentsの"OpenGL ES Analyzer"というテンプレートを使うと、リソースの使われ方や問題になりそうなところを診断してくれます。 はじめに"Xcode" -> "Open Developer Tools" -> "Instruments"か cmd + iでInstrumentsを起動します。 "OpenGL ES Analyzer"を選択して"Choose"をクリック。 この状態で、左上のボタンをクリックするとアプリが起動します。 一通り操作すると、問題になり
いま「Battle Tank Sword」を Windows に移植するためにコネコネいじくり回している最中なのですが、その途中、Java のソースを眺めていた時にふと目に止まった部分がありました。 それは度重なる不具合で皆様に御迷惑をおかけした原因とも言える場所であり、その作業過程がもしかしたら誰かの役に立つかもしれないと思い、ここに文章化することにしました。 Android 向けゲーム「Battle Tank SWORD」は、初めて OpenGL + NDK で作ったアプリだったので色々と大変だったのですが、一番苦労したのはほかでもない OpenGL の初期化部分でした。はじめは解説サイトなどを参考にしてさらっと mGLSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 0, 1); と記述してあり、手元の端末では正しく動いていたのですが、実はこれが
頂点バッファオブジェクト(VBO)については、t-potさんや床井研究室さん、Project Asuraさんといった、有名どころの方々がサンプルを載せてくれています。 が、t-potさんの例では、頂点座標、法線、テクスチャ座標をそれぞれ別個のVBOとして用意しているため、t-potさんも文中で書かれていますが、 GPUのデータキャッシュのヒット率が非常に悪くなり、パフォーマンスが出ません。また、インデックスバッファを使っていないというところも非効率と言えるでしょう。 また、床井研究室さんのところでは、ページの一番下のところで、頂点座標、法線、テクスチャ座標のデータを一つのVBOに格納したサンプルを示されていますが、 という感じで、頂点座標、法線、テクスチャ座標それぞれのデータが離れているため、これもGPUのキャッシュのヒット率が悪く、パフォーマンスがよくありません。 頂点座標、法線、テクス
さて、理解のための動作例はできたので、新しい機能やさらなる堅牢性の追加にとりかかれます。 以前のシェーダーは、できるだけ簡単になるように意図的に最小限にしていましたが、実世界の例ではもっと付属コードを使用します。 シェーダの管理[編集] シェーダのロード[編集] 最初に追加するものは、シェーダをロードするためのより便利な方法です:外部ファイルのロードがとても簡単になるはずです(Cの文字列としてコードにコピーペーストするよりも)。 それに加えて、こうすることでCコードを再コンパイルせずにGLSLコードを変更できるようになります! まず、ファイルを文字列としてロードする関数が必要になります。 基本的なC言語のコードで、ファイルのサイズに割り当てられたバッファの中にファイルの内容を読み取ります。 /** * Store all the file's contents in memory, use
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く