Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
1

Прозрачная полусфера (купол), в основании которой шар

14.11.2014, 20:11. Просмотров 1533. Ответов 20
Метки нет (Все метки)

Всем доброго времени суток, есть небольшое задание нарисовать прозрачный купол, в которой вписан шар, в шаре есть пересечения, которые с помощью интегралов я интегрировал, то-есть как из заданного расстояния сделал большее количество пересечении, с помощью производных и интегралов, математически задание я решил, вопросы такие, что стоит лучше использовать OpenGL или просто с помощью Canvas, ну на канвасе я думаю будет не так просто, а вот смотрю больше в сторону OpenGL, и можно либо связать 2 модуля, в 1 будут радиус и прочее мат. данные, а во второй будет собственно рисунок, так возможно ли это сделать, и какие знания нужны для рисования купола, и шар в его основании и в дальнейшем уже пересечении, я читал не мало уроков в интернете, но в основном там пример поданы в с++, что можете посоветовать, подсказать, общался с преподавателем, и он сказал, что если я математически все решил, то нарисовать все можно по трафарету рисунков, трехмерных фигур, вообщем надеюсь на ваши советы.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2014, 20:11
Ответы с готовыми решениями:

Полусфера с квадратом в основании
Здравствуйте! Подскажите как можно сделать полусферу с квадратом в основании. На скриншоте...

Прозрачная сфера или шар, кому что больше нравится
Может кто делал уже. Подскажите... Возникла необходимость сделать сферу (ну или шар "с плоским...

В купол (формы полусферы) заливают жидкость сверху; вывести высоту, при которой жидкость начнёт вытекать
В купол полусферической формы сверху заливают жидкость плотности P. Масса Купола M и его внутренний...

Какова вероятность вынуть из урны: белый шар; черный шар; синий шар
В урне 3 белых и 5 черных шара. Какова вероятность вынуть из урны: а) белый шар б) черный шар...

Рекурсия: вывести фигуру, в основании которой лежит квадрат
Помогите написать программу в Delphi которая выводит на экран дисплея в графическом режиме...

20
mss
2638 / 2262 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
14.11.2014, 21:14 2
Цитата Сообщение от skinex Посмотреть сообщение
какие знания нужны для рисования купола
Да никакие)
Он же по заданию прозрачный, хоть обрисуйся - все равно никто его не увидит)

Не по теме:

Цитата Сообщение от skinex Посмотреть сообщение
в шаре есть пересечения, которые с помощью интегралов я интегрировал
Прямо какой-то поток высшего сознания).. Или дикого словоблудия)

0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
14.11.2014, 21:27  [ТС] 3
Mss, по поводу первого замечания, есть такая вещь AlphaSkin, это означает что через купол можно будет смотреть на шар который в основе. По поводу второго, не какого высшего сознания там и не было, чтобы расположить пересечения, так чтобы свободного места осталось как можно меньше, необходимо интегрировать их под размер самого шара, возможно что-то не понятно, я надеюсь я дал ответы на ваши замечания/вопросы.
0
mss
2638 / 2262 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
14.11.2014, 21:39 4
Цитата Сообщение от skinex Посмотреть сообщение
есть такая вещь AlphaSkin, это означает что через купол можно будет смотреть
Ничего это не означает, кроме одного - слышал ты звон, да не знаешь где он)

Цитата Сообщение от skinex Посмотреть сообщение
чтобы расположить пересечения
Да какие такие "пересечения" ? Кто с кем у тебя там "пересёкся" ?)
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
14.11.2014, 22:09  [ТС] 5
Ну можно сказать так, это такой интересный дом, а комнаты этого дома я думаю показать пересечением, ну эту тему пересечение фигур плоскостью это из стереометрии, я наверно говорю очевидные вещи, да и по поводу Текстуры с альфа каналом, когда я работал с 3ds max, данная текстура оставляла контур фигуры, и позволяли смотреть внутрь фигуры.
0
mss
2638 / 2262 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
14.11.2014, 22:15 6
Цитата Сообщение от skinex Посмотреть сообщение
это такой интересный дом, а комнаты этого дома я думаю показать пересечением
Шарообразный что ли ?)

Цитата Сообщение от skinex Посмотреть сообщение
Текстуры с альфа каналом, когда я работал с 3ds max
К AlphaSkins эта 3D-кухня отношения не имеет
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
14.11.2014, 22:22  [ТС] 7
Дом купольный, в основании шар, извиняюсь, что не верно сформулировал, ибо с 3D работал только в максе, я надеюсь я смог полностью донести, но вопросы остаются прежними, я думаю что на канве, будет сложнее это рисовать, чем на opengl, ну вообщем вопрос полностью я описал в шапке темы.
0
mss
2638 / 2262 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
14.11.2014, 22:33 8
Цитата Сообщение от skinex Посмотреть сообщение
с 3D работал только в максе
На так и создай в нем проект, строящий нужную сцену..

Потом компильнешь ее средствами Макса (или какими-нибудь сторонними утилитами) в формат, с которым умеет работать OpenGL или Direct3D - и они отрендерят сцену в окне твоего приложения не хуже Макса..

И всех делов)
А то понесло тебя в "пересечения", "интегралы", "дифференциалы" и прочие заумные слова))))
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
14.11.2014, 22:45  [ТС] 9
Ну 3D max для этого не подойдет, это будет программа, меня не куда несло, значения вводимые пользователями все таки динамические, 3д Макс, все же для создания 3д моделей, а для максимизации пересечений, нужно пользоватся математикой НО Это НЕВАЖНО!!! Возможно ли такое нарисовать с опенгл, не будем угляблятся пока в математику, а именно по даному радиусу нарисовать купол, купол это полусфера, снова очевидные вещи, как быть с пересечениями, разберусь сам, именно купол и шар в его основании, на Делфи.
0
mss
2638 / 2262 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
14.11.2014, 22:52 10
Цитата Сообщение от skinex Посмотреть сообщение
Возможно ли такое нарисовать с опенгл
Конечно возможно)
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
15.11.2014, 21:58  [ТС] 11

Не по теме:

От души)8-)



Добавлено через 9 часов 18 минут
Я не прошу нарисовать за меня, я спрашивал, что для этого нужно(руки понятно), но что именно из opengl для delphi нужно прочитать, какими методами в opengl с этим нужно работать.

Добавлено через 13 часов 30 минут
Что нет еще нужных материалов?
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
02.12.2014, 15:35  [ТС] 12
Так, что не кто нечего не ответит?
0
snake32
1687 / 1134 / 202
Регистрация: 26.02.2009
Сообщений: 4,208
Записей в блоге: 5
03.12.2014, 14:02 13
skinex, для начала скачайте модуль dglOpenGL.pas
http://wiki.delphigl.com/index.php/dglOpenGL.pas
потом изучайте примеры:
http://wiki.delphigl.com/index.php/Tutorial
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
03.12.2014, 16:50  [ТС] 14
Вот попробовал сделать кое-что сам с помощью DGlut
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGL, DGLUT;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  HRC : HGLRC ;
  DC: HDC;
  angle: single;
implementation
 
{$R *.dfm}
 
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 TForm1.FormCreate(Sender: TObject);
begin
  DC:= GetDC(Form1.Handle);
  SetDCPixelFormat(DC);
  hrc := wglCreateContext(DC);
  wglMakeCurrent(DC, hrc);
 
  glEnable(GL_DEPTH_TEST); // âêëþ÷Г*ГҐГ¬ ïðîâåðêó Г°Г*çðåøåГ*ГЁГї ГґГЁГЈГіГ° (âïåðåäè ñòîÿùГ*Гї Г§Г*êðûâГ*ГҐГІ ôèãóðó Г§Г* Г*ГҐГ©)
  glDepthFunc(GL_LEQUAL); //ГІГЁГЇ ïðîâåðêè
  glEnable(GL_LIGHTING);  //âêëþ÷Г*ГҐГ¬ îñâåùåГ*ГЁГҐ
  glEnable(GL_LIGHT0);    //âêëþ÷Г*ГҐГ¬ èñòî÷Г*ГЁГЄ Г±ГўГҐГІГ* В№0
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
 FormResize(Sender);//Обновление
 
  if GetAsyncKeyState(VK_LEFT)<>0 then angle:=angle+0.5;
  if GetAsyncKeyState(VK_RIGHT)<>0 then angle:=angle-0.5;
 
 glClearColor (0.5, 0.5, 0.75, 1.0); // öâåò ГґГ®Г*Г*
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
 
 
 glRotatef(angle,0,0,1);
 
 glpushMatrix;
 glTranslatef(5,0,0);
 glutSolidSphere(2,20,20);   // Сфера
 glPopmatrix;
 
 
SwapBuffers(Canvas.Handle);
end;
 
procedure TForm1.FormResize(Sender: TObject);
begin
  glViewport(0, 0, ClientWidth, ClientHeight);
  glMatrixMode ( GL_PROJECTION ); 
  glLoadIdentity;  
  glFrustum ( -1 , 1 , -1 , 1 , 1.25 , 100.0 ); 
  glMatrixMode ( GL_MODELVIEW ); 
  glLoadIdentity;
  gluLookAt(5,5,5,0,0,0,0,0,1); 
  InvalidateRect ( Handle,nil,False );  
end;
 
end.
А что может dglOpenGL, в нем есть функцию для подобного рода действий, открыл туториал, вроде бы он на немецком, а иностранных языков кроме как английского не знаю, если можно расскажите чуть поподробнее.
0
snake32
1687 / 1134 / 202
Регистрация: 26.02.2009
Сообщений: 4,208
Записей в блоге: 5
03.12.2014, 18:06 15
Цитата Сообщение от skinex Посмотреть сообщение
А что может dglOpenGL, в нем есть функцию для подобного рода действий
dglOpenGL - это всего лишь заголовки OpenGL ф-ии и удобная инициализация их с учётом расширений коих немереное кол-во. Максимальная текущая версия 4,4. Этого вполне достаточно чтобы решать почти любые графические задачи. Сейчас официально есть OpenGL 4.5. Как видите dglOpenGL не сильно отстаёт.

Чтобы переписать ваш код под dglOpenGL нужно лишь изменить инициализацию/финализацию OpenGL. Остальные названия ф-ий одинаковы. Разве что нет glutSolidSphere вместо неё есть gluSphere
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dglOpenGL;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  HRC : HGLRC ;
  DC: HDC;
  angle: single;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  DC := GetDC(Handle);
 
  HRC := CreateRenderingContext( DC, [opDoubleBuffered], 32,32, 0, 0, 0, 0 );
  ActivateRenderingContext( DC, HRC );
 
  glEnable(GL_DEPTH_TEST); // включаем проверку разрешения фигур (впереди стоящая закрывает фигуру за ней)
  glDepthFunc(GL_LEQUAL); //тип проверки
  glEnable(GL_LIGHTING);  //включаем освещение
  glEnable(GL_LIGHT0);    //включаем источник света №0
end;
 
procedure TForm1.FormPaint(Sender: TObject);
  var q:PGLUquadric;
begin
 FormResize(Sender);//Обновление
 
  if GetAsyncKeyState(VK_LEFT)<>0 then angle:=angle+0.5;
  if GetAsyncKeyState(VK_RIGHT)<>0 then angle:=angle-0.5;
 
 glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
 
 
 glRotatef(angle,0,0,1);
 
 glpushMatrix;
 glTranslatef(5,0,0);
 
 q := gluNewQuadric;
 gluSphere( q, 2, 20, 20 );   // Сфера
 gluDeleteQuadric( q );
 
 glPopmatrix;
 
 
 SwapBuffers( DC );
end;
 
procedure TForm1.FormResize(Sender: TObject);
begin
  glViewport(0, 0, ClientWidth, ClientHeight);
  glMatrixMode ( GL_PROJECTION );
  glLoadIdentity;
  glFrustum ( -1 , 1 , -1 , 1 , 1.25 , 100.0 );
  glMatrixMode ( GL_MODELVIEW );
  glLoadIdentity;
  gluLookAt(5,5,5,0,0,0,0,0,1);
  InvalidateRect ( Handle,nil,False );
end;
 
end.
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
03.12.2014, 21:58  [ТС] 16
snake32, а в dglOpengl есть функция для купола(полусферы), и есть ли возможность вписывания одной объемной фигуры в другую?
0
snake32
1687 / 1134 / 202
Регистрация: 26.02.2009
Сообщений: 4,208
Записей в блоге: 5
03.12.2014, 23:06 17
Нет. Но из треугольников можно построить абсолютно любую фигуру.
0
skinex
4 / 4 / 4
Регистрация: 09.03.2013
Сообщений: 209
Завершенные тесты: 2
04.12.2014, 07:47  [ТС] 18
snake32, Если я верно помню, то сферу получают в результате вращения круга, я еще конечно не силен в opengl, поэтому слабо представляю купол из треугольников, возможно есть какой-то небольшой пример?
0
snake32
1687 / 1134 / 202
Регистрация: 26.02.2009
Сообщений: 4,208
Записей в блоге: 5
04.12.2014, 11:33 19
Цитата Сообщение от skinex Посмотреть сообщение
я еще конечно не силен в opengl, поэтому слабо представляю купол из треугольников
OpenGL тут не при делах. Ему нужны только координаты вершин. А что бы их вычислить достаточно знаний тригонометрии. Которые получают в старших классах в школе. Никакие интегралы интегрировать не нужно.
Вам же достаточно посмотреть формулы сферической системы координат и перевод их в декартову.
Для начала просто с генерируйте вершины в массив points и выведите их с помощью точек в OpenGL. То есть вам вместо вывода сферы glutSolidSphere нужно что-то типа этого:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
type
  TVec3 = packed record
    x,y,z:GLfloat;
  end;
  
var points:array of TVec3;
 
// вместо glutSolidSphere
glBegin( GL_POINTS );
for i:=0 to Length(points)-1 do
  glVertex3fv( @points[i] );
glEnd();
0
Vabos
120 / 120 / 28
Регистрация: 12.12.2011
Сообщений: 421
04.12.2014, 16:53 20
М.Краснов OpenGL, графика в проектах Delphi
1
04.12.2014, 16:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2014, 16:53

Построить пирамиду, в основании которой лежит правильный десятиугольник
построить пирамиду, в основании которой лежит правильный десятиугольник. Фигура должна быть синего...

Фигуру заменить на пирамиду, в основании которой лежит правильный десятиугольник
Фигуру заменить на пирамиду, в основании которой лежит правильный десятиугольник. Фигура должна...

Вычислить объем фигуры, у которой в основании сектор окружности с заданными параметрами
помогите с формулой есть класс дуга в нем есть параметры радиус окружности и угол в радианах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru