Как правило, вы идете в правильном направлении. Однако вы пропустили важный шаг, который вам придется разделить патч на более мелкие квадраты (тесселяйте его). Таким образом, вы не просто перебираете точки выборки, вы перебираете патчи и должны генерировать 4 точки выборки для каждого патча.
Также вам необходимо указать нормали вершин. Нормы вершин задаются путем взятия перекрестного произведения векторов δ {x, y, z} / δu и δ {x, y, z} / δv
РЕДАКТИРОВАТЬ из-за комментария
Пример кода для выдачи независимых четырехугольников:
const int patches_x, patches_y;
const float patch_size_x, patch_size_y;
int px, py;
for(px = 0; px < patches_x; px++) for(py = 0; py < patches_y; py++) {
const float U = px * patch_size_x;
const float V = py * patch_size_y;
{
float u, v;
u = U - patch_size_x/2.0;
v = V - patch_size_y/2.0;
emit_quad_vertex(u, v);
}
{
float u, v;
u = U + patch_size_x/2.0;
v = V - patch_size_y/2.0;
emit_quad_vertex(u, v);
}
{
float u, v;
u = U + patch_size_x/2.0;
v = V + patch_size_y/2.0;
emit_quad_vertex(u, v);
}
{
float u, v;
u = U - patch_size_x/2.0;
v = V + patch_size_y/2.0;
emit_quad_vertex(u, v);
}
}