|
50啊哈币
- // Triangle.cpp
- // Our first OpenGL program that will just draw a triangle on the screen.
- #include <GLTools.h> // OpenGL toolkit
- #include <GLShaderManager.h> // Shader Manager Class
- #ifdef __APPLE__
- #include <glut/glut.h> // OS X version of GLUT
- #else
- #define FREEGLUT_STATIC
- #include <GL/glut.h> // Windows FreeGlut equivalent
- #endif
- GLBatch triangleBatch;
- GLShaderManager shaderManager;
- ///////////////////////////////////////////////////////////////////////////////
- // Window has changed size, or has just been created. In either case, we need
- // to use the window dimensions to set the viewport and the projection matrix.
- void ChangeSize(int w, int h)
- {
- glViewport(0, 0, w, h);
- }
- ///////////////////////////////////////////////////////////////////////////////
- // This function does any needed initialization on the rendering context.
- // This is the first opportunity to do any OpenGL related tasks.
- void SetupRC()
- {
- // Blue background
- glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
- shaderManager.InitializeStockShaders();
- // Load up a triangle
- GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
- 0.5f, 0.0f, 0.0f,
- 0.0f, 0.5f, 0.0f };
- triangleBatch.Begin(GL_TRIANGLES, 3);
- triangleBatch.CopyVertexData3f(vVerts);
- triangleBatch.End();
- }
- ///////////////////////////////////////////////////////////////////////////////
- // Called to draw scene
- void RenderScene(void)
- {
- // Clear the window with current clearing color
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
- shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
- triangleBatch.Draw();
- // Perform the buffer swap to display back buffer
- glutSwapBuffers();
- }
- ///////////////////////////////////////////////////////////////////////////////
- // Main entry point for GLUT based programs
- int main(int argc, char* argv[])
- {
- gltSetWorkingDirectory(argv[0]);
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
- glutInitWindowSize(800, 600);
- glutCreateWindow("Triangle");
- glutReshapeFunc(ChangeSize);
- glutDisplayFunc(RenderScene);
- GLenum err = glewInit();
- if (GLEW_OK != err) {
- fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
- return 1;
- }
- SetupRC();
- glutMainLoop();
- return 0;
- }
复制代码
最近看了OpenGL Super Bible(Fifth Edition)里面提供的源代码我用Code::Blocks和g++不能编译
以上是源代码
报错如下(有点多……):
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"advapi32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"freeglut_static.lib" /DEFAULTLIB:"glu32.lib" /DEFAULTLIB:"opengl32.lib" /DEFAULTLIB:"gdi32.lib" /DEFAULTLIB:"winmm.lib" /DEFAULTLIB:"user32.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
||Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
obj\Debug\D\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.o||In function `_Z7SetupRCv':|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|34|undefined reference to `GLShaderManager::InitializeStockShaders()'|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|41|undefined reference to `GLBatch::Begin(unsigned int, unsigned int, unsigned int)'|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|43|undefined reference to `GLBatch::End()'|
obj\Debug\D\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.o||In function `_Z11RenderScenev':|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|56|undefined reference to `GLShaderManager::UseStockShader(GLT_STOCK_SHADER, ...)'|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|57|undefined reference to `GLBatch:raw()'|
obj\Debug\D\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.o||In function `main':|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|68|undefined reference to `gltSetWorkingDirectory(char const*)'|
obj\Debug\D\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.o||In function `_Z41__static_initialization_and_destruction_0ii':|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|14|undefined reference to `GLBatch::GLBatch()'|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|15|undefined reference to `GLShaderManager::GLShaderManager()'|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|15|undefined reference to `GLShaderManager::~GLShaderManager()'|
D:\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.cpp|14|undefined reference to `GLBatch::~GLBatch()'|
obj\Debug\D\OpenGL\SB5\Src\Chapter02\Triangle\Triangle.o||In function `RadianToAngle':|
D:\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\math.h|180|undefined reference to `GLBatch::CopyVertexData3f(float (*) [3])'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_main.obj).text[_fgSystemTime]+0x2)||undefined reference to `__imp__timeGetTime@0'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_main.obj).text[_fgError]+0x6)||undefined reference to `___iob_func'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_main.obj).text[_fgError]+0x26)||undefined reference to `___iob_func'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_main.obj).text[_fgError]+0x41)||undefined reference to `___iob_func'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_main.obj).text[_fgError]+0x57)||undefined reference to `___iob_func'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_main.obj).text[_fgWarning]+0x6)||undefined reference to `___iob_func'|
16]+0xfe)||undefined reference to `__imp__wglCreateContext@4'|
16]+0x10f)||undefined reference to `__imp__wglMakeCurrent@8'|
16]+0x15f)||undefined reference to `__imp__wglGetCurrentContext@0'|
16]+0x170)||undefined reference to `__imp__wglCreateContext@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj).text[_fghIsExtensionSupported]+0x7)||undefined reference to `__imp__wglGetProcAddress@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj).text[_fgNewWGLCreateContext]+0x13)||undefined reference to `__imp__wglMakeCurrent@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj).text[_fgNewWGLCreateContext]+0x4c)||undefined reference to `__imp__wglGetProcAddress@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj).text[_fgNewWGLCreateContext]+0x87)||undefined reference to `__imp__wglDeleteContext@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fghFillPFD]+0xb5)||undefined reference to `__imp__GetDeviceCaps@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x2e)||undefined reference to `__imp__ChoosePixelFormat@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x4b)||undefined reference to `__imp__wglGetCurrentContext@0'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x55)||undefined reference to `__imp__wglGetCurrentDC@0'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0xf6)||undefined reference to `__imp__SetPixelFormat@12'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0xfd)||undefined reference to `__imp__wglCreateContext@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x107)||undefined reference to `__imp__wglMakeCurrent@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x124)||undefined reference to `__imp__wglGetProcAddress@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x18a)||undefined reference to `__imp__wglMakeCurrent@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x191)||undefined reference to `__imp__wglDeleteContext@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetupPixelFormat]+0x1d8)||undefined reference to `__imp__SetPixelFormat@12'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgSetWindow]+0x34)||undefined reference to `__imp__wglMakeCurrent@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgOpenWindow]+0x241)||undefined reference to `__imp__glDrawBuffer@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgOpenWindow]+0x24c)||undefined reference to `__imp__glReadBuffer@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgCloseWindow]+0x13)||undefined reference to `__imp__wglMakeCurrent@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_window.obj):(.text[_fgCloseWindow]+0x43)||undefined reference to `__imp__wglDeleteContext@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_init.obj):(.text[_fghInitialize]+0x10a)||undefined reference to `__imp__GetDeviceCaps@8'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_init.obj):(.text[_fghInitialize]+0x130)||undefined reference to `__imp__timeBeginPeriod@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_init.obj):(.text[_fgDeinitialize]+0x1c0)||undefined reference to `__imp__timeEndPeriod@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_init.obj):(.text[_glutInitDisplayString]+0x48)||undefined reference to `_strtok_s'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_init.obj):(.text[_glutInitDisplayString]+0xfa)||undefined reference to `_strtok_s'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_display.obj):(.text[_glutSwapBuffers]+0x3b)||undefined reference to `__imp__glFlush@0'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_display.obj):(.text[_glutSwapBuffers]+0x54)||undefined reference to `__imp__SwapBuffers@4'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_display.obj):(.text[_glutSwapBuffers]+0xe9)||undefined reference to `___iob_func'|
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib(.\Release\freeglut_menu.obj):(.text[_fghDisplayMenuBox]+0x1c)||undefined reference to `__imp__glColor4f@16'|
||产生更多的错误信息但不显示。|
||在编译器选项里修改最大的错误限制...|
||=== 已完成构建: 50 个错误, 17 个警告 ===|
文件下载链接
http://www.starstonesoftware.com/files/
选
SB5.zip
我在项目->构建选项中链接了
D:\OpenGL\SB5\freeglut-2.6.0\VisualStudio2008Static\Release\freeglut_static.lib
和
D:\OpenGL\SB5\VisualStudio2008\GLTools\Release\gltools.lib
这两个库
并在其他链接选项中添加:
-lglut32
-lopengl32
-lglu32
-lgdi32
-lwinmm
仍然报错
|
|