MyUtils

View on GitHub

OpenGLについて

opneGLはGPUに対する描画処理などを実行するインタフェースを提供するライブラリである。 処理はIntel,AMD,Nvidiaなどに依存する windowの表示にはx11などがよく使われるが、他にもARMなどのライブラリ描画用にバックグラウンドでハードを操作するためのコンテキスト生成が行われてたりする。 また、ウィンドウを表示せずともGPUで描画用の処理を実行させ画像などを生成する offscreen renderingなどと呼ばれる手法も存在する。

そして、GLSLと呼ばれる言語を使うことでshader(シェーダ)としてGPU内で直接計算処理を行うこともできる。


基本的な考え方について

とりあえず、行列計算である。 オブジェクトを作成し、好きな位置にずらす場合は現行の行列式を退避して追加。 その後、戻すことで手軽にオブジェクトを配置することができる

Docker環境上でセーフティーにoffscreen renderingする

仮想ディスプレイを起動してそこでレンダリングする。 以上

# こんな感じでDISPLAYを設定し、仮想ディスプレイを起動する。
export DISPLAY=:9
Xvfb $DISPLAY -screen 0 1024x768x24 &


#define PI 3.141

float dis(float n) 
{ 
  return fract(sin(n)*1.50); 
}

void main () 
{
  float Id = dis(vertexId);
  float fr = dis(Id);
  float tex = texture2D(sound, vec2(fr, Id)).a * cos(Id);
  
  tex = pow(tex, 2.);
  
  float pang = vertexId;
  float view = .5 * 1.2;
  float t = (time * (fr + .1))*10.;
  float x = Id * sin(pang + t);
  float y = Id * cos(pang + t);
  
  y +=  .25 * tex * (1. - y);
  y *= .78;
  
  float sizeAfter = tex / (y + 1.);
  
  gl_Position = vec4(x, y, 0., 1.);
  gl_PointSize = 6. * sizeAfter;
  
  v_color = vec4(tex * .1 * (3. - fr), tex * .9 * cos(fr * PI), tex * 9., sizeAfter);
}