B-Spline и NURBS, возможно ли реализация их через кривых Безье?

Тема в разделе "WASM.OpenGL", создана пользователем Arthur, 10 ноя 2009.

  1. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Доброе время суток!

    1. Есть ли реализации алгоритмов на си под OpenGL (не используя GLU)?
    2. Возможно ли использование кривых Безье для представления B-Сплайнов и NURBS? (Реализации?)

    Перечитал множество статей, нифига не понял :dntknw: В школе - алгебру и геометрию недолюбливал :dntknw:
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Arthur

    1. Если не использовать GLU, то подойдет любая реализация алгоритма, не обязательно "под OpenGL".

    Восполняй пробелы :)
     
  3. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    _DEN_

    Мне бы хватило просто функции которая бы возвращала вектор на кривой между двумя контрольными векторами в определенный момент времени.

    И если их можно построить через Безье, Достаточно привести пример без самого алгоритма построения кривой Безье. Как построить Безье с двумя контрольными точками я знаю.

    Я бы с удовольствием взял в руки учебники, только пока времени нет :) А пробелов очень много...
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Это же элементарная штука - http://en.wikipedia.org/wiki/B-spline
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Arthur

    Посоветую книгу. Там это есть и код есть и теория.

    "Ф.Хилл OpenGL. Программирование компьютерной графики"

    По поводу второго пункта.
    B-Сплайнов можно реализовать через Безье.
    А вот NURBS тоже. Так как любую кривую можно аппроксимировать кривой Безье.
     
  6. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Booster
    Ну для вас может и элементарная, а вот для меня достаточно сложная, чтобы я обратился на форум.

    Pavia
    Это хорошо :)
    Теперь вопрос только один, как вычислять такую кривую Безье чтобы получить B-Spline и NURBS?
    У меня функция вида:
    Код (Text):
    1.    // p1, p2 - начальная и конечная точка
    2.    // c1, c2 - контрольные точки (p1-c1, p2-c2) влияющие на искривление прямой.
    3.    // point3d - это структура содержащая 3-координаты (x, y, z).
    4.    void Bezier(point3d * p1, point3d * c1, point3d * c2, point3d * p2);
    Теперь я так понимаю задача сводится к тому чтобы автоматически вычислить положения контрольных точек?
    И если да, то как?

    Там описан метод построения через Безье?
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Не через кривую, а через набор кривых. Сплайн это кусочный полином. Чувствую ты не читал и читать не собираешься. А по симу я умолкаю.
     
  8. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Pavia
    Ну это вы зря :dntknw: Книга уже у меня есть. И есть так же листинг функции bSpline. Очень много функций (причем именно в математической модели а не программной на си/си++, что собственно и огорчает). Быстро пробежался и увидел что можно строить кривую Безье не с двумя контрольными, число контрольных может быть не ограниченным.

    вопрос касательно данной функции:
    Код (Text):
    1. float bSpline(int k, int m, float t, float knot[]);
    вроде с t понятно - от 0 до 1.
    а вот k и m - это вроде индексы?
    knot - что представляет из себя данный массив? какие данные он должен содержать (координаты)?