Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ и координаты в OpenGL / 2 сообщений из 2, страница 1 из 1
07.11.2013, 23:41
    #38457103
Freimaks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и координаты в OpenGL
Всем привет!
Решил немного поизучать 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
15.11.2013, 15:21
    #38466557
pirovindos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C++ и координаты в OpenGL
А в какой системе координат эти точки
MinX=938059.99 MaxX=940978.32
MinY=6641968.24 MaxY=6646082.34
на поверхности Земли?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ и координаты в OpenGL / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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