Я новичок в разработке САПР и хочу узнать кое-что об OpenGL. Моя основная цель - представить коники, циклоиды, эпициклоиды, гипоциклоиды, эвольвенты и т. д. Могу ли я напрямую представить их, используя некоторые тригонометрия, или мне нужно преобразовать эти кривые в B-сплайн? На самом деле в настоящее время я разрабатываю ядро и хочу разработать ядро, чтобы я не мог отображать вышеупомянутые кривые (нет смысла поддерживать эти кривые в ядре, если я не могу представить их графически!) Я мало знаю об OpenGL, поэтому пожалуйста, извините меня, если мой вопрос действительно глупый! Я попытался выполнить поиск по здесь, но не нашел ничего полезного.
кривые, представляемые в OpenGL
Ответы (2)
OpenGL может напрямую визуализировать кривые Безье и поверхности с помощью оценщиков и даже NURBS с помощью API GLU. Дополнительные сведения см. в Руководстве по программированию OpenGL. Таким образом, вы можете преобразовать эти кривые и поверхности в эту форму.
Но я настоятельно рекомендую вам не использовать эти функции, поскольку они устарели (исключены из ядра более новых версий OpenGL) и в настоящее время, скорее всего, реализованы в программном, а не в аппаратном обеспечении.
Вместо этого вам следует реализовать свои собственные процедуры оценки для таких кривых и поверхностей, которые оценивают соответствующие уравнения с заданной частотой дискретизации и генерируют простой массив вершин (и, возможно, и массив индексов). Таким образом, вы готовы к будущему, поскольку их можно визуализировать как стандартные линейные полосы или треугольные сетки с использованием VBO (единственный способ визуализировать что-либо в современном OpenGL).
И вы даже остаетесь независимым от API, поскольку общий массив вершин также может быть отрисован с использованием Direct3D или чего-то еще. Таким образом, вы не засоряете ядро САПР вызовами отрисовки. Все, что ему нужно, — это функция для преобразования параметрических кривых и поверхностей в массивы вершин (и, возможно, индексов), а клиент/пользователь ядра отвечает за их рисование с помощью любого API, который ему нравится.
Если я не ошибаюсь, OpenGL работает только с плоскими полигонами. Тем не менее, вы можете проверить, есть ли в библиотеках GLUT какой-либо метод рисования вышеупомянутых фигур, или найти в Google .obj этих фигур, а также масштабировать, вращать и переводить их в нужное положение.