Консультация № 81482
07.04.2007, 21:08
0.00 руб.
0 1 1
Здравствуйте. У меня имеется диалоговое окно. Как из диалогового окна, предварительно введя в него некоторые значения, запустить окно OpenGL, в качестве параметров которому передадутся эти значения?
И ещё, мне необходимо в написании графики перейти из консоли в окна, какие статьи или книги вы посоветуете?

Обсуждение

Неизвестный
12.04.2007, 00:00
общий
это ответ
Здравствуйте, Kachok_guru!

Чтобы из консольного приложения создать OpenGL окно можно воспользоваться библиотекой glaux. Там все просто: назначаете свои обработчики на события WM_PAINT, WM_SIZE и т.п. и создаете окно. Код подобной программы - в приложении

http://pmg.org.ru/nehe/index.html - здесь лежат переведенные на русский уроки от nehe - довольно подробный мануал по визуализации с использованием OpenGL

Приложение:
/* Ross (c) */#include "main.h"//--------global variablesGLdouble angleX = 0,angleY = 0;GLdouble transX,transY,transZ = -200;short sX,sY; //Mouse pointer coordinatesGLfloat light_params[14] = {0.0,0.0,0.0, //position 1.0,1.0,1.0, //direction 15.0, //ambient 70.0, //diffuse 100.0, //specular 100.0, //mat_ambient 100.0, //mat_diffuse 70.0, //mat_specular 70.0, //mat_shininess 0.0}; //mat_emission//!--end--global variables//--------functionsvoid _stdcall paint();void _stdcall reshape(int w,int h);void init();void SetLight();static void __stdcall OnButtonDown(AUX_EVENTREC *pEvent);static void __stdcall OnLMouseMove(AUX_EVENTREC *pEvent);static void __stdcall OnRMouseMove(AUX_EVENTREC *pEvent);//!--end--functionsint main(int argc,char * argv[]) {//---Mouse supportauxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSELOC, OnLMouseMove);auxMouseFunc(AUX_RIGHTBUTTON, AUX_MOUSELOC, OnRMouseMove);auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSEDOWN, OnButtonDown);auxMouseFunc(AUX_RIGHTBUTTON, AUX_MOUSEDOWN, OnButtonDown);//---OpenGL initialisation auxInitDisplayMode (AUX_DOUBLE|AUX_RGB|AUX_DEPTH);auxInitPosition (200, 200, 550, 550);auxInitWindow("Render");init();auxReshapeFunc (reshape); auxMainLoop(paint);return 0;}void init() { glClearColor (0., 0., 0., 0.); glShadeModel (GL_SMOOTH); glEnable(GL_DEPTH_TEST); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);// glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT1); glEnable(GL_COLOR_MATERIAL); SetLight();}void SetLight(){ //====== нАЕ ОНБЕПУМНЯРХ ХГНАПЮФЕМХЪ СВЮЯРБСЧР //====== ОПХ БШВХЯКЕМХХ ЖБЕРЮ ОХЙЯЕКНБ //====== ОПХ СВЕРЕ ОЮПЮЛЕРПНБ НЯБЕЫЕМХЪ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1); float fPos[] = { light_params[0], light_params[1], light_params[2], 1.f }; glLightfv(GL_LIGHT1, GL_POSITION, fPos); float fDir[] = { light_params[3], light_params[4], light_params[5], 1.f }; glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,fDir); //====== хМРЕМЯХБМНЯРЭ НЙПСФЮЧЫЕЦН НЯБЕЫЕМХЪ float f = light_params[6]/100.f; float fAmbient[4] = { f, f, f, 0.f }; glLightfv(GL_LIGHT1, GL_AMBIENT, fAmbient); //====== хМРЕМЯХБМНЯРЭ ПЮЯЯЕЪММНЦН ЯБЕРЮ f = light_params[7]/100.f; float fDiffuse[4] = { f, f, f, 0.f }; glLightfv(GL_LIGHT1, GL_DIFFUSE, fDiffuse); //====== хМРЕМЯХБМНЯРЭ НРПЮФЕММНЦН ЯБЕРЮ f = light_params[8]/100.f; float fSpecular[4] = { f, f, f, 0.f }; glLightfv(GL_LIGHT1, GL_SPECULAR, fSpecular); //====== нРПЮФЮЧЫХЕ ЯБНИЯРБЮ ЛЮРЕПХЮКЮ //====== ДКЪ ПЮГМШУ ЙНЛОНМЕМР ЯБЕРЮ f = light_params[9]/100.f; float fAmbMat[4] = { f, f, f, 0.f }; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, fAmbMat); f = light_params[10]/100.f; float fDifMat[4] = { f, f, f, 1.f }; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, fDifMat); f = light_params[11]/100.f; float fSpecMat[4] = { f, f, f, 0.f }; glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, fSpecMat); //====== аКЕЯРЙНЯРЭ ЛЮРЕПХЮКЮ float fShine = 128 * light_params[12]/100.f; glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, fShine); //====== хГКСВЕМХЕ ЯБЕРЮ ЛЮРЕПХЮКНЛ f = light_params[13]/100.f; float fEmission[4] = { f, f, f, 0.f }; glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, fEmission);}void _stdcall reshape(int w,int h){ double dAspect = w<=h ? double(h)/w : double(w)/h; glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective (45.0, dAspect, 0.01, 10000.); glViewport(0, 0, w, h);}void _stdcall paint(){ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslated(transX,transY,transZ); glRotated(angleX,1.0,0.0,0.0); glRotated(angleY,0.0,1.0,0.0); glCallList(1); auxSwapBuffers();}static void __stdcall OnButtonDown(AUX_EVENTREC *pEvent){ //====== гЮОНЛХМЮЕЛ ЙННПДХМЮРШ ЛШЬХ sX = pEvent->data[AUX_MOUSEX]; sY = pEvent->data[AUX_MOUSEY];}static void __stdcall OnLMouseMove(AUX_EVENTREC *pEvent){ short cX,cY; cX = pEvent->data[AUX_MOUSEX]; cY = pEvent->data[AUX_MOUSEY]; angleY -= (sX - cX)/10.f; angleX -= (sY - cY)/10.f; sX = cX; sY = cY;}static void __stdcall OnRMouseMove(AUX_EVENTREC *pEvent){ short cX,cY; cX = pEvent->data[AUX_MOUSEX]; cY = pEvent->data[AUX_MOUSEY]; transZ-= (((sX-cX) + (sY - cY))/80.f); sX = cX; sY = cY;}
Форма ответа