17 / 17 / 2
Регистрация: 19.12.2008
Сообщений: 89

Движение объекта по точкам, заданным пользователем (OpenGL)

09.04.2009, 22:21. Показов 3501. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. У меня возникла проблема, может кто то подскажет:
рисую, например, квадрат при помощи OpenGL и мене необходимо по заданным точка(вводятся пользователем, допустим 5 точек) прорисовать движение квадрата по этим точка. Вопрос, как это сделать?

Вот сделал я движение квадрата, но здесь я просто увеличиваю координаты X и Y одной точки. Подскажите пожалуйста как реализовать движение,например, по 5 точкам или если не тяжело скажите что мене надо исправить в своем коде.


P.S. OpenGL начал учить недавно. Так что не ругайтесь если че не так.

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGL, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    DC: HDC;
    hrc: HGLRC;
    procedure PixelFormat;
    procedure Paint(x,y:real);
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  ox,oy:real;
implementation
 
{$R *.dfm}
 
procedure TForm1.Paint(x,y:real);
var
 ps:TPaintStruct;
begin
glMatrixMode(GL_PROJECTION);
glLoadIdentity( ); 
if width <= height then
  glOrtho (-2, 2, -2*height/width, 2*height/width, -10.0, 10.0)
 else
  glOrtho (-2*width/height, 2*width/height, -2, 2, -10.0, 10.0);
glViewport(0, 0, width, height);
 
  BeginPaint(Handle,ps);
 
  glEnable(GL_DEPTH_TEST);
 
 glClearColor(1,0.5,0.5,1);
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 glColor3f (0.0, 1.0, 0.0);
 
 glTranslatef(x,y,0.0);//Вот это выполняет движение квадрата.
 
 glBegin(GL_QUAD_STRIP);
  glVertex3f(0.3,0.3,0.3);
  glVertex3f(0.3,-0.3,0.3);
  glVertex3f(-0.3,0.3,0);
  glVertex3f(-0.3,-0.3,0);
 glEnd;
 glDisable(GL_DEPTH_TEST);
 
 glFlush();
 swapBuffers(dc);
 EndPaint(Handle,ps);
end;
 
 
procedure TForm1.PixelFormat;
var
 nPixelFormat:Integer;
 pfd:TPixelFormatDescriptor;
begin
 FillChar(pfd,Sizeof(pfd),0);
pfd.nSize:=sizeof(pfd); 
pfd.nVersion:=1;
 pfd.dwFlags:=PFD_DOUBLEBUFFER+PFD_SUPPORT_OPENGL+
      PFD_DRAW_TO_WINDOW; 
 pfd.iPixelType:=PFD_TYPE_RGBA;
 pfd.cColorBits:=24; 
 pfd.cAlphaBits:=64;
 pfd.cAccumBits:=64;
 pfd.cDepthBits:=32;
 pfd.cStencilBits:=64;
 pfd.iLayerType:=PFD_MAIN_PLANE; 
 nPixelFormat:=ChoosePixelFormat(DC,@pfd);
 if nPixelFormat<>0 then
  SetPixelFormat(DC,nPixelFormat,@pfd);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   DC:= GetDC(Handle);
   PixelFormat;
   hrc:= wglCreateContext(DC);
   wglMakeCurrent(DC,hrc);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
   Paint(ox,oy);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
   wglMakeCurrent(0,0);
   wglDeleteContext(hrc);
   ReleaseDC(handle,DC);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   ox:= ox+0.2;
   oy:= oy+0.2;
   Paint(ox,oy);
end;
 
end.
Добавлено через 22 часа 54 минуты 25 секунд
Народ, ну может подскажите.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.04.2009, 22:21
Ответы с готовыми решениями:

Движение самолета по заданным точкам
Здравствуйте! Нужна помощь в создании игры. Есть самолет, который должен двигаться по заданным точкам. Я пытаюсь писать вот такую...

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

C++ и OpenGL движение объекта по диагонали
Изначально в задаче был падающий и вращающийся вокруг своей оси квадрат, но теперь мне нужно сделать так, чтобы он падал по диагонали....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2009, 22:21
Помогаю со студенческими работами здесь

Рандомное движение объекта по заданным траекториям
Задача: Обьект должен появиться в одном углу экрана, из этого угла он рандомно идет три других и т.д Нужно написать логику движение этого...

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

Возможно ли сделать движение зрачков, реагирующее на движение какого-либо объекта
Вообщем благодаря модеру удалось разукрасить картинку,за что ему спасибо. Нужна анимация для нее. Возможно ли сделать движение...

Сформировать меню: 1) свободное движение объекта 2)движение с клавиатуры
Сформировать на экране меню, состоящее из следующих пунктов: 1. Движение вдоль периметра экрана. Через случайное количество тактов...

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


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

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

Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru