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
仍然报错
我来回答