我正在尝试创建一个插值曲面的示例。首先,我创建了一个插值三叶草的示例。
这里是我的例子的来源。然后我不得不注意到动画很慢,大约 20-30FPS。经过一些论文,我知道必须将三叶草的评估“移动”到 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
我可以在移动设备上使用这个版本吗?(OpenGL ES)我可以通过多线程将多个补丁传递给 GPU 吗?
非常感谢提前。