我在Linux上使用freeglut用C++(g ++)编写了一些效果,然后用它编译它们
g++ -Wall -lglut part8.cpp -o part8
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否有可能让g ++制作包含所需内容的静态编译Windows可执行文件?
我没有Windows,所以如果我能在Linux上做到这一点真的很酷:)
我最近开始学习OpenGL(> 3.3)并且我注意到很多示例和教程都使用了freeglut和glew,但是并没有真正解释它们的区别.我在谷歌搜索和阅读广告后发现的最好的描述是这个OpenGL相关的工具包和API,但发现它缺乏.我甚至在SO上读过标签信息.
作为OpenGL的新手,我仍然试图掌握不同的概念.我已经到了创建基本程序的阶段,该程序使用glew,创建上下文(在Windows上,VS2010),并绘制真正基本的形状,所有这些都不需要明确包含freeglut.所以我不明白为什么我需要它.
所以我的问题是,有什么区别:
-freeglut
-glew
- (&glfw)
另一个人不能
做什么呢?
我的大学开始教授包含OpenGL编程的课程.他们让我们使用FreeGLUT为OpenGL创建窗口和上下文,但我在lynda.com上找到了一个关于OpenGL的在线课程,他们使用GLFW而不是FreeGLUT.
所以我想知道我应该使用哪一个,两者之间有什么区别?
我正在尝试在网上阅读一些OpenGL教程.问题是我找到了一些旧的gluPerspective()
.gluPerspective在OpenGL 3.0中已弃用,在3.1中已删除.
我可以用什么功能代替?
我正在使用安装了最新FreeGlut的C++.
我使用GLEW和freeglut.出于某种原因,在调用glewInit()之后,glGetError()返回错误代码1280,即使使用glewExperimental = GL_FALSE也是如此.
我无法编译着色器,glGetProgramInfoLog()返回"在调用glLinkProgram()之前未成功编译顶点着色器.链接失败." 之前我能够编译着色器.
重新安装驱动程序没有帮助.
这是我的代码:
int main(int argc, char* argv[])
{
GLenum GlewInitResult, res;
InitWindow(argc, argv);
res = glGetError(); // res = 0
glewExperimental = GL_TRUE;
GlewInitResult = glewInit();
fprintf(stdout, "ERROR: %s\n", glewGetErrorString(GlewInitResult)); // "No error"
res = glGetError(); // res = 1280
glutMainLoop();
exit(EXIT_SUCCESS);
}
void InitWindow(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitContextVersion(4, 0);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
GLUT_ACTION_GLUTMAINLOOP_RETURNS);
glutInitWindowPosition(0, 0);
glutInitWindowSize(CurrentWidth, CurrentHeight);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
WindowHandle = glutCreateWindow(WINDOW_TITLE);
GLenum errorCheckValue = glGetError();
if (WindowHandle …
Run Code Online (Sandbox Code Playgroud) 我的代码充满了警告,比如
不推荐使用“glTranslatef”:首先在 macOS 10.14 中不推荐使用 - 不推荐使用 OpenGL API。(定义 GL_SILENCE_DEPRECATION 以消除这些警告)
我做了,#define GL_SILENCE_DEPRECATION
但这并没有解决问题。我使用的freeglut
是通过使用安装的brew install freeglut
我可以以某种方式让它静音吗?
我在使用FreeGLUT关闭我的控制台应用程序时遇到了麻烦.
我想知道什么是最好的方法来采取每一个可能的结束,因为我不希望任何内存泄漏(我很害怕那些).
所以我已经尝试了以下内容,这给了我一个这样的例外:
myProject.exe中0x754e6a6f的第一次机会异常:0x40010005:Control-C.
int main(int argc, char **argv)
{
if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, true) )
{
// more code here as well ....
glutCloseFunc(close); // set the window closing function of opengl
glutMainLoop();
close(); // close function if coming here somehow
}
else
{
return 1;
}
return 0;
}
void close()
{
// keyboardManager is a pointer to a class
// which I want to delete, so no memory will leak.
if(keyboardManager) // do I need this check? …
Run Code Online (Sandbox Code Playgroud) 一些上下文:我正在阅读有关使用OpenGL 的教程.本教程需要几个库才能工作.其中一个库是FreeGLUT.我使用Lion在OS X上.
我已经下载了FreeGLUT并按照说明进行安装,但是当我运行'make all'命令时,我收到此错误:
error: GL/gl.h: No such file or directory
error: GL/glu.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经在互联网上寻找解决方案,而我能够从中理解的是,编译器在查找这些文件时遇到了问题,并且编译器正在使用的路径需要更改.
编辑:好的,我已经发现它不是编译器,它是由于某种原因那些文件不存在.试着弄清楚他们为什么不在那里.
我在 Linux (Ubuntu) 下编译了一个 C++ 代码,只要我将显示器连接到我的 PC,一切都很好。
我的代码显示了一些图形,然后保存了它们的屏幕截图。运行时图形对我来说并不重要,但屏幕截图很重要。
但是如果我远程运行代码,我会遇到以下运行时错误:
freeglut(东西):无法打开显示''
如果我转发 x ( ssh -v -X
) 一切都会被找到。但如果我不这样做呢?!
如何绕过它?我不在乎是否显示任何内容。是否可以在远程计算机上定义临时虚拟屏幕或以任何其他方式解决此问题?我只需要截图文件。
我目前正在开发一个OpenGL应用程序,向用户显示一些3D球体,它们可以旋转,移动等等.也就是说,这里的复杂程度并不多,所以应用程序运行得相当高帧速率(~500 FPS).
显然,这是过度的 - 甚至120就足够了,但我的问题是以全速运行应用程序会占用我的CPU,导致过多的热量,功耗等.我想做的是能够让用户设置FPS上限,以便在不需要时不会过度使用CPU.
我正在使用freeglut和C++,并且已经设置了动画/事件处理以使用定时器(使用glutTimerFunc
).的glutTimerFunc
,但是,只允许设置毫秒的整量-所以,如果我想120 FPS,我能得到的最接近的是(int)1000/120 = 8 ms
分辨率,这相当于125 FPS(我知道这是一个neglegible量,但我还是只想把如果我知道系统可以更快地渲染,那么在FPS限制中并获得FPS.
此外,使用glutTimerFunc
限制FPS永远不会一致.假设我将我的应用程序限制为100 FPS,它通常不会高于90-95 FPS.同样,我已经尝试计算渲染/计算之间的时间差,但它总是超过限制5-10 FPS(可能是计时器分辨率).
我想这里最好的比较是游戏(例如半条命2) - 你设置你的FPS上限,它总是达到那个确切的数量.我知道我可以在渲染每个帧之前和之后测量时间增量,然后循环直到我需要绘制下一个帧,但这不能解决我的100%CPU使用率问题,也不能解决时序分辨率问题.
有什么办法可以在我的应用程序中实现有效的,跨平台的,可变的帧速率限制器/上限吗?或者,换句话说,是否有任何跨平台(和开源)库实现高分辨率计时器和睡眠功能?
编辑:我更愿意找到一个不依赖于最终用户启用VSync的解决方案,因为我将让他们指定FPS上限.
编辑#2:对于所有推荐SDL的人(我最终将我的应用程序移植到SDL),使用该glutTimerFunc
函数触发绘制或使用SDL_Delay
等待绘制之间有什么区别吗?每个文档确实提到了相同的警告,但我不确定一个是否比另一个更高效或更低效.
编辑#3:基本上,我试图弄清楚是否有一种(简单的方法)在我的应用程序中实现一个准确的FPS限制器(再次,像Half Life 2).如果这是不可能的,我很可能会切换到SDL(对我来说更有意义的是使用延迟函数而不是glutTimerFunc
每x
毫秒用来回调渲染函数).