0

解決策: OpenGL/GLSL でテサレーションされた LineLoops を描画する


OpenGL と GLSL を使用して、球体 (Borders on a Planet) に LineLoops を描画しています。

線を定義する点はユーザー入力によって与えられるため、球内でのクリッピングを防ぐのに十分な精度がありません。

テッセレーションやジオメトリ シェーダーを使用して既存のポイント間に追加のポイントを作成し、ポイント間の距離が特定の値を超えないようにしたいと考えています (線が球の内側でクリップしなくなりました)。

前: ここに画像の説明を入力

後: ここに画像の説明を入力

悲しいことに、テッセレーション シェーダーに関する情報はあまりないため、それらがどのように機能するかはよくわかりませんが、プリミティブを細分化できることはわかっています。

ここに私の現在の頂点シェーダーがあります:

#version 400

in layout(location = 0) vec3 position;

uniform float maxDist;
uniform float sphereRadius;
uniform mat4 view;
uniform mat4 projection;

void main()
{
    gl_Position = projection * view * vec4(position, 1.0);
}

Tessalation/Geometry Shaders を使用して、ポイント間にさらに頂点を作成し、新しく作成された頂点をオフセットして、指定されたsphereRadius均一な長さになるようにするにはどうすればよいですか?

行ごとに 1 つの細分を行うソリューションを探しているわけではありません。を超えないポイント間の特定の距離を取得するために必要な数のサブディビジョンを実行するソリューションを探しますmaxDist


私は現在、次のように描いています。

glBindVertexArray(_vao);
glDrawArrays(GL_LINE_LOOP, 0, _size);
glBindVertexArray(0);
4

0 に答える 0