powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ и координаты в OpenGL
2 сообщений из 2, страница 1 из 1
C++ и координаты в OpenGL
    #38457103
Freimaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Решил немного поизучать OpenGL, посмотрел уроки, попробовал порисовать сферы, прямоугольники, треугольники и т.п., что дается в уроках. Потом решил попробовать отрисовать "реальные" объекты, а именно точки на поверхности земли.
Итак есть у меня набор точек, которые лежат в пределах:
MinX=938059.99 MaxX=940978.32
MinY=6641968.24 MaxY=6646082.34
MinZ=840.12 MaxZ=912.11.

Есть такой код (почти все взято из уроков):
Код: plaintext
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.
void __fastcall TFormView1::FormCreate(TObject *Sender)
{
   ghDC = GetDC(Handle);
   if (!bSetupPixelFormat(ghDC)) Close();
   ghRC = wglCreateContext(ghDC);
   wglMakeCurrent(ghDC, ghRC);
   glClearColor(0.3, 0.3, 0.3, 0.0);
   FormResize(Sender);
}

void __fastcall TFormView1::FormResize(TObject *Sender)
{
  glViewport(10, 5, 300, 200);
  glMatrixMode ( GL_PROJECTION );
  glLoadIdentity();
  glOrtho( MinX,MaxX, MinY,MaxY, MinZ,MaxZ );
  
  glMatrixMode ( GL_MODELVIEW );
  glLoadIdentity();
  gluLookAt( (MaxX-MinX)/2.0, (MaxY-MinY)/2.0, (MaxZ-MinZ)/2.0, 
                  (MaxX-MinX)/2.0, (MaxY-MinY)/2.0, (MaxZ-MinZ)/2.0 + 1.0, 
                 0.0, 1.0, 0.0 );
  InvalidateRect ( Handle, NULL, False );
}
 
void __fastcall TFormView1::FormClose(TObject *Sender, TCloseAction &Action)
{
  if(ghRC)
  {
    wglMakeCurrent(ghDC,0);
    wglDeleteContext(ghRC);
  }
  if(ghDC)ReleaseDC(Handle, ghDC);
}

void __fastcall TFormView1::FormPaint(TObject *Sender)
{
  glClear( GL_DEPTH_BUFFER_BIT |  GL_COLOR_BUFFER_BIT );
 
  glPointSize(2);
  glColor3f(0.0,0.0,1.0);
  
  glBegin(GL_POINTS);
  for (int i=0; i<Form1->PointCount; i++)
  {
    if (MinX>Form1->Files[i].X) MinX=Form1->Files[i].X;
    if (MinY>Form1->Files[i].Y) MinY=Form1->Files[i].Y;
    if (MinZ>Form1->Files[i].Z) MinZ=Form1->Files[i].Z;
 
    if (MaxX<Form1->Files[i].X) MaxX=Form1->Files[i].X;
    if (MaxY<Form1->Files[i].Y) MaxY=Form1->Files[i].Y;
    if (MaxZ<Form1->Files[i].Z) MaxZ=Form1->Files[i].Z;
 
 
    glVertex3d(Form1->Files[i].X, Form1->Files[i].Y, Form1->Files[i].Z);
  }
  glEnd();
 
      //+X
    glColor3f(1,0,0);
    glBegin(GL_LINES);
    glVertex3f(MinX+10,MinY,MinZ);
    glVertex3f(MaxX+10,MinY,MinZ);
    glEnd();
 
    //+Y
    glColor3f(0,1,0);
    glBegin(GL_LINES);
    glVertex3f(MinX,MinY+10,MinZ);
    glVertex3f(MinX,MaxY+10,MinZ);
    glEnd();
 
    //+Z
    glColor3f(0,0,1);
    glBegin(GL_LINES);
    glVertex3f(MinX,MinY,MinZ);
    glVertex3f(MinX,MinY,MaxZ);
    glEnd();
 
  SwapBuffers(ghDC);
}


Вроде все правильно - ну мне так кажется, но ни одной точки я не вижу (а их загружено несколько миллионов).
Если закомментировать gluLookAt, то видно маленький синий прямоугольник (точки то я гружу тоже синего цвета).
Может ли кто-нибудь объяснить, что именно я делаю не так? Я понимаю, что ошибка скорее всего кроется в FormResize, но что там не так я понять не могу...
...
Рейтинг: 0 / 0
C++ и координаты в OpenGL
    #38466557
pirovindos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в какой системе координат эти точки
MinX=938059.99 MaxX=940978.32
MinY=6641968.24 MaxY=6646082.34
на поверхности Земли?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ и координаты в OpenGL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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