Napisałem prostą aplikację okienkową obracającą trójkąt wokół osi Oz, oto kod:
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <gl\GL.h>
#include <gl\GLU.h>
float angle = 0.1f;
HDC g_HDC;
void SetupPixelFormat(HDC hDC)
{
int nPixelFormat;
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,
0,
0, 0, 0, 0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0, 0
};
nPixelFormat = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, nPixelFormat, &pfd);
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HGLRC hRC;
static HDC hDC;
int width, height;
switch(message)
{
case WM_CREATE:
hDC = GetDC(hwnd);
g_HDC = hDC;
SetupPixelFormat(hDC);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
return 0;
break;
case WM_CLOSE:
wglMakeCurrent(hDC, NULL);
wglDeleteContext(hRC);
PostQuitMessage(0);
return 0;
break;
case WM_SIZE:
height = HIWORD(lParam);
width = LOWORD(lParam);
if(height == 0)
height = 1;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
return 0;
break;
default:
break;
}
return (DefWindowProc(hwnd, message, wParam, lParam));
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
WNDCLASSEX windowClass;
HWND hwnd;
MSG msg;
bool done;
windowClass.cbSize = sizeof(WNDCLASSEX);
windowClass.style = CS_HREDRAW | CS_VREDRAW;
windowClass.lpfnWndProc = WndProc;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = hInstance;
windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowClass.hbrBackground = NULL;
windowClass.lpszMenuName = NULL;
windowClass.lpszClassName = L"Moja Klasa";
windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
if(!RegisterClassEx(&windowClass))
return 0;
hwnd = CreateWindowEx(NULL,
L"Moja Klasa",
L"Aplikacja OpenGL",
WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
100, 100,
400, 400,
NULL,
NULL,
hInstance,
NULL);
if(!hwnd)
return 0;
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
done = false;
while(!done)
{
PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE);
if(msg.message == WM_QUIT)
done = true;
else
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
angle += 0.1f;
if(angle >= 360.0f)
angle = 0.0f;
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glEnd();
SwapBuffers(g_HDC);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
A oto co pluje się kompilator
Microsoft Visual Studio 2010 napisał(a)
1>------ Build started: Project: Triangle, Configuration: Debug Win32 ------
1>Build started 2011-05-23 1456.
1>InitializeBuildStatus:
1> Touching "Debug\Triangle.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>ManifestResourceCompile:
1> All outputs are up-to-date.
1>main.obj : error LNK2019: unresolved external symbol gluPerspective@32 referenced in function "long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND_@@IIJ@Z)
1>main.obj : error LNK2019: unresolved external symbol imp__glLoadIdentity@0 referenced in function "long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND@@IIJ@Z)
1>main.obj : error LNK2019: unresolved external symbol imp__glMatrixMode@4 referenced in function "long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND@@IIJ@Z)
1>main.obj : error LNK2019: unresolved external symbol imp__glViewport@16 referenced in function "long stdcall WndProc(struct HWND *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND@@IIJ@Z)
1>main.obj : 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)
1>main.obj : 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)
1>main.obj : 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)
1>main.obj : error LNK2019: unresolved external symbol __imp__glEnd@0 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol __imp__glVertex3f@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol __imp__glBegin@4 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol __imp__glColor3f@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol __imp__glRotatef@16 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol __imp__glTranslatef@12 referenced in function _WinMain@16
1>main.obj : error LNK2019: unresolved external symbol __imp__glClear@4 referenced in function _WinMain@16
1>c:\users\mjay\documents\visual studio 2010\Projects\Triangle\Debug\Triangle.exe : fatal error LNK1120: 14 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 0000.56
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
W czym może być problem?