iPhoneSDK:OpenGL ES2.0で最初の一枚
3GSからOpenGLES2.0に対応され、処理速度の問題はあるけれどシェーダーで行える事は
ぐっと増えて初代xboxでやっているような処理は大抵実装できるようになりました。
私が最後にレンダリングの仕事をしたのは固定シェーダー全盛の時代だったので
シェーダーに関する知識はあまりありません。
そこで勉強もかねてゼロから始めてみました。
と、いっても本は必要です。
「OpenGL ES 2.0 プログラミングガイド」
を買っておきましょう。基本から実用程度までは網羅してると思います。
本見ながらlambert光源で頂点シェーダー書いてみました。
今時はC言語で書けるのでとても簡単です。
むしろシェーダーとプログラムのリンクする為の情報
(glBindAttribLocation,glUniform,VeretxAttribPointer)の設定が面倒です。
先は遠い・・・
ぐっと増えて初代xboxでやっているような処理は大抵実装できるようになりました。
私が最後にレンダリングの仕事をしたのは固定シェーダー全盛の時代だったので
シェーダーに関する知識はあまりありません。
そこで勉強もかねてゼロから始めてみました。
と、いっても本は必要です。
「OpenGL ES 2.0 プログラミングガイド」
を買っておきましょう。基本から実用程度までは網羅してると思います。
本見ながらlambert光源で頂点シェーダー書いてみました。
今時はC言語で書けるのでとても簡単です。
むしろシェーダーとプログラムのリンクする為の情報
(glBindAttribLocation,glUniform,VeretxAttribPointer)の設定が面倒です。
attribute vec4 aPosition; attribute vec4 aColor; attribute vec3 aNormal; varying vec4 colorVarying; uniform float translate; uniform mat4 viewProjMatrix; // 透視変換行列 uniform mat4 modelViewMatrix; // モデルビュー行列 uniform mat3 viewMatrix; // ビュー行列 uniform vec3 light; // 光源。とりあえずひとつ const float c_one = 1.0; const float c_zero = 0.0; void main() { vec4 vPosition; vec3 vNormal; vec4 vColor; float ndotl; vPosition = modelViewMatrix * aPosition; // 頂点を(モデル行列xビュー行列) に変換 gl_Position = viewProjMatrix * vPosition; // クリップ空間にする // 光源計算 vNormal = viewMatrix * aNormal; // 法線ベクトルをビュー空間に変換 ndotl = max( c_zero, dot(vNormal, light) ); // ビュー空間にある正規化されたライトベクトルと内積 vColor = aColor * vec4(ndotl, ndotl, ndotl, c_one); // 色と合成 colorVarying = vColor; }
先は遠い・・・
コメント
コメントを投稿