ПрограммированиеФорумГрафика

Инициализация OpenGL (2 стр)

Страницы: 1 2
#15
21:45, 15 сен 2011

по поводу glut... впринципе насколько я понял ОГЛ этими функциями создает окно. А у меня окно делается с помощью WINAPI. Поэтому может быть этот glut и не нужен. Я где то читал, что это устаревший метод. И им сейчас лучше не пользоваться(

#16
21:52, 15 сен 2011

Покажи как инициализируешь и где падает.

#17
22:33, 15 сен 2011

Исходники у меня на работе. я завтра там буду и скину сюда всю функцию.

#18
8:36, 16 сен 2011

вот как инициализирую :
bool CreateOGL()
{
  int argc;
  char **argv;
  /* установим черный фон */
glClearColor (0.0, 0.0, 0.0, 0.0);

/* инициализация viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glutInit(&argc, argv);

glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
glutDisplayFunc(display);
glutMainLoop();

return true;
}

#19
8:52, 16 сен 2011

Trojian
Пара идей:
1) glut надо инициализировать до функций OpenGL
2) Попробуй написать int argc = 1; А лучше передавай настоящие argc и argv.
3) Почитай NeHe

И, вообще, ты же писал:
> А у меня окно делается с помощью WINAPI.
Зачем тогда glut?

#20
10:21, 16 сен 2011

Trojian
В порядке инициализации отсутствует логика. Запомни: вызывать функции OpenGL можно ТОЛЬКО после создания контекста и установки его активным. И где у тебя окно создается с помощью WinAPI если я вижу glutCreateWindow ("hello");? Выбрасывай GLUT и делай все через WinAPI. Создавай окно, устанавливай формат пикселя, создавай контекст.

#21
10:59, 16 сен 2011

eXmire
Хорошо. ды glut a подтёр.Сейчас буду курить в ту сторону.

#22
11:22, 16 сен 2011

Есть книга "OpenGL суперкнига". К книге прилагается компакт диск с примерами и исходниками. Первые примеры инициализируются через GLUT.  Можеш там и посмотреть как это происходит.

#23
12:57, 16 сен 2011

А без GLUT вообще можно произвести инициализацию?

#24
13:00, 16 сен 2011

Нужно.

#25
13:09, 16 сен 2011

а можно пример? или хотя бы подскажите куда копать?

#26
13:26, 16 сен 2011

Trojian
Тебе в 4м посте дали ссылку. Ты походу по этой ссылке не заходил. Почитай.

#27
16:12, 16 сен 2011

eXmire
вот сделал: но сама инициализация не особо работает


int window::InitPixelFormat(HDC hdc)
{
  int pixelformat;
  PIXELFORMATDESCRIPTOR pfd = {0};

  pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW;
  pfd.iPixelType = PFD_TYPE_RGBA;
  pfd.cColorBits = 32;

  if (!(pixelformat = ChoosePixelFormat(hdc, &pfd)))
  {
    //Error: ChoosePixelFormat failed
    return 0;
  }

  if(!SetPixelFormat(hdc, pixelformat, &pfd))
  {
    //Error: SetPixelFormat failed"
    return 0;
  }

  return 1;

}

void window::InitSettings()
{
}

void window::ReleaseOpenGL()
{
  if(hRC)
  {
    wglMakeCurrent(hDC, 0);
    wglDeleteContext(hRC);
    hRC = 0;
  }

  if(hDC)
  {
    ReleaseDC(hWnd, hDC);
    hDC = 0;
  }
}

int window::InitOpenGL(HWND hWnd)
{
  //hWnd = _hWnd;
  hDC = GetDC(hWnd);
  if(!InitPixelFormat(hDC))
    return 0;

  hRC = wglCreateContext(hDC);
  wglMakeCurrent(hDC, hRC);

  InitSettings();
  return 1;
}

void window::DrawObjects()
{
  glBegin(GL_TRIANGLES);
    glColor3ub(255,0,0); // красный
    glVertex3f(-0.5f, -0.5f, 0.0f);
    glVertex3f( 0.5f,  0.0f, 0.0f);
    glColor3ub(0,0,255); // синий
    glVertex3f(-0.5f , 0.5f, 0.0f);
  glEnd();
}

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow )
{

  WNDCLASSEX wndclass;
  wchar_t * class_name = L"WNDCLASS";
  wchar_t * window_name = L"MainWindow";
  HWND hWnd = NULL;
  MSG msg = {0};
 
  // Create and Write to LOG - File
  ofstream log("log_window.log");

  // Read to Config File
  _cfg.ReadToFile();
 
 
 

  ZeroMemory(&wndclass,sizeof(wndclass));

  wndclass.cbSize = sizeof(WNDCLASSEX);
  wndclass.cbClsExtra = NULL;
  wndclass.cbWndExtra = NULL;
  wndclass.hbrBackground = (HBRUSH)GetStockObject(2);
  wndclass.hCursor = (HCURSOR)LoadCursor(hInst, IDC_ARROW);
  wndclass.hIcon = LoadIcon(hInst, IDI_APPLICATION);
  wndclass.hIconSm = LoadIcon(hInst, IDI_APPLICATION);
  wndclass.hInstance = hInst;
  wndclass.lpfnWndProc = MainWinProc;
  wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  wndclass.lpszMenuName = NULL;
  wndclass.lpszClassName = class_name;

  if(!RegisterClassEx(&wndclass))
  {

    log << "Register Class...FAIL\n";
    MessageBox(hWnd, L"Register Class...FAIL\n", window_name, MB_OK);
  }
  else
  {
    log << "Register Class...OK\n";
  }

  if(!(hWnd = CreateWindowEx(NULL,
                class_name,
                window_name,
                WS_OVERLAPPEDWINDOW,
                10,10,
                _cfg.Width,
                _cfg.Height,
                NULL,NULL,
                hInst, NULL)))
  {
    log << "Create Window...FAIL\n";
    MessageBox(hWnd,L"Create Window...FAIL", window_name, MB_OK);
  }
  else
  {
    log << "Create Window...OK\n";
  }

  if(!(_window.InitOpenGL(hWnd)))
  {
    MessageBox(hWnd,L"InitOpenGL..FAIL", window_name, MB_OK);
  }

  ShowWindow(hWnd, nShow);
  UpdateWindow(hWnd);

   
  while( WM_QUIT != msg.message )
  {
    if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
    {
      TranslateMessage( &msg );
      DispatchMessage( &msg );
    }
    else
    {
      _window.DrawObjects();
      Sleep(1);
    }
  }


  _cfg.WriteToFile();// Create and Write to Config File

  return msg.wParam;
}

#28
19:24, 16 сен 2011

Trojian

Инициализация OpenGL через WinAPI:
http://opengl.org.ru/books/open_gl/chapter7.3.html
С использованием GLUT:
http://opengl.org.ru/books/open_gl/chapter7.7.html

#29
19:29, 16 сен 2011

Trojian
> вот сделал: но сама инициализация не особо работает
Как понять "не особо работает"? Напиши, в чем проблема.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.