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

Поиск:

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


Эксперт
***


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

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



Я вот токо вот начинаю изучать MFC и ещё OpenGL. Так вот у меня такой вопрос ну и задача:

Мне необходимо нарисовать какуюто фигуру в OpenGL но проблема не в этом проблема в том что наскоко я понял OpenGL создаёт своё окно для рисования а если делать какето GUI на MFC то там же окно по 2-ому создается.

Так вот мне надо что было место где рисовалась фигура и какието контролы для того что б ей управлять - это к примеру какойто toolBar с какимито кнопками маштабирвания поворота ну и тому подобное. 

Так вот как мне объеденить это всё в одно приложение. 
PM MAIL ICQ   Вверх
Graf_h
Дата 19.5.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 5



Цитата(Reptor @  19.5.2008,  15:46 Найти цитируемый пост)
OpenGL создаёт своё окно для рисования а если делать какето GUI на MFC то там же окно по 2-ому создается.

кто сказал что по другому? В Windows все окна одинаково создаются


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Reptor
Дата 19.5.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Graf_h, нет ну я не имел в виду по другому в плане кода по 2-ому. Ну или как в OpenGL  
Код

glutInit(&argc,argv);


а обычное окно в MFC что то типа такого (часть кода)

Код

BOOL CMyApp::InitInstance() // стандартная инициализация
{
m_pMainWnd=new CMainWnd();// создать класс окна
ASSERT(m_pMainWnd);// проверить его правильность
m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно
m_pMainWnd->UpdateWindow();// Обновить окно
return TRUE;// Вернуть что все нормально
};

CMyApp theApp;


Добавлено через 22 секунды
это я так понимаю
PM MAIL ICQ   Вверх
Graf_h
Дата 19.5.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 5



Цитата(Reptor @  19.5.2008,  16:04 Найти цитируемый пост)
Graf_h, нет ну я не имел в виду по другому в плане кода по 2-ому. Ну или как в OpenGL  код C++1:glutInit(&argc,argv);

Это просто интерфейс для создания окна, реально оно также создается!Если очень нужно могу написать код окна для опенЖЛ! насчет контролов, то с ними в VisualC++ работать не приходилось, по мне так Borland C++ проще! хотя и  Visual C++ также есть готовые компоненты! 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Reptor
Дата 19.5.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 Graf_h, код окна для опенЖЛ я знаю как делать и знаю как в MFC тоже делать окна и кнопки а вот как это соеденить я что то не понимаю 
PM MAIL ICQ   Вверх
Solomon
Дата 19.5.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Когда мне подобное надо было я использовал немодальные окна.. т.е. само окно OpenGL, и отдельно создаешь еще одно типа как панелька в томже photoshop...


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
bronislav
Дата 19.5.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для того, чтобы включить инициализировать OpenGL в окне MFC надо действовать немного по другому, например так:
  1. Создаем Single Document
  2. Добавляем для линковки библиотеки OpenGL: glu32.lib, glaux.lib, opengl32.lib
  3. В файле stdafx.h добавляем заголовочные файлы
    Код

    #include <gl\gl.h>
    #include <gl\glu.h>
    #include <gl\glaux.h>
  4. Устанавливаем стили окна для работы с OpenGL
    В функцию PreCreateWindow (класс C...View) добавляем следующий код
    Код

    //функция ав-томатически вызывается перед созданием окна приложения
    BOOL CView::PreCreateWindow(CREATESTRUCT& cs) 
    {     
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs
        //устанавливаем  стили окна, необходимые для работы с OpenGL
        cs.style|=(WS_CLIPCHILDREN|WS_CLIPSIBLINGS); 
        return CView::PreCreateWindow(cs);
    }
  5. Описываем переменные для хранения размеров экрана и переменные для контекстов устройств
    В класс C...View добавляем переменные в секцию public:
    Код

    HGLRC hrc;
    CDC m_pdc;
    int windH;
    int windW;
  6. Настраиваем формат пикселей, выбираем контекст устройства и создаем на его основе контекст воспроизведения для работы с OpenGL
    В функцию C...View::OnCreate добавляем код
    Код

    //функция об-работки сообщения "Создание окна"
    int CView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (CView::OnCreate(lpCreateStruct)==-1)
            return -1;
        // TODO: Add your specialized creation code here
        //Настраиваем формат пикселей для работы с OpenGL
        PIXELFORMATDESCRIPTOR pfd; //структура для описания формата пикселей
        memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR)); //для начала за-полняем все значения структуры нулями
        //Начинаем заполнение нужных нам значений структуры:
        pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR); //размер структуры, ус-танавливаем равным размеру типа PIXELFORMATDESCRIPTOR
        pfd.nVersion=1;        //номер версии, для работы с OpenGL ставим 1
        pfd.dwFlags = PFD_DRAW_TO_WINDOW |           //рисовать в окне
        PFD_SUPPORT_OPENGL |                   //поддержка OpenGL
        PFD_DOUBLEBUFFER;                       //двойная буферизация
        pfd.iPixelType=PFD_TYPE_RGBA;    //режим для отображения цветов – цветовая  модель RGBA
        pfd.cColorBits=32;           //32-битовая глубина цвета
        pfd.cAlphaBits=8;            //компонента альфа цвета
        pfd.cAccumBits=32;        //буфер аккумулятора
        pfd.cDepthBits=32;         //буфер глубины (z- буфер)
        pfd.cStencilBits=8;         //трафарет
        pfd.iLayerType=PFD_MAIN_PLANE;            //тип плоскости – основная
        m_pdc=GetDC();                                           //создаем контекст устройства
        //Исходя из настройки пикселей и созданного контекста уст-ройства, получаем оптимальный, наиболее совпадающий с требуемым, формат пикселей:
        int nPixelFormat=ChoosePixelFormat(m_pdc->m_hDC,&pfd);
        if (nPixelFormat==0)
        {
            MessageBox("Ошибка при выборе формата пикселей");
            return FALSE;
        }
        BOOL bResult=SetPixelFormat(m_pdc->m_hDC,nPixelFormat,&pfd);
        //Устанавливаем полученный формат пикселей:
        if (!bResult)
        {
            MessageBox("Ошибка при установке формата пикселей");
            return FALSE;
        }
        if ((hrc=wglCreateContext(m_pdc->m_hDC))==NULL) //на основе контекста устройства создаем контекст воспроизведения
        return FALSE;
        if (wglMakeCurrent(m_pdc->m_hDC,hrc)==FALSE) //делаем его текущим
            return FALSE; 
        return 0;
    }
  7. Обеспечиваем удаление из памяти выбранных контекстов при завершении работы
    В функцию C...View::OnDestroy добавляем код
    Код

    //функция обработки сообщения "Уничтоже-ние окна"
    void CView::OnDestroy()
    {
        // TODO: Add your message handler code here
        //Убираем из текущего и удаляем контекст воспроизведения
        if (hrc==::wglGetCurrentContext()) //запрашиваем текущий контекст вос-произведения
        {
            wglMakeCurrent(NULL,NULL);         //делаем его не текущим
            wglDeleteContext(hrc);                     //удаляем контекст воспроизведения
            hrc=NULL;
        }
        CView::OnDestroy();       //для корректного завершения работы передаем управление вверх по иерархии
    }
  8. Определяем функцию для выделения прямоугольной области рисования командами OpenGL
    В класс С...View добавляем функцию InitViewport
    Код

    void CView::InitViewport(int x, int y, int width, int height)
    {
        glViewport(x, y, width, height);                                      //задаем видовое окно
        glMatrixMode(GL_PROJECTION);  //определяем матрицу проецирования
        glLoadIdentity();                                   //делаем ее единичной
        gluOrtho2D(-width/4, width/4, -height/2, height/2);   //задаем матрицу 2-х мерной ортографической проекции (окно отсечения),  коэффици-енты в знаменателе масштабируют изображение
        glMatrixMode(GL_MODELVIEW);           //режим работы с матрицей вида
    }
  9. Добавляем операторы для рисования
    В функцию OnDraw добавляем код
    Код

    void CView::OnDraw(CDC* pDC)
    {
        // TODO: add draw code for native data here
        CRect ClientRect;                //описываем переменную типа прямоугольник
        GetClientRect(&ClientRect);
        //определяем длину и ширину окна на основе его координат
        windW=abs(ClientRect.right-ClientRect.left);
        windH=abs(ClientRect.top-ClientRect.bottom);
        glClearColor(0.75, 0.75, 0.75, 1.0);   //задаем цвет фона окна, например, светло-серый
        glClear(GL_COLOR_BUFFER_BIT);                  //устанавливаем цвет фона
        InitViewport(0,0, windW, windH); //устанавливаем параметры видового окна
        glColor3f(1., 0., 0.);              //задаем цвет рисования, например, красный
        //далее следуют команды построения изображения
        //ВНИМАНИЕ ! В конце функции OnDraw обязательно бло-кируем выполнение программы до полного завершения всех вышеука-занных команд:
        glFinish();           //или       glFlush();
        SwapBuffers(wglGetCurrentDC()); //обеспечиваем перезапись содержимого внеэкранного буфера на экранный (основной)
    }
Если, что-то непонятно - пиши, буду исправлять

Это сообщение отредактировал(а) bronislav - 21.5.2008, 15:27


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


Опытный
**


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

Репутация: -1
Всего: 5



bronislav, автор темы говорит что умеет все это делать! Он просто не может скомпоновать! Но если честно, я так и не понял что именно у него не получается


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
bronislav
Дата 20.5.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Graf_h @ 20.5.2008,  14:14)
bronislav, автор темы говорит что умеет все это делать! Он просто не может скомпоновать! Но если честно, я так и не понял что именно у него не получается

Судя по использования библиотеки glut и него не получается рисовать в окне MFC (т.к. glut создает свое окно).

Мой же код позволяет рисовать непосредственно в окне MFC не создавая дополнительных окон.


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


Эксперт
***


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

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



Graf_h, да я умею это делать но када оно всё отдельно.

Цитата

Судя по использования библиотеки glut и него не получается рисовать в окне MFC (т.к. glut создает свое окно).


Во в этом у меня была и проблема мне надо было опенЖЛ как то импортировать или вшить в MFC
bronislav, спасибо попробую разобраться что к чему.

Ди и сорри если неккоректно задал вопрос.

Добавлено через 56 секунд
bronislav,  да и ещё я тут смогу добовлять меню и тулбар ну может ещё что понадобится?
PM MAIL ICQ   Вверх
Rickert
Дата 21.5.2008, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я сам неделю назад инжектил OGL в MFC. Мне надо было на модальном окне разложить 4 контекста OGL'а. Решается это просто: создаёшь на форме 4 статика и к при инициалиазции OGL подсовываешься вместо контекста устройства окна - контекст устройства статика.


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


Эксперт
***


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

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



bronislav, а можно попросить приатаченный уже готовый файл? так как у меня не получается что то собрать это.
PM MAIL ICQ   Вверх
bronislav
Дата 21.5.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Reptor @  21.5.2008,  15:22 Найти цитируемый пост)
bronislav, а можно попросить приатаченный уже готовый файл?


Конечно

Это сообщение отредактировал(а) bronislav - 21.5.2008, 15:25

Присоединённый файл ( Кол-во скачиваний: 87 )
Присоединённый файл  empty_project.zip 52,67 Kb


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


Новичок



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

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



Где бы взять такойже примерчик, только для Борланд С++? Может поделиться кто, т.к. такаяже ситуация, хочется рисовать во фрейме Виндовского окна.

PM MAIL   Вверх
bronislav
Дата 23.5.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ProfessorBraz @  23.5.2008,  18:45 Найти цитируемый пост)
Где бы взять такойже примерчик, только для Борланд С++? Может поделиться кто, т.к. такаяже ситуация, хочется рисовать во фрейме Виндовского окна.


Посмотри в прилагающихся примерах.
Насколько я знаю там есть пример использования OpenGL.



--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
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   Вверх
bronislav
Дата 28.5.2008, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что именно тебе надо?
Окно в котором отображается 3d сцена, или в этом окне еще должны быть менюшки, кнопочки всякие?


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


Шустрый
*


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

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



мне нужно окно 3D а так же разные кнопки и много чего другого (элементы диалога) в одном приложении, ну почти как в том примере.
PM MAIL   Вверх
bronislav
Дата 28.5.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вот так и испольуй как в том примере.

Про инициализацию на WinAPI я писал, что испольуется если надо создать окно, без элементов диалога. Потому, что элементы диалога можно создать и с помошью WinAPI, но "овчинка выделки не стоит".

Больше сил потратить на обработку событий.

Используй какой-нибудь GUI toolkit, и там инициализируй. Хотя в некоторых toolkit'ах инициализация уже ниписана, надо только соответствуюший метод вызвать. 


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


Шустрый
*


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

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



пробовал http://www.firststeps.ru/mfc/opengl/r.php?15
но выдает ошибки. Как думаешь так можно?
PM MAIL   Вверх
kapralov
  Дата 29.5.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ! всем привет , вот созал окошко в opengl, таким макаром:
файлик Main.cpp
Код

// Включаем необходимые библиотеки:
// OpelGL

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux.lib")
// Добавляем библиотеку, необходимую для использования timeGetTime():
#pragma comment(lib, "winmm.lib") 
// Наш главный хидер:
#include "main.h"
#include <wchar.h>
// Необходимые дескрипторы:
HWND  g_hWnd;
RECT  g_rRect;
HDC   g_hDC;
HGLRC g_hRC;
HINSTANCE g_hInstance;


///////////////////////////////////////////////////////////////
//
//            Функция вызывается каждый кадр и рендерит сцену
//
///////////////////////////////////////////////////////////////
 

void RenderScene()
{
 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    // пока тут пусто потом код рендеринга идет
    
    SwapBuffers(g_hDC);


}
 
///////////////////////////////////////////////////////////////
//
//            Инициализирует игровое окно
//
///////////////////////////////////////////////////////////////
 
void Init(HWND hWnd)
{
    g_hWnd = hWnd;
    GetClientRect(g_hWnd, &g_rRect);
    InitializeOpenGL(g_rRect.right, g_rRect.bottom);

}
 
///////////////////////////////////////////////////////////////
//
//            Главный цикл
//
///////////////////////////////////////////////////////////////
 
WPARAM MainLoop()
{
    MSG msg;
 
    while(1)
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if(msg.message == WM_QUIT)
                break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
                RenderScene();
        }
    }
 
    DeInit();
 
    return(msg.wParam);
}
 
///////////////////////////////////////////////////////////////
//
//            Обработка сообщений windows
//
///////////////////////////////////////////////////////////////
 
LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LONG    lRet = 0;
    PAINTSTRUCT    ps;
 
    switch (uMsg)
    {
    case WM_SIZE:        // Если изменён размер окна
 
        SizeOpenGLScreen(LOWORD(lParam),HIWORD(lParam));// LoWord=Width, HiWord=Height
        GetClientRect(hWnd, &g_rRect);        // получаем window rectangle
        break;
 
    case WM_PAINT:            // Если нужно перерисовать сцену
        BeginPaint(hWnd, &ps);    // Иниц. paint struct
        EndPaint(hWnd, &ps);    // EndPaint, подчищаем
        break;
 
    case WM_KEYDOWN:    // Это сообщение означает, что нажата клавиша на клавиатуре.
                // Сама клавиша передаётся в параметре wParam
        switch(wParam)
        {
            case VK_ESCAPE:            // Если нажат ESCAPE
                PostQuitMessage(0);    // Выходим
                break;
        }
        break;
 
    case WM_CLOSE:        // Если окно было закрыто
        PostQuitMessage(0);    // Выходим
        break;
 
    default:        // Return по умолчанию
        lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
        break;
    }
 
    return lRet;
}



файл main.h
Код

#ifndef _MAIN_H
#define _MAIN_H

// Хидеры, необходимые для работы программы
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <gl\gl.h>
#include <gl\glu.h>
 
// Обьявим глобальные переменные, ширину, высоту и глубину цвета экрана
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define SCREEN_DEPTH 16
#define peremennaya 16
 
// Глобальные параметры окна; будут доступны из других файлов:
extern HWND  g_hWnd;
extern RECT  g_rRect;
extern HDC   g_hDC;
extern HGLRC g_hRC;
extern HINSTANCE g_hInstance;
 
 
// Прототип главной функции программы - WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprev, PSTR cmdline, int ishow);
 
// Прототип функции обработки сообщений
LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 
// Функция - главный цикл программы
WPARAM MainLoop();
 
// Функция, создающая окно
HWND CreateMyWindow(LPSTR strWindowName, int width, int height, DWORD dwStyle, bool bFullScreen, HINSTANCE hInstance);
 
// Функция, устанавливающая формат пиксела
bool bSetupPixelFormat(HDC hdc);
 
// Прототип функции, устанавливающей размеры окна OpenGL
void SizeOpenGLScreen(int width, int height);
 
// Функция, инициализирующая OpenGL
void InitializeOpenGL(int width, int height);
 
// Общая инициализация
void Init(HWND hWnd);
 
// Функция, которая собственно рисует сцену
void RenderScene();
 
// Де-инициализация
void DeInit();

#endif


ну и наконец
init.cpp
Код

// Включаем наш хидер
#include "main.h"

///////////////////////////////////////////////////////////////
//
//        Функция, создающая наше окошко
//
///////////////////////////////////////////////////////////////
HWND CreateMyWindow(LPSTR strWindowName, int width, int height, DWORD dwStyle, bool bFullScreen, HINSTANCE hInstance)
{
    HWND hWnd;        // дескриптор окна
    WNDCLASS wndclass;    // класс окна
    memset(&wndclass, 0, sizeof(WNDCLASS));        // Резервируем память под класс окна
    wndclass.style = CS_HREDRAW | CS_VREDRAW;    // Стандартные параметра
    wndclass.lpfnWndProc = WinProc;            // Передаём указатель на функцию обработки сообщений
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);    // Иконка
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);        // Курсор
    wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);    // Окно будет белым
    wndclass.lpszClassName = "Test";        // Имя класса
    RegisterClass(&wndclass);                //регистрируем класс
 
    dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; // Стиль окна
 
    g_hInstance = hInstance;
 
    // Устанавливаем заданные размеры окна.
    RECT rWindow;
    rWindow.left    = 0;            // Левая сторона -  0
    rWindow.right    = width;        // Правая сторона - 800
    rWindow.top        = 0;        // Верх - 0
    rWindow.bottom    = height;        // Низ - 800
 
    AdjustWindowRect( &rWindow, dwStyle, false);    // Применяем заданные размеры
 
                            // Создаём окно
    hWnd = CreateWindow("Test", strWindowName, dwStyle, 0, 0,
                rWindow.right  - rWindow.left, rWindow.bottom - rWindow.top,
                NULL, NULL, hInstance, NULL);
 
    if(!hWnd) return NULL;            // Есди не получилось - умираем...
    ShowWindow(hWnd, SW_SHOWNORMAL);    // Показать окно
    UpdateWindow(hWnd);            // И нарисовать его
    SetFocus(hWnd);                // Фокусирует клавиатуру на наше окно
    
    return hWnd;
}
 
 
///////////////////////////////////////////////////////////////
//
//        Функция, устанавливающая формат пиксела
//
///////////////////////////////////////////////////////////////
bool bSetupPixelFormat(HDC hdc)
{
    PIXELFORMATDESCRIPTOR pfd;    // Дескриптор формата пиксела
    int pixelformat;
    pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);    // Устанавливаем размер структуры
    pfd.nVersion = 1;                // Всегда ставим = 1
            // Передаём нужные флаги OpenGL
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.dwLayerMask = PFD_MAIN_PLANE;        // Стандартная маска (один хрен игнорируется)
    pfd.iPixelType = PFD_TYPE_RGBA;        // Нам нужны RGB and Alpha типа пикселей
    pfd.cColorBits = SCREEN_DEPTH;        // Используем наши #define для цветовой глубины
    pfd.cDepthBits = SCREEN_DEPTH;    // Это игнорируется для RGBA, но все равно передадим
    pfd.cAccumBits = 0;
    pfd.cStencilBits = 0;
 
    // Ф-я ищет формат пиксела, наиболее подходящий заданным требованиям, выход при неудаче
    if ( (pixelformat = ChoosePixelFormat(hdc, &pfd)) == FALSE )
    {
        MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);
        return FALSE;
    }
 
    // Устанавливаем указанный формат пиксела
    if (SetPixelFormat(hdc, pixelformat, &pfd) == FALSE)
    {
        MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);
        return FALSE;
    }
 
    return TRUE;
}
 
///////////////////////////////////////////////////////////////
//
//        Ф-я устанавливает размер окна OpenGL
//
///////////////////////////////////////////////////////////////
void SizeOpenGLScreen(int width, int height)
{
    if (height==0)        // Предотвратим деление на 0
        height=1;
 
    // Сделаем наше окно OpenGL размером с главное окно программы. При желании можно сделать
    // вьюпорт меньше окна.
    glViewport(0,0,width,height);
 
    glMatrixMode(GL_PROJECTION);    // Выберем матрицу проекции
    glLoadIdentity();        // И сбросим её
 
    // Вычислим перспективу нашего окна
    // Параметры:
    // (угол взгляда, отношение ширины и высоты,
    // Ближайшее расстояние обьекта до камеры, при котором он виден,
    // и дальнейшее расстояние, при котороом происходит отрисовка
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, .5f ,150.0f);
 
    // Важно: дальняя дистанция должна быть больше единицы, если вы не хотите получить
    // прикольные артефакты, работая с освещением. Мало кто знает об этом, но при
    // использовании света с ближней дистанцией камеры меньше 1, на полигонах будут
    // видны неуместные блики и флеши.
 
    glMatrixMode(GL_MODELVIEW);  // Выберем матрицу моделей
    glLoadIdentity();            // И сбросим её
}
 
 
///////////////////////////////////////////////////////////////
//
//            Ф-я инициализирует OpenGL
//
///////////////////////////////////////////////////////////////
 
void InitializeOpenGL(int width, int height)
{
    g_hDC = GetDC(g_hWnd);    // Устанавливаем глобальный дескриптор окна
 
    if (!bSetupPixelFormat(g_hDC))        // Устанавливаем формат пиксела
        PostQuitMessage (0);            // И выходим при ошибке
 
    g_hRC = wglCreateContext(g_hDC);        // Контекст рендеринга для hdc
    wglMakeCurrent(g_hDC, g_hRC);        // Делаем контекст текущим
    glEnable(GL_TEXTURE_2D);            // Включаем текстуры
    glEnable(GL_DEPTH_TEST);            // И тест глубины
 
    // И устанавливаем размер вьюпорта:
    SizeOpenGLScreen(width, height);
    
}
 
///////////////////////////////////////////////////////////////
//
//            Ф-я де-Инициализирует OpenGL
//
///////////////////////////////////////////////////////////////
void DeInit()
{
    if (g_hRC)
    {
        wglMakeCurrent(NULL, NULL);    // Освобождает память, занятую для рендера
        wglDeleteContext(g_hRC);    // Удаляет контекст рендеринга OpenGL
    }
 
    if (g_hDC)
        ReleaseDC(g_hWnd, g_hDC);    // Убирает HDC из памяти
 
    UnregisterClass("Test", g_hInstance);    // Освобождаем класс окна
    PostQuitMessage (0);                    // Выходим
}
 
///////////////////////////////////////////////////////////////
//
//            Функция регистрирует и создает окно
//
///////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprev, PSTR cmdline, int ishow)
{
    HWND hWnd;
 
    // Создает окно с помощью нашей функции, в которую передаём:
    // Имя, Ширину, Высоту, любые флаги для окна, хотим ли мы фулскрин, и hInstance
    hWnd = CreateMyWindow("Test", SCREEN_WIDTH, SCREEN_HEIGHT, 0, false, hInstance);
 
    // Выходим при ошибке
    if(hWnd == NULL) return TRUE;
 
    // Инициализируем OpenGL
    Init(hWnd);
 
    // Запускаем игровой цикл
    return MainLoop();
}


в конечном итоге получаю просто черное окно , вопрос как в это окно я могу вставить кнопу , или текстовое окно? с помощью winapi
PM MAIL   Вверх
Lenkov
Дата 29.5.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



скажите какую книгу лучше приобрести, для того что бы писать такие проги!
PM MAIL   Вверх
kapralov
Дата 29.5.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ладно черт с ним в winapi пока, у меня стоит VS2003 скачал с сайта библиотеку glaux что то никак не могу ее заюзать , какие файлы куда надо перенести , чтоб оно работало , хоть примеры посматреть
PM MAIL   Вверх
bronislav
Дата 29.5.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kapralov @  29.5.2008,  13:01 Найти цитируемый пост)
в конечном итоге получаю просто черное окно , вопрос как в это окно я могу вставить кнопу , или текстовое окно? с помощью winapi 

Ты хочешь создать в окне елементы управления, как объекты 3d сцены?
Тогда тебе надо писать свои GUI классы.

Цитата(Lenkov @  29.5.2008,  13:55 Найти цитируемый пост)
скажите какую книгу лучше приобрести, для того что бы писать такие проги! 

Приведенный выше код не есть пример для подражания. Для начала загляни в эту и эту темы.


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


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


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

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



Не тема, а мусорка.

Это сообщение отредактировал(а) Rickert - 30.5.2008, 07:35


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


Шустрый
*


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

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



народ помогите. Ошибка auxIdleFunc( display ); error C2065: 'display' : undeclared identifier. Не знаю как еще попробовать.
Код

class CShar 
{
public:
    void CALLBACK display( void );
    void CALLBACK resize( int width, int height );
};

int WINAPI WinMain( HINSTANCE d1, HINSTANCE d2, LPSTR d3, int d4 )
{
    CShar shar, *shar1=&shar;
// Ïàðàìåòðû îáñ÷åòà ñöåíû â OpenGL: öâåòîâîé ðåæèì RGBA, óäàëåíèå
// íåâèäèìûõ ïîâåðõíîñòåé è ëèíèé, äâîéíàÿ áóôåðèçàöèÿ
auxInitDisplayMode( AUX_RGBA | AUX_DEPTH | AUX_DOUBLE );
// Ñîçäàíèå îêíà OpenGL ñ çàãîëîâêîì "Ïðîãðàììà 1.1"
// Ðàçìåð îêíà – 400õ400 ïèêñåëåé. Ëåâûé âåðõíèé óãîë îêíà
// çàäàåòñÿ ýêðàííûìè êîîðäèíàòàìè (50, 10).
auxInitPosition( 50, 10, 400, 400);
auxInitWindow( "Ïðîãðàììà 1.1" );
//  ñëó÷àå, êîãäà îêíî íå ïîëó÷àåò ñîîáùåíèé îò êëàâèàòóðû, ìûøè èëè
// òàéìåðà, òî áóäåò âûçûâàòüñÿ ôóíêöèÿ display. Òàê ìîæíî ïîëó÷èòü
// àíèìàöèþ. Åñëè àíèìàöèÿ íå íóæíà, òî ýòà ñòðîêà ëèøíÿÿ.
auxIdleFunc( display );
// Çàäàíèå ôóíêöèè, êîòîðàÿ áóäåò âûçûâàòüñÿ ïðè èçìåíåíèè
// ðàçìåðîâ îêíà Windows.
auxReshapeFunc( resize );
// Âêëþ÷åíèå ðÿäà ïàðàìåòðîâ OpenGL
glEnable( GL_ALPHA_TEST ); // Ó÷åò ïðîçðà÷íîñòè
glEnable( GL_DEPTH_TEST ); // Óäàëåíèå íåâèäèìûõ ïîâåðõíîñòåé
glEnable( GL_COLOR_MATERIAL ); // Ñèíõðîííîå çàäàíèå öâåòà ðèñîâàíèÿ
// è öâåòà ìàòåðèàëà îáúåêòîâ
glEnable( GL_BLEND ); // Ðàçðåøåíèå ñìåøåíèÿ öâåòîâ
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_LIGHTING ); // Ó÷åò îñâåùåíèÿ
glEnable( GL_LIGHT0 ); // Âêëþ÷åíèå íóëåâîãî èñòî÷íèêà ñâåòà
// Çàäàíèå ïîëîæåíèÿ è íàïðàâëåíèÿ íóëåâîãî èñòî÷íèêà ñâåòà
float pos[4] = { 3, 3, 3, 1 };
float dir[3] = { -1, -1, -1 };
glLightfv( GL_LIGHT0, GL_POSITION, pos );
glLightfv( GL_LIGHT0, GL_SPOT_DIRECTION, dir );
// Çàäàíèå ôóíêöèè îòðèñîâêè îêíà. Ýòà ôóíêöèÿ áóäåò âûçûâàòüñÿ âñÿêèé
// ðàç, êîãäà ïîòðåáóåòñÿ ïåðåðèñîâàòü îêíî íà ýêðàíå (íàïðèìåð, êîãäà
// îêíî áóäåò ðàçâåðíóòî íà âåñü ýêðàí)
auxMainLoop( display );
return 0;
}

void CALLBACK CShar::resize(int width, int height)
{
// Óêàçàíèå ÷àñòè îêíà äëÿ âûâîäà êàäðà OpenGL
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
// Çàäàíèå òèïà ïðîåêöèè (glOrtho - ïàðàëëåëüíàÿ, glFrustum -
// ïåðñïåêòèâíàÿ). Ïàðàìåòðû ôóíêöèé îïðåäåëÿþò âèäèìûé îáúåì
// (ëåâàÿ ñòåíêà - ïÿòü åäèíèö âëåâî, ïðàâàÿ - ïÿòü åäèíèö âïðàâî,
// äàëåå çàäàþòñÿ íèæíÿÿ ñòåíêà, âåðõíÿÿ, ïåðåäíÿÿ è çàäíÿÿ)
glOrtho( -5, 5, -5, 5, 2, 12 );
// Çàäàíèå ïîçèöèè íàáëþäàòåëÿ (0, 0, 5), íàïðàâëåíèå ëó÷à
// çðåíèÿ (íà òî÷êó (0, 0, 0)), âåêòîð, ïðèíèìàåìûé çà íàïðàâëåíèå
// "ââåðõ" (0, 1, 0) (ò.å. ïàðàëëåëüíî îñè Y).
gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
glMatrixMode( GL_MODELVIEW );
}

void CALLBACK CShar::display( void )
{
// Î÷èñòêà áóôåðà êàäðà
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
// Ïåðåíîñ ñèñòåìû êîîðäèíàò, ñâÿçàííîé ñ îáúåêòîì, íà 0.01
glTranslated( 0.01, 0, 0 );
// Ðèñîâàíèå â íà÷àëå êîîðäèíàò, ñâÿçàííûõ ñ îáúåêòîì, ñôåðû
// ðàäèóñîì 1, îêðàøåííîé â êðàñíûé öâåò
glColor3d( 1, 0, 0 );
auxSolidSphere( 1 );
// Êîïèðîâàíèå ñîäåðæèìîãî áóôåðà êàäðà íà ýêðàí
auxSwapBuffers();
}


PM MAIL   Вверх
bronislav
Дата 30.5.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Rickert @  30.5.2008,  06:35 Найти цитируемый пост)
Не тема, а мусорка.

Полностью согласен.
Просьба к модератору закройте тему. Для дополнительныйх вопросов надо создавать отдельные темы.


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


Новичок



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

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



Lеstat я просто прошу объяснить как мне использовать в vs2003 библиотеку GLUI , скачал версию GLUI 2.2 , как ее использовать, вот и все что я хотел узнать , а насчет мусорки , не нравица не отвечайте и не выпендривайтесь. Форум для того и создан чтоб новички могли спросить что да как.
PM MAIL   Вверх
bronislav
Дата 31.5.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kapralov @  31.5.2008,  11:37 Найти цитируемый пост)
чтоб новички могли спросить что да как. 

В правилах сказано, что для каждого вопроса надо создавать новую тему.
Так что...
В данном топике был вопрос про использование MFC + OpenGL
Для всех остальный вопросов создавайте отдельные топики


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


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


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

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



Модератору отправил уже репорт - пока молчат.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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