スポンサーリンク

GLSLを試す (9) Geometry Shader(2)- 頂点を増やす

前回のプログラム

https://suzulang.com/glsl-9-geometry-shader-1

C++側、vertex shader,fragment shaderはそのまま、geometry shaderだけを書き換える。

#version 460

layout (points) in; //入力は頂点単位元々
layout (points) out; //出力も頂点単位

layout (max_vertices = 3) out;

//geometry shaderへの入力は配列で受け取らなければいけない
//ただし名前はvertex shader側のoutと一致させる
in vec4 vertexColor[]; 

// 出力は普通。名前はfragment shader側のinと一致させる
out vec4 vColor;

void main()
{

    // 元々入ってきた頂点
    gl_Position = gl_in[0].gl_Position;
    gl_PointSize=20.0;
    vColor = vertexColor[0];
    EmitVertex(); // 頂点をラスタライザへ送る
    
    // ジオメトリシェーダで生成する頂点
    gl_Position = gl_in[0].gl_Position; // 元々の頂点の座標を取得
    gl_Position.x += 0.2;               // 少し右へずらす
    gl_PointSize=10.0;                  // 頂点サイズも変える
    vColor = vertexColor[0];            // 色は同じものを使う
    EmitVertex();                       // 頂点をラスタライザへ送る

    EndPrimitive();
}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: