Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Графика в делфи (эллипсоид)


Автор: Випе 11.12.2010, 17:05
Как нарисовать эллипсоид в делфи???

Автор: Alexeis 11.12.2010, 18:35
  Я бы сделал так. Из канонического уравнения выделил верхнюю и нижнюю половинку в виде 2х функция z1 = f1(x, y), z2 = f2(x, y) . Дальше по сетке получил бы матрицу координат Z1[x,y], Z2[x,y], дальше воспользовался бы одной из библиотек 3D (DirectX, OpenGL) и перечислил бы все найденные точки в качестве полигонов заданного цвета. 
  Это самый просто способ разбиения. Красивее будет смотреться если разбиение сделать в полярной системе координат с фиксированным шагом по углу фи и пси (будет более равномерное распределение), а потом преобразовать точки декартову систему координат.

Автор: Bitter 12.12.2010, 15:00
А можно еще и так: нарисовать сферу, а затем смашстабировать её по одной из осей, так как эллипсоид - это деформированная сфера.

Автор: Alexeis 12.12.2010, 15:15
Bitter, а чем проще рисовать сферу чем эллипсоид? Или ты имеешь ввиду готовый примитив сферы из вспомогательной библиотеки OpenGL?

Автор: Bitter 13.12.2010, 02:49
Alexeis, ага, или загрузить из ase, например. ну как вариант

Автор: Alexeis 13.12.2010, 10:31
Bitter, ну тогда запросто.
Ключевой код
Код

glTranslatef(0.0,0.0,-7.0);
  glRotatef(45.0,1.0,1.0,1.0);
  glColor3f(0.0,0.5,0.0);
  auxSolidSphere(1);


Соотношение сторон можно менять тут
Код

gluPerspective(45.0, 1{Width / Height}, 0.1, 100.0);


Остальной код и экзешник в атаче (переделанный урок NEHE)

Автор: Випе 13.12.2010, 20:33
А по другому нельзя?
просто openGL нельзя  использовать.

Автор: Alexeis 13.12.2010, 21:15
Цитата(Випе @  13.12.2010,  21:33 Найти цитируемый пост)
просто openGL нельзя  использовать. 

  Тогда вопрос что можно? Или вам нужно реализовать свой рендер с поддержкой рисования полигонов, z-buffer-ом, преобразованиями вида, с моделью освещения? 

Автор: Випе 13.12.2010, 21:18
Цитата(Alexeis @ 13.12.2010,  21:15)
Цитата(Випе @  13.12.2010,  21:33 Найти цитируемый пост)
просто openGL нельзя  использовать. 

  Тогда вопрос что можно? Или вам нужно реализовать свой рендер с поддержкой рисования полигонов, z-buffer-ом, преобразованиями вида, с моделью освещения?

Нет)
мне нужна самая простая реализация.
чтобы эллипсоид рисовался в виде сетки.


Автор: Alexeis 13.12.2010, 21:27
Цитата(Випе @  13.12.2010,  22:18 Найти цитируемый пост)
мне нужна самая простая реализация.

  Тогда думаю следует обратиться к http://forum.vingrad.ru/forum/topic-37776/anchor-entry284616/0.html . Есть простейший рендер 3д объектов.

Автор: Випе 13.12.2010, 21:38
программа должна быть реализована с помощью кода кода Pascal/Delphi.
вот теперь точно все условия.
простите, что сразу не сказала.

Автор: Alexeis 13.12.2010, 22:22
Цитата(Випе @  13.12.2010,  22:38 Найти цитируемый пост)
программа должна быть реализована с помощью кода кода Pascal/Delphi.

  Это я ступил. Уже так привык к С++, что не замечаю где одно а где другое.

Тогда вот такой вариант. Мой пример для рисования куба в 3D. http://forum.vingrad.ru/act-Attach/type/post/id-1098979.html

Автор: Випе 13.12.2010, 22:46
А почему exe-файл не работает?

Автор: Alexeis 13.12.2010, 22:59
Цитата(Випе @  13.12.2010,  23:46 Найти цитируемый пост)
А почему exe-файл не работает?

  Осталось выяснить какой exe. Там в примере нужно откомпилировать сначала, затем нажать кнопку start

Автор: Випе 13.12.2010, 23:12
ой)))
все, поняла)
спасибо)

сейчас попробую разобраться)

Автор: Alexeis 13.12.2010, 23:17
  Мде. Код там однако жуткий  smile Вместо того чтобы вычислять на каждом кадре новые матрицы я тупо умножал их на матрицу поворота. С точки зрения математики это безусловно верно, но чуть-чуть теряется точность. Кроме того очередная не оптимальность. 2 раза умножаю координаты на каждую из матриц (поворота Pp MultMatrix(Cube[i].P[j],Pp,NCube[i].P[j]); ) и перспективную (MultMatrix(NCube[i].P[j],P,NCube[i].P[j]);) . Следовало перемножить их сначала, а затем умножать только на одну. Но еще большая жэсть это расчет нормалей на каждом кадре, вместо того чтобы просто поворачивать их умножая на матрицу поворота.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)