-1

好的,所以我在 Windows 7 上设置了 Visual Studios C++ 10,这样我就可以运行这本书“OpenGL superbible 第 5 版”中的示例程序,但我遇到了一些主要问题,在获取 GLTools 和 freeglut 时:
这是我设置所有内容的方法到目前为止............

拳头按照我上网的这些步骤:

首先你要下载 glut 或 freeglut,然后解压它。
- 我从http://www.starstonesoftware.com/OpenGL/的 zip 文件中得到这个

在 freeglut 文件夹中应该有一个名为 VisualStudio2008 的文件夹,进入该文件夹。

应该有一个名为 freeglut 的 VS 项目文件,如果出现转换窗口,请运行它并单击完成。然后编译它,如果它完成后它说无法启动,这没关系。

现在在同一个文件夹中应该有一个名为 Debug 的新文件夹,因为您刚刚将 freeglut 编译到它:)。

在里面你会发现freeglut.dll。这需要分别进入您的 system32 文件夹或 SysWOW64 文件夹。

除此之外,还有一个名为 freeglut 的文件,其类型将是 Object File Library。这需要进入 Visual Studio 中的 lib 文件夹。

现在回到主 freeglut 文件夹。应该有一个名为 Include 的文件夹。在这里面有一个叫做 GL 的文件夹和两个文件。这些需要复制到 Visual Studio 中的 Include 文件夹中。

lib 和 Include 文件夹位于主 Visual Studio 文件夹中的 VC 文件夹内,对我来说是 Microsoft Visual Studio 10.0 。

那里:)。`

然后我按照以下步骤设置 GLTools 和 freeglut:

这需要计算机上的管理员权限。

一世。将所有 freeglut 头文件(以 .h 结尾)复制到文件夹:C:\Program Files\Microsoft Visual Studio 10.0\VC\include\GL\

ii. 将所有 GLTools 头文件(以 .h 结尾)复制到 C:\Program Files\Microsoft Visual Studio 10.0\VC\include\

iii. 将所有 freeglut 和 GLTools 库文件(以 .lib 结尾)文件复制到 C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\

iv. 即使您已经将 GLTools.lib 复制到 lib 文件夹中,您可能仍然需要告诉 VS2010 在编译项目时使用 GLTools.lib 文件。从菜单选项 View → Property Manager 打开 Property Manager(您需要一个打开的项目来执行此操作)。VS IDE 的左侧窗格将更改为显示属性管理器。您可以调整它的大小以使其更具可读性。如果未显示完整列表,请展开项目,然后双击 Microsoft.Cpp.Win32.user 链接之一以打开用户属性对话框。在 Property Manager 中,选择 Linker → Input,然后单击 Additional Dependencies(见下文)。在弹出的对话框中添加“GLTools.lib”,我还添加了feeglut_static.lib!

好吧,最后这是我要运行的代码:

#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;
    }

最后,这是我收到的错误:

1>------ Build started: Project: Triangle, Configuration: Debug Win32 ------
1>  Triangle.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(225): error C2144: syntax error : 'void' should be preceded by ';'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(225): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(226): error C2144: syntax error : 'void' should be preceded by ';'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(226): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(226): error C2086: 'int GLAPI' : redefinition
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(225) : see declaration of 'GLAPI'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(227): error C2144: syntax error : 'void' should be preceded by ';'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(227): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(227): error C2086: 'int GLAPI' : redefinition
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\gl\glu.h(225) : see declaration of 'GLAPI'

错误 C1003:错误计数超过 100;停止编译

这会永远持续下去,我不知道怎么会出现这样的问题,以及为什么它会在 GLU.h 中发生!我真的不确定出了什么问题,我已经有这个问题一周了......请帮助=)

谢谢,如有任何问题,请随时提出!

4

1 回答 1

6

不幸的是,您遵循的所有指示都是坏主意。将调试 DLL 复制到系统目录中——不好。将文件复制到 Visual Studio 包含目录 - 不好。

我不使用 GLUT,所以我没有一系列工作步骤,但实际上您应该在项目中创建一个包含 include、lib 和 bin 子目录的子目录,并将所有内容安排在其中。Visual C++ 2008 具有机器范围的目录设置,而 Visual C++ 2010 具有每个项目的目录配置。

至于修复您现在遇到的错误,您需要向我们展示从第 225 行开始的 GL/glu.h 块。

于 2011-04-12T02:25:15.053 回答