前橋工科大学 - システム生体プログラミング特論 2023
openFrameworks + Shader (GLSL) 応用

前回に引き続き、openFrameworksでShader (GLSL) を使用した高度な表現に挑戦します! 前回はFragment Shader (フラグメントシェーダー / ピクセルシェーダー) のみを使用しました。今回はさらにVertex Shaderを記述して3D空間に配置されたオブジェクトの表面にシェーダーによるアニメーションするパターンを描画します。この手法を応用することで、様々な3D表現が可能となります!
スライド資料
サンプルファイル
※古いマシン (特にMac) などでOpenGL 4.3以上に対応していない場合は下記のサンプルを使用してください
汎用的に使用可能なvertex/fragment shaderのテンプレート
shader.vert
#version 430
in vec4 position;
in vec4 color;
in vec3 normal;
in vec2 texcoord;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform mat4 textureMatrix;
uniform mat4 modelViewProjectionMatrix;
uniform float usingTexture;
uniform float usingColors;
uniform vec4 globalColor;
uniform sampler2D src_tex_unit0;
out Vertex {
vec4 worldSpacePos;
vec4 color;
vec3 normal;
vec2 texcoord;
} oVert;
void main() {
gl_Position = modelViewProjectionMatrix * position;
oVert.worldSpacePos = position;
oVert.color = color;
oVert.normal = normal;
oVert.texcoord = texcoord;
}
shader.frag
#version 430
uniform float u_time;
in Vertex {
vec4 worldSpacePos;
vec4 color;
vec3 normal;
vec2 texcoord;
} iVert;
out vec4 fragColor;
void main() {
vec3 vUV = iVert.worldSpacePos.xyz;
//...
fragColor = vec4(r, g, b, a);
}
アンケート
本日の講義に参加した方は以下のアンケートに回答してください。