投稿者 tel | 2015年1月22日

WebGLでuniform変数に配列を指定する

WebGLのGLSLでuniform変数の配列に値を設定する方法のメモ。

以下のようにシェーダでuniform変数の配列、colorsを定義。

attribute vec2 position;
attribute float index;
uniform vec4 colors[4];
varying vec4 color;

void main() {
    gl_Position = vec4(position.xy, 0.0, 1.0);
    color = colors[int(mod(index, 4.0))];
}

JavaScript側でgetUniformLocationで配列のロケーションを取得する。文字列に配列の要素を1つ1つ指定する形で取得できる。

var colorLoc0 = gl.getUniformLocation(program, 'colors[0]');
gl.uniform4f(colorLoc0, 1.0, 1.0, 1.0, 1.0);
var colorLoc1 = gl.getUniformLocation(program, 'colors[1]');
gl.uniform4f(colorLoc1, 1.0, 0.0, 0.0, 1.0);
var colorLoc2 = gl.getUniformLocation(program, 'colors[2]');
gl.uniform4f(colorLoc2, 0.0, 1.0, 0.0, 1.0);
var colorLoc3 = gl.getUniformLocation(program, 'colors[3]');
gl.uniform4f(colorLoc3, 0.0, 0.0, 1.0, 1.0);

http://jsdo.it/sapphire_al2o3/aPE8

シェーダで配列には定数しか指定できないらしいのでattributeとかじゃないと添え字に使えない。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。