Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opengl superbible第5版代码问题_C++_Visual Studio_Opengl - Fatal编程技术网

C++ Opengl superbible第5版代码问题

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

我已经开始阅读《超级圣经》第五版,我被困在第一个节目中。当我使用xp&vs2008时,我按照书中提供的所有指令设置vs2008以运行三角形程序,但在编译过程之后,它显示了一个错误,我不知道为什么会发生这种情况。计划如下:

// 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