0

補間されたサーフェスの例を作成しようとしています。最初に、補間トレフォイルの例を作成しました。 ここに画像の説明を入力

ここに私の例のソースがあります。その後、アニメーションが 20 ~ 30 FPS 程度と非常に遅いことに気付きました。いくつかの論文の後、トレフォイルの評価を GPU に「移動」する必要があることがわかりました。そこで、テッセレーション シェーダーに関するいくつかの論文を調べました。現時点では、次の単純な頂点シェーダーをバインドします。

#version 130
in vec4 Position;
in vec3 Normal;

uniform mat4 Projection;
uniform mat4 Modelview;
uniform mat3 NormalMatrix;
uniform vec3 DiffuseMaterial;

out vec3 EyespaceNormal;
out vec3 Diffuse;

void main()
{
    EyespaceNormal = NormalMatrix * Normal;
    gl_Position = Projection * Modelview * Position;
    Diffuse = DiffuseMaterial;
}

今、私は複数の質問をしています:

  • Triangle_Strips で既に行ったように、頂点の配列を使用して GL_PATCHES を渡す必要がありますか? どちらの方法が速いですか?ドローエレメント?

glDrawElements(GL_TRIANGLE_STRIP, Indices.Length, OpenGL.GL_UNSIGNED_SHORT, IntPtr.Zero);

または私は使用する必要があります

glPatchParameteri(GL_PATCH_VERTICES,16);
glBegin(GL_PATCHES);
   glVertex3f(x0,y0,z0)
   ...
glEnd();
  • インデックスの配列はどうですか?パッチが渡される順序を意味するパスを決定するにはどうすればよいですか。

  • シェーダーでも法線を計算しますか?

  • テッセレーション シェーダーの例をいくつか見つけましたが、#version400 Can I use this version on mobile devices as well?(OpenGL ES) で

  • マルチスレッドで複数のパッチを GPU に渡すことはできますか?

よろしくお願いします。

4

1 に答える 1