Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
1

Как построить объемную фигуру, вводя координаты после запуска?

12.05.2011, 18:53. Показов 2561. Ответов 4
Метки нет (Все метки)

Добрый день, подскажите пожалуйста, как с помощью OpenGL нарисоваь объёмную фигуру в Delphi, вводя координаты уже в запущеном ПО (через компоненты Edit ит.п.)

Добавлено через 1 час 12 минут
Ну же, не проходите мимо, подскажите пожалуйста, очень надо
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2011, 18:53
Ответы с готовыми решениями:

Как построить объемную фигуру от трех переменных
Здравствуйте! Подскажите, пожалуйста, как построить объемную фигуру, от трех перемеренных....

как нарисовать объемную фигуру на жабе?
Как нарисовать объемную фигуру, например куб, на жабе, а затем его (ее) закрасить картинкой из...

Как нарисовать объемную фигуру на жабе?
Как нарисовать объмную фигуру, например куб, на жабе, а затем его (ее) закрасить картинкой из файла...

Нужно накрыть объемную фигуру текстурами
помогите плз, нужно накрыть текстурами #pragma comment(lib, "opengl32.lib") #pragma...

4
1 / 1 / 0
Регистрация: 27.10.2010
Сообщений: 51
12.05.2011, 23:27 2
Цитата Сообщение от yar0013 Посмотреть сообщение
Добрый день, подскажите пожалуйста, как с помощью OpenGL нарисоваь объёмную фигуру в Delphi, вводя координаты уже в запущеном ПО (через компоненты Edit ит.п.)

Добавлено через 1 час 12 минут
Ну же, не проходите мимо, подскажите пожалуйста, очень надо
кидаешь на форму эдит подключаешь opengl считываешь значения из эдит закидываешь их в glVertex2f
и все

на каком шаге проблема?
1
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
13.05.2011, 15:39  [ТС] 3
Проблема на самом начальном шаге, для меня это первый опыт с openG, поэтому решил заранее узнать.
Спасибо за подсказку.
А никаких примеров кода выложить не можете?
0
85 / 85 / 59
Регистрация: 14.05.2010
Сообщений: 223
13.05.2011, 17:18 4
Вот тебе пример. Я не настаиваю, что так надо делать, но мне кажется такой подход удобным.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
//До implementation
type Zpoint = packed record
X,Y,Z: single;
end;
 
type Tbox=class
protected
FA,FB,FC,FD,FE,FF,FG,FH: Zpoint;
FX,FY,FZ: real;
fangle,FrotX,FrotY,FrotZ:extended;
FcolorR,FcolorG,FcolorB,Fcoloralpha: real;
FzoomX,FzoomY,FzoomZ:double;
public
points: array[0..7] of Zpoint;
property A: Zpoint read Fa write Fa;
property b: Zpoint read Fb write Fb;
property C: Zpoint read FC write FC;
property D: Zpoint read FD write FD;
property E: Zpoint read FE write FE;
property F: Zpoint read FF write FF;
property G: Zpoint read FG write FG;
property H: Zpoint read FH write FH;
property X: real read FX write FX;
property Y: real read FY write FY;
property Z: real read FZ write FZ;
property RotX: extended read FRotX write fRotX;
property RotY: extended read FRotY write fRotY;
property RotZ: extended read FRotZ write fRotZ;
property angle: extended read Fangle write fangle;
property ZoomX:double read FzoomX write FzoomX;
property ZoomY:double read FzoomY write FzoomY;
property ZoomZ:double read FzoomZ write FzoomZ;
property red:real read FcolorR write FcolorR;
property blue:real read FcolorB write FcolorB;
property green:real read FcolorG write FcolorG;
property alpha:real read Fcoloralpha write Fcoloralpha;
constructor create;
procedure render;
procedure SetA(nX,nY,NZ:GLfloat);
end;
 implementation
 
constructor Tbox.create;
begin
inherited create;
points[0].X:=-0.5;
points[0].Y:=0.5;
points[0].Z:=-0.5;
 
points[1].X:=0.5;
points[1].Y:=0.5;
points[1].Z:=-0.5;
 
points[2].X:=0.5;
points[2].Y:=-0.5;
points[2].Z:=-0.5;
 
points[3].X:=-0.5;
points[3].Y:=-0.5;
points[3].Z:=-0.5;
 
points[4].X:=-0.5;
points[4].Y:=0.5;
points[4].Z:=0.5;
 
points[5].X:=0.5;
points[5].Y:=0.5;
points[5].Z:=0.5;
 
points[6].X:=0.5;
points[6].Y:=-0.5;
points[6].Z:=0.5;
 
points[7].X:=-0.5;
points[7].Y:=-0.5;
points[7].Z:=0.5;
 
Fa:=points[0];
FB:=points[1];
FC:=points[2];
FD:=points[3];
FE:=points[4];
FF:=points[5];
fG:=points[6];
FH:=points[7];
 
 
red:=1;
blue:=0;
green:=1;
alpha:=1;
end;
 
procedure Tbox.render;
begin
glpushmatrix;
glcolor4f(1,0,0,1);
gltranslate(X,Y,Z);
glcolor4f(red,green,blue,alpha);
//glcolor4f(1,0,0,alpha);
// первая сторона
glbegin(GL_polygon);
glnormal3f(0,0,1);
glvertex3f(A.X,A.Y,A.Z);
glvertex3f(B.X,B.Y,B.Z);
glvertex3f(C.X,C.Y,C.Z);
glvertex3f(D.X,D.Y,D.Z);
glend;
// вторая сторона
//glcolor4f(0,0,1,alpha);
glbegin(GL_polygon);
glnormal3f(0,1,0);
glvertex3f(A.X,A.Y,A.Z);
glvertex3f(B.X,B.Y,B.Z);
glvertex3f(F.X,F.Y,F.Z);
glvertex3f(E.X,E.Y,E.Z);
glend;
// третья сторона
//glcolor4f(0,1,0,alpha);
glbegin(GL_polygon);
glvertex3f(B.X,B.Y,B.Z);
glvertex3f(C.X,C.Y,C.Z);
glvertex3f(G.X,G.Y,G.Z);
glvertex3f(f.X,f.Y,f.Z);
glend;
 
// четвёртая сторона
//glcolor4f(0,2,1,alpha);
glbegin(GL_polygon);
glvertex3f(A.X,A.Y,A.Z);
glvertex3f(D.X,D.Y,D.Z);
glvertex3f(H.X,h.Y,h.Z);
glvertex3f(E.X,E.Y,E.Z);
glend;
 
// пятая сторона
//glcolor4f(1,0,1,alpha);
glbegin(GL_polygon);
glvertex3f(E.X,E.Y,E.Z);
glvertex3f(F.X,F.Y,F.Z);
glvertex3f(G.X,G.Y,G.Z);
glvertex3f(H.X,H.Y,H.Z);
glend;
// пятая сторона
//glcolor4f(1,1,1,alpha);
glbegin(GL_polygon);
glvertex3f(d.X,D.Y,D.Z);
glvertex3f(C.X,C.Y,C.Z);
glvertex3f(G.X,G.Y,G.Z);
glvertex3f(H.X,H.Y,H.Z);
glend;
 
glpopmatrix;
 
end;
 
procedure Tbox.SetA;
begin
self.FA.X:=nX;
FA.Y:=nY;
FA.Z:=nz;
end;
 
// в начале кода ставишь переменную 
B: Tbox;
 
//при создании формы 
b:=Tbox.create;
 
// В обработке сообщения paint
B.render;
//Для изменения координат используй 
B.setA(1,1,1);
// Я не стал дописывать для остальных координат, там тоже самое доработаешь
Ну а для того, чтобы изменять динамически координаты существуют функции модуля sysutils. strtofloat и floattostr.
Там я оставил закомментированными строки в процедуре render. Это чтобы увидеть, что фигура объёмная.
Я тестировал так:
Delphi
1
2
3
4
glpushmatrix;
glrotate(angle,0.5,1,0);
B.render;
glpopmatrix;
В процедуре timer величина angle увеличивается на 5. Это позволяет увидеть все грани фигуры.
2
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 6
13.05.2011, 18:52  [ТС] 5
Спасибо, буду пробовать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2011, 18:52

Нарисовать объемную фигуру по заданным точкам
Здравствуйте. Пытаюсь как то научиться рисовать объемную фигуру, например: цилиндр или конус. Рисую...

Превращение графика формата pointplot3d в объемную фигуру или группу поверхностей
Добрый день, Имеется график, построенный при помощи функции pointplot3d множеством точек. По...

Как можно программно, после запуска программы, переместить окно программы на определенные координаты?
Как можно программно, после запуска программы, переместить окно программы на определенные...

Построить графики на логарифмической оси, построить объемную гистограмму
Всем привет! Ребята помогите плиз с таблицей! От этой таблички зависит моя сессия по информатике((...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru