Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 13:49   #1
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию Система координат в OpenGL

Всем привет!
Решил посмотреть возможности OpenGL. То, что показывается в различных уроках мне в какой-то мере понятно за исключением одного - как настраивать систему координат.
Вообще мне интересно было бы узнать как настроить отображение не сфер или треугольников из уроков, а конкретных данных.

Например, у меня есть набор точек (несколько миллионов), которые лежат в пределах координат (это реальные координаты точек на земной поверхности):
MinX=938059.99 MaxX=940978.32
MinY=6641968.24 MaxY=6646082.34
MinZ=840.12 MaxZ=912.11.

Теперь я хочу, чтобы они были отрисованы в OpenGL. Для этого из уроков у меня скопированы настройки:
Код:
BOOL bSetupPixelFormat(HDC hdc)
{
  PIXELFORMATDESCRIPTOR pfd, *ppfd;
  int pixelformat;
 
  ppfd = &pfd;
 
  ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
  ppfd->nVersion = 1;
  ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  ppfd->dwLayerMask = PFD_MAIN_PLANE;
  ppfd->iPixelType = PFD_TYPE_RGBA;
  ppfd->cColorBits = 16;
  ppfd->cDepthBits = 16;
 
  ppfd->cAccumBits = 0;
  ppfd->cStencilBits = 0;
 
  if ((pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0)
  {
    MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);
    return FALSE;
  }
  if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE)
  {
    MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);
    return FALSE;
  }
  return TRUE;
}
Код:
void __fastcall TForm6::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 TForm6::FormResize(TObject *Sender)
{
  glViewport(0, 0, Width, Height);
  glMatrixMode ( GL_PROJECTION );
  glLoadIdentity();
  glOrtho(MinX,MaxX, MinY,MaxY, MinZ,MaxZ);
  glMatrixMode ( GL_MODELVIEW );
  glLoadIdentity();
}
Код:
void __fastcall TForm6::FormClose(TObject *Sender, TCloseAction &Action)
{
  if(ghRC)
  {
    wglMakeCurrent(ghDC,0);
    wglDeleteContext(ghRC);
  }
  if(ghDC)ReleaseDC(Handle, ghDC);
}
Код:
void __fastcall TForm6::FormPaint(TObject *Sender)
{
  glClear(GL_DEPTH_BUFFER_BIT |  GL_COLOR_BUFFER_BIT);
 
  glColor3f(0.0,0.0,1.0);
  glPointSize(2);

  glBegin(GL_POINTS);
  for (int i=0; i<Form1->BinFiles[0].Ns(); i++)
  {
    if (MinX>Form1->BinFiles[0][i].RealX()) MinX=Form1->BinFiles[0][i].RealX();
    if (MinY>Form1->BinFiles[0][i].RealY()) MinY=Form1->BinFiles[0][i].RealY();
    if (MinZ>Form1->BinFiles[0][i].RealZ()) MinZ=Form1->BinFiles[0][i].RealZ();

    if (MaxX<Form1->BinFiles[0][i].RealX()) MaxX=Form1->BinFiles[0][i].RealX();
    if (MaxY<Form1->BinFiles[0][i].RealY()) MaxY=Form1->BinFiles[0][i].RealY();
    if (MaxZ<Form1->BinFiles[0][i].RealZ()) MaxZ=Form1->BinFiles[0][i].RealZ();


    glVertex3d(Form1->BinFiles[0][i].RealX(),
               Form1->BinFiles[0][i].RealY(),
               Form1->BinFiles[0][i].RealZ());
  }
  glEnd();

  AnsiString Report=" MinX="+FloatToStr(MinX)+
                    " MaxX="+FloatToStr(MaxX)+
                    " MinY="+FloatToStr(MinY)+
                    " MaxY="+FloatToStr(MaxY)+
                    " MinZ="+FloatToStr(MinZ)+
                    " MaxZ="+FloatToStr(MaxZ);
  Form1->Label1->Caption=Report;
  Form1->Edit1->Text=Report;
}
Ну и в общем после запуска приложения я ничего не вижу - ни одной точки, которые были загружены.
Я так понимаю, что ошибка кроется в процедуре FormResize, в которой прописаны настройки СК. Для glOrtho я пробовал задавать разные значения, но ничего не получается.

Очень прошу - поясните что же я делаю не так, в чем ошибка?
Freimaks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Система координат delphi7 s2df Помощь студентам 4 28.03.2013 10:14
Система координат в OpenGL WarHamster Помощь студентам 0 17.03.2011 15:53
Система координат в Qt lecume Qt и кроссплатформенное программирование С/С++ 1 20.01.2011 10:06
Система координат в OpenGl. Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 02.06.2009 09:12
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42