C++ Opengl superbible第5版代码问题
我已经开始阅读《超级圣经》第五版,我被困在第一个节目中。当我使用xp&vs2008时,我按照书中提供的所有指令设置vs2008以运行三角形程序,但在编译过程之后,它显示了一个错误,我不知道为什么会发生这种情况。计划如下:C++ Opengl superbible第5版代码问题,c++,visual-studio,opengl,C++,Visual Studio,Opengl,我已经开始阅读《超级圣经》第五版,我被困在第一个节目中。当我使用xp&vs2008时,我按照书中提供的所有指令设置vs2008以运行三角形程序,但在编译过程之后,它显示了一个错误,我不知道为什么会发生这种情况。计划如下: // Triangle.cpp // Our first OpenGL program that will just draw a triangle on the screen. #include <GLTools.h> // OpenGL toolkit #in
// 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 the 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;
}
有人能帮我解决这个问题吗?谢谢。您收到的错误消息表明freeglut\u static.lib文件已损坏。您最好重新安装库,以确保文件复制正确,或者您也可以尝试从源代码重建库
从另一个网站尝试一个预构建的版本可能是值得的,也许你会更幸运地使用Visual Studio版本。我认为你的问题不在于代码。我已经追查到了
#define FREEGLUT_STATIC
这样做的结果是:
# ifdef FREEGLUT_STATIC
# define FGAPI
# define FGAPIENTRY
/* Link with Win32 static freeglut lib */
# if FREEGLUT_LIB_PRAGMAS
# pragma comment (lib, "freeglut_static.lib")
# endif
但是,如果您从下载了准备好的包,则只能获得freeglut.lib。所以,要么您必须从freeglut为自己构建“freeglut_static.lib”,要么不使用静态宏,这样您就可以了。链接器只是说它正在经历什么-找不到您的文件,所以无法读取
顺便说一句:这本书的指导是一回事,但可能你跳过了一些东西,或者他们只是没有包括在内,但当你下载clean freeglut时,VisualStudio2008Static文件夹不包含任何库,只是另一个文件夹和VisualStudio项目。您需要打开该项目,在MSVC中选择release version(构建->配置管理器)并构建项目。您可以在release文件夹中找到freeglut\u static.lib。您是否确保有d:\opengl\SB5\freeglut-2.6.0\VisualStudio2008Static\release\freeglut\u static.lib?您使用的是库还是DLL?我已经打错了几十次了,这就导致了这个问题(你的错误列出了LIB,但你确定它是真的吗,以及正确的文件,等等)LIB按照书中的指示,我已经从superbible官方网站下载了freeglut。那么,为什么不从图书馆的主页下载这个库,然后自己从源代码处编译它呢。这样可以确保链接库和编译器match.freeglut正确无误,我的一个朋友正在毫无问题地使用它。您可以做的事情不多,出现错误的唯一原因是您试图链接.dll而不是.lib,或者库文件已损坏/无法读取。您正在传递正确的文件,因此唯一的替代方法是编译器无法读取该文件。您唯一的选择是重建库。
# ifdef FREEGLUT_STATIC
# define FGAPI
# define FGAPIENTRY
/* Link with Win32 static freeglut lib */
# if FREEGLUT_LIB_PRAGMAS
# pragma comment (lib, "freeglut_static.lib")
# endif