powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OpenGL и пару "школьных" вопросов
16 сообщений из 16, страница 1 из 1
OpenGL и пару "школьных" вопросов
    #38310748
Добрый день форумчане!

Пытаюсь изучать OpenGL На данный момент просто осваиваю координирование в пространстве матрицы и прочее.

Пока на 2D построениях.

Вопроса возникло пока 2.

1. Каким образом при изменение окна отображения (glViewport) соблюдать пропорции объектов.
Считать самому через glScalef или есть какие то другие варианты?

Код изменения положения и масштаба.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure UpdatePosition;

 glViewport (0, 0, Panel1.ClientWidth, Panel1.ClientHeight);

glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
 sBoundingBox.fMaxX:=100.0;
 sBoundingBox.fMaxY:=100.0;
 sBoundingBox.fMinX:=-100.0;
 sBoundingBox.fMinY:=-100.0;
  glOrtho(
    sBoundingBox.fMinX,
    sBoundingBox.fMaxX,
    sBoundingBox.fMinY,
    sBoundingBox.fMaxY,-1,1);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;

  glScalef( Scale, Scale, 1);
  glTranslatef( XPosition , YPosition , 0 );



И второй вопрос. При изменении положения каждый раз требуется перерисовка всей сцены или можно просто менять положение и параметры "камеры". У меня не получилось без полной перерисовки.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38310953
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Григорий Поверенный,

Попробуй почитать. Автор капитанет четь менее чем в половине случаев, но как стартовый обзорный толчок - хватит.
http://www.elite-games.ru/art/program/jurlessindex.shtml
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38310961
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Григорий Поверенный,

А вообще...
1) При 2d у тебя должна быть ортогональная камера, которая сама решает проблемы скаллинга.
2) Надо перерисовывать, так как вообще все могло измениться. Вообще надо перерисовывать почти всегда. Или у тебя статичная картинка? Если статика, то рендер в текстуру и ей елозить.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38310981
WarstoneГригорий Поверенный,

А вообще...
1) При 2d у тебя должна быть ортогональная камера, которая сама решает проблемы скаллинга.

если размеры окна пропорциональны то всё нормально. Если нет, то всё растягивается.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38311013
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Григорий Поверенный,

Значит надо менять камеру при изменении размеров. Я напрочь не помню как это делается, но это делается.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38311791
Пока прихожу к выводу, что остаётся glScalef( Scale, Scale, 1) с коэффициентами разницы по осям.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38312120
Фотография QEOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
  glViewport(0, 0, ViewX, ViewY);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(world.Fov, ViewX/ViewY, NearClipping, FarClipping);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38313521
QEOS,

Да это решает проблему сохранения отношения сторон.
Остаётся проблема сохранения масштаба. Короче стереометрию в руки...
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38313531
Григорий Поверенный,

Можно заменить на

nRange := 100.0;

if (w <= h) then
glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange)
else
glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);

После зумироватся и перемещаться на нужную точку. Так как то понятней получается:-)
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38313588
Фотография QEOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Григорий ПоверенныйQEOS,

Да это решает проблему сохранения отношения сторон.
Остаётся проблема сохранения масштаба. Короче стереометрию в руки...
масштаб? что за масштаб? glScale
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38313589
Фотография QEOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати пользуясь случаем:

Если ктото делал онлайн игры от первого/третьего лица или подобное -- то готов обсудить выкуп или участие в проекте
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38313672
Да проблема в корректном вычислении коэффициента масштаба что бы при изменении размеров окна, объекты сохраняли своё положение и размеры.

Выкладываю примерчик. Грубовато не бейте сильно.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38313673
dglOpenGL не влез.
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38316581
В общем решил пока таким образом -

Код: pascal
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.
GetRealPosition(const X, Y: Integer; out RealX,
  RealY: Extended);
var
    Viewport:TGLVectori4;
    mvMatrix,ProjMatrix: TGLMatrixd4;
    Ytemp:GLInt;
    wx,wy,wz:TGLdouble;
    ZVal:GLFloat;
begin
    glGetIntegerV(GL_ViewPort,@Viewport);
    glGetDoubleV(GL_ModelView_Matrix,@mvMatrix);
    glGetDoubleV(GL_Projection_Matrix,@ProjMatrix);
    Ytemp:=ViewPort[3]-Y-1;
    glReadPixels(X,Ytemp,1,1,GL_Depth_Component,GL_Float,@ZVal);
    gluUnProject(X,Ytemp,ZVal,mvMatrix,ProjMatrix,Viewport,@wx,@wy,@wz);
    RealX := wx;
    RealY := wy;
    // wx,wy,wz - искомые пространственные координаты
end;

UpdatePosition(AResized: Boolean = False);
var
  XLow, YLow, XLow1, YLow1: Extended;
  XHigh, YHigh: Extended;
  nRange: GLfloat;
  w, h: Integer;
begin
  glViewport (0, 0, Panel1.ClientWidth, Panel1.ClientHeight);
  glLoadIdentity();
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  nRange := 100.0;
  w := ClientWidth;      // check new client width of the main window
  h := ClientHeight;     // check new client height of the main window
  if(h = 0) then            // prevent a division by zero, by making sure that
    h := 1;               // windows height is at least 1
  glViewport(0, 0, w, h);         // reset viewport
  glMatrixMode(GL_PROJECTION);    // add perspective to scene
  glLoadIdentity();               // restore matrix to original state

  if (w <= h) then
      glOrtho (-nRange, nRange, -nRange, nRange*(h/w), -nRange, nRange)
  else
	  glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glScalef( 1 , 1, 1);
  GetRealPosition(0,0,XLow,YLow);
  GetRealPosition(1,1,XLow1,YLow1);
  XHigh := XLow1 - XLow;
  YHigh := YLow1 - YLow;
  glScalef( Scale*XHigh , Scale *YHigh, 1);
  glTranslatef( XPosition , YPosition , 0 );
...
Рейтинг: 0 / 0
OpenGL и пару "школьных" вопросов
    #38317157
В общем получилось что то более менее работающее.

На отрисовку около 15 тыс полигонов различной сложности приходится не много времени, но скорость конечно зависит от видеокарты процессора и тд. Скажем так, не особо удовлетворительная. На старой машинке уже заметна пауза от рисовки. Да и постоянное рисование объектов, не корректная реализация.

Вообще стоит ли использовать OpenGL для 2D в качестве ГИС?

Есть ли у кого то опыт такой реализации?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
OpenGL и пару "школьных" вопросов
    #39952415
Фотография Flying-home
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Григорий, что-нибудь придумали? Куда-нибудь продвинулись?
Тоже задумался об использовании OpenGL в картографии, но мне проще, я не собираюсь отрисовывать каждый объект отдельно. Сперва все в растр, потом растр - в текстуру.
У меня другая проблема - энергосбережение. Хочу использовать устройства на аккумуляторах.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OpenGL и пару "школьных" вопросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]