在Windows上设置OpenGL库

3

我完全不懂OpenGL,所以我正在尝试在家中编译我的应用程序。在学校里,我的教授已经在实验室里设置好了一切,并且我在那里使用Linux。在家里,我使用Windows 8和Visual Studio 2013。

我正在尝试在我的应用程序中构建一个包含以下内容的球体:

#include <GL/glut.h>
#include <math.h>
#include <iostream>

因为它包含Glut.h,所以我去了http://www.opengl.org/resources/libraries/glut/glut_downloads.php#2下载这个库并尝试使用它,但是我遇到了一些问题。
我以为Windows版本已经被编译好了,但实际上不是。我原本期望在包中找到dll文件来链接我的项目属性,但没有。因此,我尝试使用CMake编译glut,但是失败了。CMake向我返回以下日志:
CMake Error: Cannot open file for write: C:/Program Files/Glut 3.7 Build/CMakeCache.txt.tmp
CMake Error: The source directory "C:/Program Files/Glut 3.7/glut-3.7" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
CMake Error: : System Error: No such file or directory
CMake Error: Unable to open cache file for save. C:/Program Files/Glut 3.7 Build/CMakeCache.txt
CMake Error: : System Error: No such file or directory

它说文件夹中没有包含CMake文件。

我下载的glut链接(应该是Windows版,但由于错误不确定)是这个http://www.opengl.org/resources/libraries/glut/glut37.zip

通常我编写Java程序,我没有很多设置IDE的头痛..所以请放心,现在我问:

我缺少什么使我的OpenGL代码运行?

3个回答

4

首先,您的老师应该是您寻求帮助的第一人。

我想告诉您,GLUT库自1998年以来就已经被废弃了。最后一个版本是[3.7]。但是你很幸运!

freeglut”是OpenGL实用工具包(GLUT)库的替代品。您需要的一切都在这里,我建议您全部阅读。

为了帮助您,您可以在此处找到Windows二进制文件,寻找名为:“Download freeglut 2.8.1-1 for MSVC” 的链接。

下载后,您必须链接library文件夹和include文件夹,并将freeglut.dll复制到项目文件夹中(在Debug或Release文件夹内)。您可以在bin文件夹中找到dll文件。

之后,您可以毫无问题地调用#include "GL/glut.h"

祝好运!


2

它无法使用CMake编译。打开Visual Studio命令提示符,在glut源代码的顶层目录中键入nmake


-1
在我的大学里,实验室的教授已经为我安排好了一切,我在那里使用Linux。在家里,我使用Windows 8和Visual Studio 2013。
然后,你绝对必须做的第一件事情是前往你的GPU制造商网站,从那里下载最新的驱动程序并安装它们。这是因为默认安装在Windows 8上的驱动程序缺乏适当的OpenGL功能。
所以,既然它包含“Glut.h”。
你的意思是“glut.h”——在大多数操作系统上,文件名区分大小写(Windows不在其中)。因此,出于可移植性的原因,你应该注意用正确的拼写来编写它们。
我去http://www.opengl.org/resources/libraries/glut/glut_downloads.php#2下载库。
旧的GLUT库已经超过十年没有维护了。使用类似FreeGLUT的替代实现,并使用它。
所以我尝试使用CMake来编译glut,但它没起作用。好吧,在这里你没有技术问题,而是缺乏理解。基本上,你的大脑被我称之为“IDE腐烂”的东西所遮盖:所有那些IDE的糖衣和点来点去的动作掩盖了程序构建时实际发生的事情。你必须下定决心理解构建控制生成器构建系统编译器链接器之间的交互如何工作。

CMake是一个构建控制生成器:在CMake中,您描述程序源代码的构建依赖关系。从此,CMake为所使用的构建系统(例如Linux上的GNU make和GCC; Windows上的NMake和MSVC++编译器) 生成实际的构建信息。

当然,要让CMake工作,必须有适当的CMake配置存在。在GLUT的情况下,肯定不是这样(最后一个官方版GLUT的发布日期早于CMake的第一次发布)。

现在你应该真正想知道:为什么你首先要调用“cmake”?我敢打赌,因为到目前为止你总是这样做,或者你在某个地方读到了它,甚至没有试图理解正在发生的事情。

你所做的是遵循货物崇拜 - 它在某种程度上类似于实际过程,从外部看起来像是这样,但它并不产生结果。费曼后来发表了货物崇拜编程一词;有趣的是,我使用了这个术语(与其定义一致,只是因为熟悉费曼的演讲)而不知道其他人已经以完全相同的方式创造了它。这种情况经常发生,人们会独立地提出相同的术语。

通常我编写Java程序,我不需要设置太多IDE的头疼问题

好吧,你的问题就在这里。你只知道如何在IDE中点击。即使编写Java程序,也应该对实际的构建过程非常熟悉:Java编译器、JAR文件创建等等。

我错过了什么才能让我的OpenGL代码运行吗?
我敢打赌,你可能只是缺乏对软件构建过程如何工作和被控制的理解。你必须咬紧牙关学习它。为此,我建议你在电脑上安装Linux或FreeBSD,或者至少安装Cygwin。
Windows不是一个很好的系统来学习这些东西,因为它是围绕着点击式的GUI构建的。这并不是说Windows是一个糟糕的操作系统。只是说你需要有一些可以进行实验并快速进行各种构建工具选项切换迭代的东西。GUI提供不了这个功能。

Linux的Shell和Windows的命令提示符之间没有区别。两者都是命令行界面,您可以从命令行轻松调用编译器和构建工具,就像在Windows上一样。实际上,当您安装Visual Studio时,它还会安装完全配置好的命令提示符,随时可用。如果有什么不同的话,可能更容易在Windows上使用Visual Studio从命令行编译。 - IInspectable
@IInspectable:这是个不好笑的玩笑,不是吗?标准的Windows cmd.exe命令提示符与真正的类Unix shell相比简直是一个糟糕的玩笑。在Windows中,你必须使用PowerShell才能接近。如果你没有感受到zsh或bash等shell和Windows的cmd.exe之间的区别,那么你肯定没有使用过真正的shell。 - datenwolf
关于调用gcccl,实际上并没有什么区别,同样的道理也适用于makenmake/msbuild。这就是你需要从命令行编译学习的全部内容。如果你不同意,那么你需要扩展你的答案,包括为什么*nix是一个更好的系统来构建坚实的基础。 - IInspectable
1
你改变了话题。你在回答中涉及的主题是如何学习构建过程。你还没有提供深刻的证据说明为什么*nix在这方面更好。你提供的链接解释了如何设置一个用作IDE(替代品)的shell。但我们仍处于尚未使用IDE阶段。鉴于OP已经有了一个完全配置好的基于命令行的构建系统,你建议他们花费大量精力去获取另一个构建系统是错误和无根据的。 - IInspectable
我们都认为学习如何在命令行中使用构建工具是有益的。你仍然未能提供深刻的证据,说明为什么OP已经安装的构建系统不适合作为学习工具。请提供证据,否则请从你的答案中删除没有根据的观点和误导性建议。 - IInspectable
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接