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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Окно для OpenGL и окно MFC 
:(
    Опции темы
Lеstat
Дата 25.5.2008, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 28.12.2005
Где: Москва

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



вот собрал пример... написано с использованием GLUI, а не MFC, но возможно поможет
оставил минимум кода и даже наверно излишне прокомментил чтобы врубаться было легче)

код рисует вот такое окно:
user posted image


Код


#include <gl\glut.h>  // заголовочный файл для библиотеки GLut
#include <gl\gl.h>   // заголовочный файл для библиотеки OpenGL32
#include <gl\glu.h>  // заголовочный файл для библиотеки GLu32
#include <gl\glui.h>  // заголовочный файл для библиотеки GLUI
#include <iostream>   // чтобы юзать std::cout 

// если хотите убрать консоль при запуске, то уберите комменты
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

#define PERVII_BUTTON 1 // id первой кнопки
#define VTOROI_BUTTON 2 // id второй кнопки
#define TRETII_BUTTON 3 // id третьей кнопки

int main_window; // главное окно

GLUI *top_toolbar, *left_toolbar, *buttom_toolbar; // мои тулбары... верхний, левый и нижний
GLUI_Button *perviiButton, *vtoroiButton, *tretiiButton; // кнопки
GLUI_StaticText *statusLabel; // лейбл... будет на нижнем тулбаре
GLUI_Panel *panel; // панел... будет на левом тулбаре

// тут отрисовываем вьюпорт... просто темный цвет
void display (void) 
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glutSwapBuffers(); 
}

// функция обработки клавиш
void myGlutKeyboard(unsigned char Key, int x, int y) 
{
    switch(Key) {
        case 'q': // при нажатии на q выходим из программы
            exit(0); break;
    }
    glutPostRedisplay();
}

void myGlutMouse(int button, int button_state, int x, int y ) { }
void myGlutMotion(int x, int y ) { }
void resizeWindows( int width, int height ) { }

// функция обработки событий от контролов... получает id контрола
void glui_callback (int control_id) 
{
    switch (control_id)
    {
        case PERVII_BUTTON:
            std::cout << "Нажали первый баттон... " << std::endl; break;
        case VTOROI_BUTTON:
            std::cout << "Нажали второй баттон... " << std::endl; break;
        case TRETII_BUTTON:
            exit(0); break;
    }
}


int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian"); //включаем отображение русских символов в консоли (в линукс вроде работает и без этого)
    
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
    glutInitWindowPosition( 50, 50 ); // положение окна
    glutInitWindowSize( 800, 400 ); // размер окна

    main_window = glutCreateWindow( "GLUT+GLUI example" ); // Создаем окно и задаем заголовок

    glutDisplayFunc( display ); //функция в которой рисуем
    GLUI_Master.set_glutReshapeFunc( resizeWindows );   //функция изменения размера
    GLUI_Master.set_glutKeyboardFunc( myGlutKeyboard );  //функция обработки нажатий клавиш
    GLUI_Master.set_glutSpecialFunc( NULL );  //сам не знаю что за функция
    GLUI_Master.set_glutMouseFunc( myGlutMouse );  // функция обработки нажатий кнопок мыши
    glutMotionFunc( myGlutMotion );  // функция обработки движения мыши

    //-------------------Верхний тулбар-------------------//
    // создаем верхний тулбар (GLUI_SUBWINDOW_TOP)
    top_toolbar = GLUI_Master.create_glui_subwindow( main_window, GLUI_SUBWINDOW_TOP ); 
    // создаем на нем первую кнопку с id PERVII_BUTTON и функцией обработки glui_callback
    perviiButton = top_toolbar->add_button("Pervii Button", PERVII_BUTTON, glui_callback);
    
    // добавляем новый столбец на тулбар... если этого не сделать следующая кнопка будет под первой
    top_toolbar->add_column (false);

    // создаем вторую кнопку
    vtoroiButton = top_toolbar->add_button("Vtoroi Button", VTOROI_BUTTON, glui_callback);

    //-------------------Нижний тулбар-------------------//
    buttom_toolbar = GLUI_Master.create_glui_subwindow( main_window, GLUI_SUBWINDOW_BOTTOM );

    // строка статуса
    statusLabel = buttom_toolbar->add_statictext( "Simple GLUI Example..." );

    //-------------------Левый тулбар-------------------//
    left_toolbar = GLUI_Master.create_glui_subwindow( main_window, GLUI_SUBWINDOW_LEFT );

    // создаю панель с надписью
    panel = left_toolbar->add_panel("Panel", GLUI_PANEL_EMBOSSED);
    // создаю кнопку на левом тулбаре указывая что она в панели panel
    tretiiButton = left_toolbar->add_button_to_panel(panel, "EXIT", TRETII_BUTTON, glui_callback);

    glClearColor( .1f, .1f, .1f, 1.0f ); // цвет очистки фона - почти черный цвет

    glutMainLoop();

    return EXIT_SUCCESS;
}



Буду рад если поможет! Удачи!

Это сообщение отредактировал(а) Lеstat - 25.5.2008, 01:03
PM MAIL ICQ   Вверх
bronislav
Дата 25.5.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Никто, не спорит, что с помошью библиотеки glut все это делается на раз. Но, вопрос то был в создании с помошью MFC. Да и еще я бы не советовал использовать glut, ибо она есть не на всех компах и от этого приложение становиться не переносимымм. И glut не очень хорошо сделана так, что для серьезных приложений не рекомендуется ее вообще использовать.
В Универе у нас за использование glut снижали оценки.


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Reptor
Дата 25.5.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



bronislav, я всеровно что то не так делаю и ничего у меня не выходит. Там так много файлов и не моге даже толком запустить.  smile

Добавлено через 14 минут и 24 секунды
Цитата

И glut не очень хорошо сделана так, что для серьезных приложений не рекомендуется ее вообще использовать.

А что тогда использовать??

И подскажите как такое луче сделать.?? Это моё первое прилоджение и я мало что понимаю ещё в этой области. Подскажите пожалуйта.

PM MAIL ICQ   Вверх
Reptor
Дата 25.5.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



Да и выходит что мне не обязательно MFC и OpenGL я просто подумал что подругому никак. Мне нужен верный путь 
PM MAIL ICQ   Вверх
bronislav
Дата 25.5.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Reptor @  25.5.2008,  09:56 Найти цитируемый пост)
bronislav, я всеровно что то не так делаю и ничего у меня не выходит. Там так много файлов и не моге даже толком запустить.


Там в архиве проект для VS 2003, запускаешь проект и компилируешь.

Цитата(Reptor @  25.5.2008,  09:56 Найти цитируемый пост)
Это моё первое прилоджение 


Посмотри уроки от NeHE тут, а тут перевод.

В принципе можешь и glut использовать чтобы понять как рисовать, но если ты захочешь сделать что-то серьезное, а не просто попробывать, то надо будет писать инициализацию на чистом API.


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Reptor
Дата 25.5.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



bronislav, а можеш а 2-ух словах расказать что значит на чистом API писать инициализацию.
PM MAIL ICQ   Вверх
bronislav
Дата 25.5.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Т.е. не использую дополнительных библиотек типа glut и им подобных

В первом уроке от NeHE объяснено подробнее


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Rickert
Дата 26.5.2008, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



bronislav, нет, чистый API имеется ввиду winAPI, без MFC. А человеку нужен именно MFC.

Reptor, почему ты проигнорировал моё сообщение? Ничем, абсолютно ничем не будет отличаться инициализация OGL в WinAPI и MFC, заисключение указания контекста устройства: в winAPI - это у тебя оконо, а в MFС ты спокойно можешь привязать его к любому объекту, который имеет метод GetDC();


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


Опытный
**


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

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



Цитата(Rickert @  26.5.2008,  04:48 Найти цитируемый пост)
bronislav, нет, чистый API имеется ввиду winAPI, без MFC. А человеку нужен именно MFC.


Цитата(Reptor @  25.5.2008,  19:04 Найти цитируемый пост)
bronislav, а можеш а 2-ух словах расказать что значит на чистом API писать инициализацию. 


Rickert, был задан вопрос и я дал на него ответ. Насколько я понял Reptor хочет изучить OGL, а не MFC  
Цитата(Reptor @  25.5.2008,  10:14 Найти цитируемый пост)
мне не обязательно MFC и OpenGL я просто подумал что подругому никак



Это сообщение отредактировал(а) bronislav - 26.5.2008, 06:10


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Reptor
Дата 26.5.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



Rickert, не в коем случаи не проигнорировал. Просто проблема в том что я не знаю как это сделать.

Ааа ребята я совсем запутался что мне использовать и как луче  smile  smile я уже ничего не понимаю.

Раньше я думал что это возможно сделать только через MFC так как в нём можно создавать окна и разные элементы управления а оказыывается это плохо для сложных приложений.

Пожалуста подскажите что мне делать сроки идут а я даже не знаю ещё какие технологии использовать или MFC с OpenGL или WinApi с OpenGL  smile  smile 

Вот bronislav, и ещё я смотрел те уроки так там используется WinApi и GLUT же тоже используется или не так что то понял??

Единственое что мне понятно так это то что мне не подхолит GLUI так как там не все элементы управления есть (ну или может я их просто не отыскал)


bronislav, а ты ж мне пример на MFC давал - чем это хуже чем WinApi??

Подскажите что мне надо использовать какие технологии какие библиотеки для написания серьозного приложения с OpenGL и окном с различными кнопками менюшками и тому подобное??? 

У меня паника я запутался окончательно
PM MAIL ICQ   Вверх
bronislav
Дата 26.5.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Reptor @  26.5.2008,  11:32 Найти цитируемый пост)
bronislav, а ты ж мне пример на MFC давал - чем это хуже чем WinApi??

В университете на парах мы делали через MFC, а я когда разбирался более глубоко и писал пробный движок использовал WinAPI. И вовсех графических движках используется WinAPI. А если используешь MFC, то появляются не нужные зависимости.



--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Reptor
Дата 26.5.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

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



Хорошо я так понимаю что надо использовать WinApi с OpenGL. 

Я просто не видел как на WinAPI делать различные кнопки, тулбары и тому подобное?? 

Может есть какаято хорошая литература по этому поводу?
PM MAIL ICQ   Вверх
bronislav
Дата 27.5.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Reptor @  26.5.2008,  15:18 Найти цитируемый пост)
Может есть какаято хорошая литература по этому поводу? 


Поиск по форуму.
Эта тема поднималась уже не один раз.


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Rickert
Дата 27.5.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Reptor, www.firststeps.ru там есть уроки по VisualC++


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


Шустрый
*


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

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



Можно ли сделать то же самое (что сделано с помощью  GLUI), только на Visual C++ и что бы потом в этом окне был у меня 3D проект? 
smile  если конечно возможно  smile 
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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