Скажите правильно я понимаю? Что в OpenGL уже есть функции NURBS кривых, поверхностей, и операций с ними (отрезание, сшивка и т.д)
И знание математики только поможет в программировании, но не кретично?
И я так понял, что велосипед изобретать мне не прийдеться, все функции для работы с NURBS уже написаны в GL , надо их просто применить правильно?
Если все так, тогда зачем написали библиотеку OpenNurbs, Nurbana и в чем их принципиальные отличия от GL ?
Я вот в умной книге прочитал что одним из хороших правил программиста - это использование уже готового кода! Может взять функции GL и испоьзовать для своей проги? Есть ли в GL функции по подсчету , площади, сил которые приложены на поверхность или кривую и т.д.?
NURBS OpenGL
Модератор: Модераторы разделов
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: NURBS OpenGL
OpenGL не содержит функций по работе с NURBS. Однако там есть evalutor (glMap*, glEvalCoord*) для работы с кривыми Безье. В дополнительной библиотеке GLU содержатся уже и функции по работе с NURBS (они основаны на преобразовании в кривые и порции Безье, но это всё скрыто). В том числе там есть и базовые вещи, совершаемые над несколькими NURBS.
Но нужно учесть, что эти функции ориентированы на отрисовку, а не пересчёт. Т.е. возможно для Вашей задачи (я так понимаю, всё то же - архитектура?) функциональность GLU не будет подходить.
Но нужно учесть, что эти функции ориентированы на отрисовку, а не пересчёт. Т.е. возможно для Вашей задачи (я так понимаю, всё то же - архитектура?) функциональность GLU не будет подходить.
-
Ink-85
- Сообщения: 222
- Статус: полный привет
- ОС: Mac OS, Ubuntu 8.04
-
begin2009
- Сообщения: 349
- Статус: Ламер со стажем
- ОС: без глюков
Re: NURBS OpenGL
Оно не совсем так.
Этот кусок я взял из главы 3 в книге Краснова "OpenGL в проектах delphi". Там есть примеры кода.
Получается горбатая поверхность. Если есть пример, то переписать для другого языка можно.
NURBS-поверхности
Один из классов В-сплайнов, рациональные В-сплайны, задаваемые на неравномерной сетке (Non-Uniform Rational B-Spline, NURBS), является стандартным для компьютерной графики способом определения параметрических кривых и поверхностей.
Библиотека glu предоставляет набор команд, позволяющих использовать этот класс поверхностей.
Для работы с NURBS-поверхностями в библиотеке glu имеются переменные специального типа, используемые для идентификации объектов:
theNurb: gluNurbsObj;
При создании окна объект, как обычно, создается:
theNurb: = gluNewNurbsRenderer;
А в конце работы приложения память, занимаемая объектом, высвобождается:
gluDeleteNurbsRenderer (theNurb);
Этот кусок я взял из главы 3 в книге Краснова "OpenGL в проектах delphi". Там есть примеры кода.
Код: Выделить всё
{**********************************************************************}
{* Иллюстрация к книге "OpenGL в проектах Delphi" *}
{* Краснов М.В. softgl@chat.ru *}
{**********************************************************************}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormResize(Sender: TObject);
private
DC : HDC;
hrc: HGLRC;
end;
var
frmGL: TfrmGL;
theNurb : GLUnurbsObj;
implementation
{$R *.DFM}
const
ctrlpoints : Array [0..3, 0..2] of GLfloat =
(( -4.0, -4.0, 0.0), (-2.0, 4.0, 0.0),
(2.0, -4.0, 0.0), (4.0, 4.0, 0.0));
curveKnots : Array [0..7] of GLfloat =
(0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0);
{=======================================================================
Перерисовка окна}
procedure TfrmGL.FormPaint(Sender: TObject);
var
i : GLint;
begin
glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
glColor3f(1.0, 1.0, 1.0);
gluNurbsCurve (theNurb, 8, @curveKnots, 3,
@ctrlpoints, 4, GL_MAP1_VERTEX_3);
glPointSize(5.0);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
For i := 0 to 3 do
glVertex3fv(@ctrlpoints[i][0]);
glEnd;
SwapBuffers(DC);
end;
{=======================================================================
Формат пикселя}
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
{=======================================================================
Создание формы}
procedure TfrmGL.FormCreate(Sender: TObject);
begin
DC := GetDC (Handle);
SetDCPixelFormat(DC);
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
theNurb := gluNewNurbsRenderer;
gluNurbsProperty (theNurb, GLU_SAMPLING_TOLERANCE, 25.0);
end;
{=======================================================================
Конец работы приложения}
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
gluDeleteNurbsRenderer(theNurb);
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC (Handle, DC);
DeleteDC (DC);
end;
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
end;
procedure TfrmGL.FormResize(Sender: TObject);
begin
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
If ClientWidth <= ClientHeight
then glOrtho(-5.0, 5.0, -5.0*ClientHeight / ClientWidth,
5.0*ClientHeight / ClientWidth, -5.0, 5.0)
else glOrtho(-5.0*ClientWidth / ClientHeight,
5.0*ClientWidth / ClientHeight, -5.0, 5.0, -5.0, 5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
InvalidateRect(Handle, nil, False);
end;
end.Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
И только машинист видит этих трех идиотов, сидящих на рельсах.
-
Ink-85
- Сообщения: 222
- Статус: полный привет
- ОС: Mac OS, Ubuntu 8.04
Re: NURBS OpenGL
Спасибо за пример. Я сейчас читаю:
Интерактивня комп. графика. Эдвард Эйннджел
The NURBS Book
Ну и СУПЕР книга по GL
Хорошие книги
Интерактивня комп. графика. Эдвард Эйннджел
The NURBS Book
Ну и СУПЕР книга по GL
Хорошие книги