Новичок
Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.5.2008
Репутация: нет Всего: нет
|
Как я понимаю прикреплённый код расчитан на Win 32 Aplication (no console)... Может всё-таки кто-то умудрялся делать это (полноэкранный режим) в простом консольном приложении? позже добавлено:Данная проблема решилась, выкладываю код (может кому понадобится)Код | #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h>
#pragma comment (lib, "OpenGL32.lib") #pragma comment (lib, "Glu32.lib") #pragma comment (lib, "Glaux.lib")
static GLint resW = 640, resH = 480; bool isFullscr = true; static GLdouble cntr; BOOL keys[256];
HGLRC hGLRC; HDC hDC;
static GLfloat light1_position[] = {0.0, 0.0, 3.0, 1.0};
GLvoid InitGL() {
GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0}; glClearColor (0.5, 0.5, 1, 0.5);
GLfloat light_position[] = {0.0, 0.0, 10.0, 1.0}; glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 20.0); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glLightf (GL_LIGHT0, GL_SPECULAR, 128); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0);
glShadeModel (GL_SMOOTH); glEnable (GL_DEPTH_TEST); glEnable (GL_AUTO_NORMAL); glEnable (GL_NORMALIZE); glEnable (GL_CULL_FACE); // Aee??aai iona?aiea a?aiae glCullFace (GL_BACK); }
void reshape(int width,int height) { glViewport(0,0,width,height); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective (50.0, (GLfloat)width/(GLfloat)height, 1.0, 100.0); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); }
void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glPushMatrix(); cntr +=0.1; glTranslatef (0.0, 0.0, -10); ///////!!!!glColor3d(1,0,0);!!!!/////// auxSolidSphere (1); glRotated(cntr, cntr, cntr, cntr); auxWireTorus(1,2); if (cntr >= 360.0f) cntr =0.0f;
glPopMatrix(); glFlush(); }
LRESULT CALLBACK WindowFunc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { RECT Screen;
GLuint PixelFormat; 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, 1, 1, 1, 1, 32, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0 };
switch(message) { case WM_CREATE: hDC = GetDC(hWnd);
PixelFormat = ChoosePixelFormat(hDC, &pfd); if (!PixelFormat) {
MessageBox (0, "Error!", "Error", MB_OK | MB_ICONERROR); SendMessage(hWnd, WM_DESTROY, wParam, lParam); break; }
SetPixelFormat (hDC, PixelFormat, &pfd); if (!SetPixelFormat (hDC, PixelFormat, &pfd)) {
MessageBox (0, "Error!","Error", MB_OK | MB_ICONERROR); SendMessage(hWnd, WM_DESTROY, wParam, lParam); break; }
hGLRC = wglCreateContext (hDC); if (!hGLRC) {
MessageBox (0, "Error OpenGL!","Error", MB_OK | MB_ICONERROR); SendMessage(hWnd, WM_DESTROY, wParam, lParam); break; }
wglMakeCurrent(hDC, hGLRC); if (!wglMakeCurrent(hDC, hGLRC)) { MessageBox (0, "Error", "Error!!!", MB_OK | MB_ICONERROR);
SendMessage(hWnd, WM_DESTROY, wParam, lParam); break; }
InitGL (); break;
case WM_DESTROY: case WM_CLOSE: ChangeDisplaySettings (NULL, 0); if(hDC) wglMakeCurrent(hDC, NULL); if(hGLRC) wglDeleteContext(hGLRC); if(hWnd) ReleaseDC(hWnd, hDC); PostQuitMessage(0); break;
case WM_SIZE: GetClientRect (hWnd, &Screen); reshape(Screen.right, Screen.bottom ); break;
case WM_SYSKEYDOWN: case WM_KEYDOWN: keys[wParam] = TRUE; break;
case WM_SYSKEYUP: case WM_KEYUP: keys[wParam] = FALSE; break;
default: return DefWindowProc(hWnd,message,wParam,lParam); }
return 0; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR str,int nWinMode) { MSG msg; WNDCLASS wc; HWND hWnd;
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc.lpfnWndProc = WindowFunc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = "OpenGLWinClass";
if (!RegisterClass(&wc)) { MessageBox(0, "Error","Error!!!", MB_OK | MB_ICONERROR); return FALSE; }
if(isFullscr) { hWnd = CreateWindow( "OpenGLWinClass", "O?IE 01 >OpenGL is COOL", WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, 0, resW, resH, NULL, NULL, hInstance, NULL); } else { hWnd = CreateWindow( "OpenGLWinClass", "O?IE 01 >OpenGL is COOL", WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE | WS_SIZEBOX, 0, 0, resW, resH, NULL, NULL, hInstance, NULL); }
if (!hWnd) { MessageBox(0, "Error","Error!!!", MB_OK | MB_ICONERROR); return FALSE; }
if(isFullscr) { DEVMODE dmScreenSettings; memset (&dmScreenSettings, 0, sizeof(DEVMODE)); dmScreenSettings.dmSize = sizeof(DEVMODE); dmScreenSettings.dmPelsWidth = resW; dmScreenSettings.dmPelsHeight = resH; dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; ChangeDisplaySettings (&dmScreenSettings, CDS_FULLSCREEN); }
ShowWindow(hWnd,nWinMode); UpdateWindow(hWnd); SetFocus(hWnd);
while (1) { while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } else return TRUE; }
display(); SwapBuffers(hDC);
if (keys[VK_ESCAPE]) SendMessage(hWnd, WM_CLOSE, 0, 0);
} }
|
Одновременно с решённой проблемой появилась другая... Почему, когда я в функции display пытаюсь получить на выходе красную сферу рисуется почему-то серая?M arilou | Внимание: один топик - один вопрос. Ну и не забывайте, что телепатов на форуме нет, выкладывайте код | Это сообщение отредактировал(а) arilou - 12.5.2008, 00:20
|