Итак, я объясню, как мне поступить, используя C ++ и OpenGL.Это не означает, что это инструменты, которые вы должны использовать, это просто стандартные графические инструменты.
Поверхность вашей функции - это, по сути, двумерный манифольд, который обладает приятным свойством иметь интуитивно понятное отображение на 2Dпространство.То, что обычно называют UV-отображением.
Что вам нужно сделать, это выбрать диапазоны для области прямоугольника, которую вы хотите отобразить (минимум x, максимум x, минимум y, максимум y) и сделать 2 вложенными для цикловв форме:
// Pseudocode
for (x=minimum; x<maximum; x++)
for (y=minimum; y=maximum; y++)
3D point = (x,y, f(x,y))
Сохраните все эти точки в контейнере (вектор std для c ++ отлично работает), и это будет ваша "сетка".
Это делается один раз, додля рендеринга.Затем вы визуализируете эти точки, используя, например, GL_POINTS, и вращаете сетку графика, используя вращения на графическом процессоре.
Это покажет только рассеянные точки, а не поверхность.
Если вы также хотитепоказать поверхность вашей функции, а не только точки, вы можете довольно легко триангулировать этот набор точек.
Сгруппируйте каждые 4 смежные вершины (то есть вершины с индексами <x,y>, <x+1,y>, <x+1,y>, <x+1,y+1>)
и создайте 2 треугольника:
(<x,y>, <x+1,y>, <x,y+1>), (<x+1,y>, <x+1,y+1>, <x,y+1>)
Это заполняет триангуляцию поверхности вашей сетки.
По сути, вам нужно построить ваш меш только один раз, и таким образом рендеринг должен быть 60 кадров в секунду для чего-то с 20 000 вершин, независимо от того, будете ли вы рендерить только точки или треугольники.