Модераторы: Rickert, Alexeis, BorisVorontsov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите как создать минимальное, OpenGL приложение на Visual C++ 
:(
    Опции темы
smufa
Дата 4.3.2007, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.3.2007

Репутация: нет
Всего: нет



Подскажите как создать минимальное OpenGL приложение на Visual C++
PM MAIL   Вверх
evilguard
Дата 4.3.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



http://qtprojects.narod.ru/OG.rar

Проект, есть объект, управление мышью, все работает, надо откомпилировать только. С использованием MFC.
Но я связываться не стал, и пишу на QT - чего тебе и советую.

З.Ы. с Уфы чтоли?

Это сообщение отредактировал(а) evilguard - 4.3.2007, 21:27
PM MAIL   Вверх
smufa
Дата 5.3.2007, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.3.2007

Репутация: нет
Всего: нет



Не, не с Уфы.
Слишком много всего в этом приложении. Я просто пока не могу разобраться как пользоваться OpenGL посему нуждаюсь в простейшем примере. А QT - это чего?
PM MAIL   Вверх
evilguard
Дата 5.3.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



smufa
тогда бери книжку или ищи в инете консольное opengl приложение на Visual C++.
Насчет QT - если ты движешься в сторону игр, тогда тебе оно не надо.
Если собираешься писать приложения на C++ - то однозначано надо изучать, потому что стандартная библиотека классов Microsoft - отстой. QT - это богатая библиотека для построения пользовательсокго интерфейса.
....
....
Нашел то что тебе нуна) Сам когда начинал opengl изучать немного переделал какой-то примерчик))
http://qtprojects.narod.ru/glaux.rar
Короткий и ясный.
PM MAIL   Вверх
smufa
Дата 5.3.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.3.2007

Репутация: нет
Всего: нет



Видимо проект был создан на более ранней версии, чем 2005, не подскажешь как запустить?
PM MAIL   Вверх
Rickert
Дата 6.3.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Не используй glut / glaux / qt - вот тебе первые советы от меня.
А урок по разработке простейшего (и не только) приложения вот - http://pmg.org.ru/nehe/nehe01.htm
Остальные уроки - http://pmg.org.ru/nehe


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
smufa
Дата 6.3.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.3.2007

Репутация: нет
Всего: нет



Не конвертировалось, писалось   cannot convert parameter 2 from 'const char [29]' to 'LPCWSTR', скомпилировалось после того как я везде перед тем где это писалось написал (LPCWSTR). Вместо букв появляются квадраты, когда меня, видимо, спрашивают хочу ли я запустить в полноэкранном режиме, если нажимаю "нет", появляется окно с восклицательным знаком. 
Вот мой код http://dump.ru/files/6/655790556/.
PM MAIL   Вверх
Rickert
Дата 7.3.2007, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Цитата(smufa @  6.3.2007,  22:17 Найти цитируемый пост)
Не конвертировалось, писалось   cannot convert parameter 2 from 'const char [29]' to 'LPCWSTR', 

Если ты явно указывал строка, например:
Код

AfxMessageBox("There is no such thing as magic!");

То надо перед строкой просто добавить L:
Код

AfxMessageBox(L"There is no such thing as magic!");

А если у тебя там указатель на строкой тип, то надо конвертировать из char в wchar_t. Квадраты у тебя есесно будут, потому что под char идёт один байт, а под wchar_t (LPCWSTR = *wchar_t) идёт 2 байта.
Как конвертировать смотри тут - http://forum.vingrad.ru/topic-108918/hl/wchar_t/index.html
Тут пример как конвертить wchar_t в char, но по аналогии можно и обратно провести.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
smufa
Дата 7.3.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.3.2007

Репутация: нет
Всего: нет



Цитата(Rickert @  7.3.2007,  08:49 Найти цитируемый пост)

А если у тебя там указатель на строкой тип, то надо конвертировать из char в wchar_t. Квадраты у тебя есесно будут, потому что под char идёт один байт, а под wchar_t (LPCWSTR = *wchar_t) идёт 2 байта.
Как конвертировать смотри тут - http://forum.vingrad.ru/topic-108918/hl/wchar_t/index.html
Тут пример как конвертить wchar_t в char, но по аналогии можно и обратно провести. 

А попроще нет ничего? А также интересно почему при выборе неполноэкранного режима ничего не появляется кроме окна с сообщением.
PM MAIL   Вверх
x486
Дата 7.3.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Поробуй этот код

Код

#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <math.h>

float R = 0;
float G = 0;
float B = 0;

float Start_R = 0;
float Start_G = 0;
float Start_B = 0;

int WindowPosX = 100;
int WindowPosY = 100;
int WindowWidth = 500;
int WindowHeight = 500;

MSG msg;
HWND hWnd;

HDC       hDC = NULL;
HGLRC     hRC = NULL;

HINSTANCE hInst;

char szClassName[]="WindowClass";

void resize(int width,int height)
{
  glViewport ( 0, 0, width, height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1f,100);
  gluLookAt( 15,15,15, -1,-1,-1, 0,1,0);
  glMatrixMode(GL_MODELVIEW);
}

void ColorChenge(float &_R, float &_G, float &_B, float Step)
  {
    _R+= Step;
    if(_R>=1)
      {
        _R = 0;
        _G += Step*2;
        if(_G>=1)
          {
            _G = 0;
            _R = 0;

            _B += Step*3;
            if(_B>=0)
              {
                _R=0;
                _G=0;
                _B=0;
              }
          }
      }

    glColor3f(R,G,B);
  }

void CoordLines(void)
  {
    glColor3f(0.0,0.0,0.0);

    glBegin(GL_LINES);

      glVertex3f(10,0,0);
      glVertex3f(0,0,0);

      glVertex3f(0,10,0);
      glVertex3f(0,0,0);

      glVertex3f(0,0,10);
      glVertex3f(0,0,0);

    glEnd();

  }

void Sin(void)
  {
    glBegin(GL_LINE_STRIP);
    for(float X = 0; X<= 10; X+=0.01)
      {
        ColorChenge(R,G,B,0.01);
        glVertex3f(X, sin(X)*2 + 3,0);
      }
    glEnd();
  }

void Circle(void)
  {
    float X = 0;
    for(float r = 1; r <= 3; r+= 0.5)
      {
        glBegin(GL_LINE_LOOP);
        for(X = 0; X<= 3.14*2; X+=0.01)
          {
            ColorChenge(R,G,B,0.01);
            glVertex3f(0, sin(X)*r+6, cos(X)*r+6);
          }
        glEnd();
      }
  }

void Spiral(void)
  {
    float r = 0;
    glBegin(GL_LINE_STRIP);
    for(float X=0; X>= -3.14*8; X-=0.01)
      {
        ColorChenge(R,G,B,0.01);
        glVertex3f(sin(X)*r+4, 0, cos(X)*r+4);
        r+=0.001;
      }
    glEnd();
  }

void display(void)
  {
    ColorChenge(Start_R, Start_G, Start_B,0.01);
    R = Start_R;
    G = Start_G;
    B = Start_B;
    glClearColor(0.75f, 0.75f, 0.75f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glLineWidth(1);
    CoordLines();
    Sin();
    Circle();
    Spiral();
    SwapBuffers(hDC);
  }

void GLInit(void)
  {
  }

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
 {
   switch (msg)
    {
      case WM_SIZE:
        resize(LOWORD(lParam),HIWORD(lParam));
      return 0;
      
      case WM_DESTROY:
         PostQuitMessage(0);
      return 0;
      
      case WM_CLOSE:
         PostQuitMessage(0);
      return 0;
      
      case WM_PAINT:
        display();
      return 0;

      default: return DefWindowProc(hWnd, msg, wParam, lParam);
     }// End Switch  
  
    return DefWindowProc(hWnd, msg, wParam, lParam); 
 }


int CreateGLWindow()
 {
   WNDCLASS wc;
   GLuint PixelFormat;
   DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
   DWORD dwStyle = WS_OVERLAPPEDWINDOW;
   RECT WindowRect;

   WindowRect.left=(long)WindowPosX;
   WindowRect.top=(long)WindowPosY;
   WindowRect.right=(long)WindowWidth;
   WindowRect.bottom=(long)WindowHeight;

   wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
   wc.cbClsExtra=0;
   wc.cbWndExtra=0;
   wc.lpfnWndProc=WndProc;
   wc.hInstance=hInst;
   wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
   wc.hCursor=LoadCursor(NULL, IDC_ARROW);
   wc.hbrBackground=(HBRUSH)(COLOR_WINDOW);
   wc.lpszMenuName=NULL;
   wc.lpszClassName=szClassName;

   if(!RegisterClass(&wc))
     {
       MessageBox(NULL,"Регистрация класса провалена :(","ОШИБКА",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
   }

  dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
  dwStyle = WS_OVERLAPPEDWINDOW;

  AdjustWindowRectEx(&WindowRect, dwStyle, false, dwExStyle);

  hWnd = CreateWindowEx(dwExStyle,
                        szClassName,
                        "GL Window",
                        dwStyle |
                        WS_CLIPSIBLINGS |
                        WS_CLIPCHILDREN,
                        WindowRect.left, WindowRect.top,
                        WindowRect.right, WindowRect.bottom,
                        NULL,
                        NULL,
                        hInst,
                        NULL);

  if(!hWnd)
   {
    MessageBox(NULL,"Инициализация провалена :(","ОШИБКА",MB_OK|MB_ICONEXCLAMATION);
    return FALSE;
   } 

  static PIXELFORMATDESCRIPTOR pfd=
               {
                sizeof(PIXELFORMATDESCRIPTOR),
                1,
                PFD_DRAW_TO_WINDOW |
                PFD_SUPPORT_OPENGL |
                PFD_DOUBLEBUFFER,
                PFD_TYPE_RGBA,
                32,
                0, 0, 0, 0, 0, 0,
                0,
                0,
                0,
                0, 0, 0, 0,
                32,
                0,
                0,
                PFD_MAIN_PLANE,
                0,
                0, 0, 0
               };

  hDC=GetDC(hWnd);
  PixelFormat=ChoosePixelFormat(hDC,&pfd);
  SetPixelFormat(hDC,PixelFormat,&pfd);   
  hRC=wglCreateContext(hDC);
  wglMakeCurrent(hDC,hRC); 
  ShowWindow(hWnd,SW_SHOW);
  SetForegroundWindow(hWnd);
  SetFocus(hWnd);
  resize(WindowRect.right,WindowRect.bottom);
  GLInit();
  
  return true;
 }


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  {
    hInst = hInstance;

    CreateGLWindow();

    while(GetMessage(&msg, NULL, 0,0 ))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    return 0;
  }



В принципе всё просто, создаёшь пустое приложение Win32, добавляешь в проект новый модуль. Копируешь туда текст, подключаешь необходимые библиотеки и всё готово … полетели.

Если что будет не понятно, спрашивай, разъясню подробней.

PM MAIL   Вверх
evilguard
Дата 7.3.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



smufa
Хрен знает, у меня 2005 студия, открыть dsp файл
Rickert
Ну не знаю, сразу человека кидать в выньапи - это зло !
PM MAIL   Вверх
Rickert
Дата 8.3.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



evilguard, а с чего предлогаешь начать? Начинают с основ. Без WinAPI ты никуда не уплывёшь.
Цитата(smufa @  7.3.2007,  18:10 Найти цитируемый пост)
А попроще нет ничего?

Слушай, там простецкий код: выделить память и вызвать одну функцию. Какие проблемы? Это что слишком сложно что-ли? Попробуй без документации разобраться с сетевым проктолом для передачи данных в бесдиковых системах - поймёшь что такое сложно. И то, лично я, как программист, от решения таких задач - только удовольствие получаю. Оргазм программиста...
Цитата

А также интересно почему при выборе неполноэкранного режима ничего не появляется кроме окна с сообщением.

Какое окно с сообщением?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
smufa
Дата 11.3.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.3.2007

Репутация: нет
Всего: нет



Когда компилирую проект, сначала появляется окно в котором, видимо мне предлагается выбрать полноэкранный или оконный режим. Если выбрать оконный то сразу появляется подобное предыдущему окно, с кнопкой ок. после её нажатия приложение завершается. Если выбрать полноэкранный режим, то на секунду появляется чёрный экран, а затем то же окно, что и при выборе оконного режима.
PM MAIL   Вверх
Rickert
Дата 12.3.2007, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



А что написанно-то в этом окне? Или просто опять типа "переключится ли в полноэкранный режим?"?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
ZufuS
Дата 12.3.2007, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 12.7.2006

Репутация: нет
Всего: нет



--

Это сообщение отредактировал(а) ZufuS - 16.3.2007, 10:58
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.