
VIP
 
Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск
Репутация: нет Всего: 1
|
Код | #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h>
static HGLRC hRC; static HDC hDC;
BOOL keys[256];
GLfloat rtri; GLfloat rquard;
GLvoid InitGL(GLsizei Width, GLsizei Height) { glClearColor(0.0f,0.0f,0.0f,0.0f); glClearDepth(1.0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);//************ glMatrixMode(GL_MODELVIEW); }
GLvoid ReSizeScene(GLsizei Width,GLsizei Height) { if(Height==0) Height=1;
glViewport(0,0,Width,Height); glMatrixMode(GL_PROJECTION); glLoadIdentity();
gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); }
GLvoid DrawGLScene(GLvoid) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); }
LRESULT CALLBACK WndProc(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 | // Формат для OpenGL PFD_DOUBLEBUFFER, // Формат для двойного буфера PFD_TYPE_RGBA, // Требуется RGBA формат 16, // Выбор 16 бит глубины цвета 0, 0, 0, 0, 0, 0, // Игнорирование цветовых битов (?) 0, // нет буфера прозрачности 0, // Сдвиговый бит игнорируется (?) 0, // Нет буфера аккумуляции 0, 0, 0, 0, // Биты аккумуляции игнорируются (?) 16, // 16 битный Z-буфер (буфер глубины) 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",MB_OK|MB_ICONERROR); PostQuitMessage(0); break; } if(!SetPixelFormat(hDC,PixelFormat,&pfd)) { MessageBox(0,"ошипка ","Error",MB_OK|MB_ICONERROR); PostQuitMessage(0); break; } hRC=wglCreateContext(hDC); if(!hRC) { MessageBox(0,"error blin","error",MB_OK|MB_ICONERROR); PostQuitMessage(0); break; } if(!wglMakeCurrent(hDC, hRC)) { MessageBox(0,"Can't activate GLRC.","Error",MB_OK|MB_ICONERROR); PostQuitMessage(0); break; } GetClientRect(hWnd, &Screen); InitGL(Screen.right, Screen.bottom); break; case WM_DESTROY: case WM_CLOSE: ChangeDisplaySettings(NULL, 0);
wglMakeCurrent(hDC,NULL); wglDeleteContext(hRC); ReleaseDC(hWnd,hDC);
PostQuitMessage(0); break;
case WM_KEYDOWN: keys[wParam] = TRUE; break;
case WM_KEYUP: keys[wParam] = FALSE; break;
case WM_SIZE: ReSizeScene(LOWORD(lParam),HIWORD(lParam)); break;
default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); }
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { MSG msg; // Структура сообщения Windows WNDCLASS wc; // Структура класса Windows для установки типа окна HWND hWnd; // Сохранение дискриптора окна
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc.lpfnWndProc = (WNDPROC) WndProc; 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 = "OpenGL WinClass";
if(!RegisterClass(&wc)) { MessageBox(0,"Failed To Register The Window Class.","Error",MB_OK|MB_ICONERROR); return FALSE; } hWnd = CreateWindow( "OpenGL WinClass", "Utkin Koljan", // Заголовок вверху окна
WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
0, 0, // Позиция окна на экране 640, 480, // Ширина и высота окна
NULL, NULL, hInstance, NULL); if(!hWnd) { MessageBox(0,"Window Creation Error.","Error",MB_OK|MB_ICONERROR); return FALSE; }
DEVMODE dmScreenSettings; // Режим работы
memset(&dmScreenSettings, 0, sizeof(DEVMODE)); // Очистка для хранения установок dmScreenSettings.dmSize = sizeof(DEVMODE); // Размер структуры Devmode dmScreenSettings.dmPelsWidth = 640; // Ширина экрана dmScreenSettings.dmPelsHeight = 480; // Высота экрана dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; // Режим Пиксела ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
ShowWindow(hWnd, SW_SHOW); 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; } }
DrawGLScene(); // Нарисовать сцену // ЗДЕСЬ НАЧИНАЕТСЯ ВТОРОЙ УРОК NeHe************************************** glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 2 urok glLoadIdentity(); glTranslatef(-1.5f,0.0f,-6.0f); //рисование треугольника glRotatef(rtri,-1.0f,0.0f,0.0f); //смещение точки glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f); //Red color glVertex3f(0.0f,1.0f,0.0f); //Вверх glColor3f(0.0f,1.0f,0.0f); //Green color glVertex3f(-1.0f,-1.0f,1.0f); //слева снизу glColor3f(0.0f,0.0f,1.0f); //Blue color glVertex3f(1.0f,-1.0f,1.0f); //справа снизу //правая грань glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);
//ещё одна грань glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
//левая грань glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f); glEnd(); //рисование квадрата************************************************************** glLoadIdentity(); glTranslatef(1.5,0.0f,-7.0f); glRotatef(rquard,1.0f,1.0f,1.0f); glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,1.0f,-1.0f); glVertex3f(-1.0f,1.0f,-1.0f); glVertex3f(-1.0f,1.0f,1.0f); glVertex3f(1.0f,1.0f,1.0f);
glColor3f(1.0f,0.5f,0.0f); glVertex3f(1.0f,-1.0f,1.0f); glVertex3f(-1.0f,-1.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(1.0f,-1.0f,-1.0f);
glColor3f(1.0f,0.0f,0.0f); glVertex3f(1.0f,1.0f,1.0f); glVertex3f(-1.0f,1.0f,1.0f); glVertex3f(-1.0f,-1.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f);
glColor3f(1.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,1.0f,-1.0f); glVertex3f(1.0f,1.0f,-1.0f);
glColor3f(0.1f,0.0f,1.0f); glVertex3f(-1.0f,1.0f,1.0f); glVertex3f(-1.0f,1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,1.0f);
glColor3f(1.0f,0.0f,1.0f); glVertex3f(1.0f,1.0f,-1.0f); glVertex3f(1.0f,1.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f); glVertex3f(1.0f,-1.0f,-1.0f);
glEnd();
rtri+=0.1f; rquard+=0.1f;
SwapBuffers(hDC); // Переключить буфер экрана if (keys[VK_ESCAPE]) SendMessage(hWnd,WM_CLOSE,0,0); // Если ESC - выйти if (keys[VK_UP]) rquard+=1.0f; if (keys[VK_DOWN]) rquard-=1.0f; if (keys[VK_LEFT]) rtri+=1.0f; if (keys[VK_RIGHT]) rtri-=1.0f;
} }
|
вот такой код компилируется только в Debug, а когда делаю Release то не компилит, и выдаёт такой список Цитата | OGL fatal error LNK1120: 19 unresolved externals OGL error LNK2019: unresolved external symbol _gluPerspective@32 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glLoadIdentity@0 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glMatrixMode@4 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glShadeModel@4 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glEnable@4 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glDepthFunc@4 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glClearDepth@8 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glClearColor@16 referenced in function "void __cdecl InitGL(int,int)" (?InitGL@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glViewport@16 referenced in function "void __cdecl ReSizeScene(int,int)" (?ReSizeScene@@YAXHH@Z) OGL error LNK2019: unresolved external symbol __imp__glClear@4 referenced in function "void __cdecl DrawGLScene(void)" (?DrawGLScene@@YAXXZ) OGL error LNK2019: unresolved external symbol __imp__wglDeleteContext@4 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) OGL error LNK2019: unresolved external symbol __imp__wglMakeCurrent@8 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) OGL error LNK2019: unresolved external symbol __imp__wglCreateContext@4 referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) OGL error LNK2019: unresolved external symbol __imp__glEnd@0 referenced in function _WinMain@16 OGL error LNK2019: unresolved external symbol __imp__glBegin@4 referenced in function _WinMain@16 OGL error LNK2019: unresolved external symbol __imp__glRotatef@16 referenced in function _WinMain@16 OGL error LNK2019: unresolved external symbol __imp__glTranslatef@12 referenced in function _WinMain@16 OGL error LNK2019: unresolved external symbol __imp__glVertex3f@12 referenced in function _WinMain@16 OGL error LNK2019: unresolved external symbol __imp__glColor3f@12 referenced in function _WinMain@16
|
и ещё не компилит в том случае если ставить в настройках оптимизацию(хоть на размер файла, хоть на скорость) Прошу совета, как от этого избавиться
|