Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OpenGL и пару "школьных" вопросов / 16 сообщений из 16, страница 1 из 1
26.06.2013, 10:35
    #38310748
OpenGL и пару "школьных" вопросов
Добрый день форумчане!

Пытаюсь изучать 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
26.06.2013, 12:05
    #38310953
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenGL и пару "школьных" вопросов
Григорий Поверенный,

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

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

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

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

Значит надо менять камеру при изменении размеров. Я напрочь не помню как это делается, но это делается.
...
Рейтинг: 0 / 0
26.06.2013, 18:46
    #38311791
OpenGL и пару "школьных" вопросов
Пока прихожу к выводу, что остаётся glScalef( Scale, Scale, 1) с коэффициентами разницы по осям.
...
Рейтинг: 0 / 0
27.06.2013, 09:05
    #38312120
QEOS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenGL и пару "школьных" вопросов
Код: 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
28.06.2013, 07:36
    #38313521
OpenGL и пару "школьных" вопросов
QEOS,

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

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

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
28.06.2013, 09:23
    #38313588
QEOS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OpenGL и пару "школьных" вопросов
Григорий ПоверенныйQEOS,

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

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

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

Код: 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
02.07.2013, 14:26
    #38317157
OpenGL и пару "школьных" вопросов
В общем получилось что то более менее работающее.

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

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

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


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