Доброе время суток! 1. Есть ли реализации алгоритмов на си под OpenGL (не используя GLU)? 2. Возможно ли использование кривых Безье для представления B-Сплайнов и NURBS? (Реализации?) Перечитал множество статей, нифига не понял В школе - алгебру и геометрию недолюбливал
Arthur 1. Если не использовать GLU, то подойдет любая реализация алгоритма, не обязательно "под OpenGL". Восполняй пробелы
_DEN_ Мне бы хватило просто функции которая бы возвращала вектор на кривой между двумя контрольными векторами в определенный момент времени. И если их можно построить через Безье, Достаточно привести пример без самого алгоритма построения кривой Безье. Как построить Безье с двумя контрольными точками я знаю. Я бы с удовольствием взял в руки учебники, только пока времени нет А пробелов очень много...
Arthur Посоветую книгу. Там это есть и код есть и теория. "Ф.Хилл OpenGL. Программирование компьютерной графики" По поводу второго пункта. B-Сплайнов можно реализовать через Безье. А вот NURBS тоже. Так как любую кривую можно аппроксимировать кривой Безье.
Booster Ну для вас может и элементарная, а вот для меня достаточно сложная, чтобы я обратился на форум. Pavia Это хорошо Теперь вопрос только один, как вычислять такую кривую Безье чтобы получить B-Spline и NURBS? У меня функция вида: Код (Text): // p1, p2 - начальная и конечная точка // c1, c2 - контрольные точки (p1-c1, p2-c2) влияющие на искривление прямой. // point3d - это структура содержащая 3-координаты (x, y, z). void Bezier(point3d * p1, point3d * c1, point3d * c2, point3d * p2); Теперь я так понимаю задача сводится к тому чтобы автоматически вычислить положения контрольных точек? И если да, то как? Там описан метод построения через Безье?
Не через кривую, а через набор кривых. Сплайн это кусочный полином. Чувствую ты не читал и читать не собираешься. А по симу я умолкаю.
Pavia Ну это вы зря Книга уже у меня есть. И есть так же листинг функции bSpline. Очень много функций (причем именно в математической модели а не программной на си/си++, что собственно и огорчает). Быстро пробежался и увидел что можно строить кривую Безье не с двумя контрольными, число контрольных может быть не ограниченным. вопрос касательно данной функции: Код (Text): float bSpline(int k, int m, float t, float knot[]); вроде с t понятно - от 0 до 1. а вот k и m - это вроде индексы? knot - что представляет из себя данный массив? какие данные он должен содержать (координаты)?