标签: freeglut

来自对象的freeglut中的回调函数

我正在使用MSVC++和freeglut来使用openGL.现在,我有一个叫做的类Camera,它非常简单,但它也保存了重塑窗口的功能.

我的问题是:如何glutReshapeFunc(void (*callback)(int,int))在相机中设置我的功能?

我有以下代码,由于编译器错误,它将无法工作:

int main(int argc, char **argv)
{
    Camera *camera = new Camera();
    glutReshapeFunc(camera->ReshapeCamera);
}
Run Code Online (Sandbox Code Playgroud)

我的Camera类在Camera.h中看起来像这样:

class Camera
{
public:
    Camera(void);
    ~Camera(void);
    void ReshapeCamera(int width, int height);
};
Run Code Online (Sandbox Code Playgroud)

也许这只是一个更普遍的回调问题,但我在互联网上找到的唯一一件事就是围绕回调创建一些包装类.但它看起来不应该这么难.提前致谢.

c++ opengl callback freeglut

8
推荐指数
1
解决办法
3268
查看次数

删除Glut/FreeGlut/GLFW的控制台窗口?

在Visual C++下,我玩过Glut/FreeGlut/GLFW.似乎这些项目的每个人都默认添加了一个CMD窗口.我尝试将其移除:

属性 - > C/C++ - >预处理器 - >预处理器定义

从这里,我删除_CONSOLE并将其替换为_WINDOWS

然后我去了:

属性 - >连接器 - >系统 - >子系统

我将选项设置为Windows(/ SUBSYSTEM:WINDOWS)

然后当我尝试在GLFW下编译时,我得到以下构建错误:

  • 错误1错误LNK2001:未解析的外部符号_WinMain @ 16 MSVCRT.lib

  • 错误2致命错误LNK1120:1未解析的外部glfwWindow.exe

是否可以删除控制台窗口?

c++ configuration glut freeglut glfw

8
推荐指数
5
解决办法
1万
查看次数

GLFW打开OpenGL 3.2上下文,但Freeglut不能 - 为什么?

我正在使用Mac,我已经编译并安装了FreeGlut,但我似乎无法使用它获得OpenGL 3.2上下文.但是,在使用GLFW时,我可以毫无问题地获得它.所以在GLFW中,这段代码完全正常:

    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)
Run Code Online (Sandbox Code Playgroud)

但是使用FreeGlut,这段代码失败了(打开glutCreateWindow):

glutInitContextVersion (3, 2);
glutInitContextProfile(GLUT_CORE_PROFILE);  
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200);
int window = glutCreateWindow (argv[0]);
Run Code Online (Sandbox Code Playgroud)

它失败的错误是:

X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  34 (X_UngrabKey)
  Serial number of failed request:  29
  Current serial number in output stream:  29
Run Code Online (Sandbox Code Playgroud)

我在MacOS X 10.8 Mountain Lion上运行,使用Intel HD4000显卡,安装了XQuartz作为我的X11服务器,并从源代码编译和安装了FreeGlut 2.8.

有谁知道可能是什么问题?

opengl macos glut freeglut glfw

8
推荐指数
1
解决办法
2474
查看次数

Freeglut,OpenGL和内存

我已经开始练习OpenGLGlewFreeglut.

我有一个关于我的应用程序的问题,并想知道是否有人遇到同样的问题(如果它是一个)?

当我最初执行我的应用程序时,使用的内存大约是22,000 KB.在最小化窗口并最大化它之后,它只需要2,900-3,300 KB的内存,并且即使在最小化和最大化窗口以及在窗口具有焦点时执行鼠标和键盘输入之后仍继续这样做.

我想知道为什么会这样?我不太了解FreeGlut,我想知道是否有其他人在使用FreeGlut最小化/最大化窗口时注意到了这种行为.或者这可能是一OS-specific件事?

很抱歉之前没有提到它,但我正在使用Windows XP SP3,我正在使用以下代码行设置OpenGL上下文:

glutInit(&argc, argv);
glutInitContextVersion(3, 3);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(30, 30);
glutInitWindowSize(1000, 562);
glutCreateWindow("Testing");

glewExperimental = GL_TRUE;
glewInit();
Run Code Online (Sandbox Code Playgroud)

opengl freeglut

8
推荐指数
1
解决办法
474
查看次数

Ubuntu 13.10 C++ OpenGL GLUT - 链接问题 - 对`glClearColor'的未定义引用

我正在运行Ubuntu 13.10并尝试编译该部分示例OpenGL代码:

#include "GL/freeglut.h"
#include "GL/gl.h"

/* display function - code from:
     http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
This is the actual usage of the OpenGL library.
The following code is the same for any platform */
void renderFunction()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

/* Main method - main entry point of application
the freeglut library does the window creation work for us, …
Run Code Online (Sandbox Code Playgroud)

c++ eclipse opengl ubuntu freeglut

8
推荐指数
1
解决办法
2万
查看次数

使用CLion中的freeglut在OpenGL中链接错误

所以,我使用freeglut尝试做一些openGL的东西,但我不断收到错误,说引用是未定义的:

CMakeFiles\texture_mapping.dir/objects.a(TextureMapper.cpp.obj): In function `ZN13TextureMapper4initEv':
.../TextureMapper.cpp:20: undefined reference to `glClearColor@16'
.../TextureMapper.cpp:23: undefined reference to `glMatrixMode@4'
.../TextureMapper.cpp:24: undefined reference to `glLoadIdentity@0'
.../TextureMapper.cpp:25: undefined reference to `glOrtho@48'
CMakeFiles\texture_mapping.dir/objects.a(TextureMapper.cpp.obj): In function `ZN13TextureMapper7displayEv':
.../TextureMapper.cpp:45: undefined reference to `glClear@4'
...TextureMapper.cpp:48: undefined reference to `glColor3f@12'
...TextureMapper.cpp:49: undefined reference to `glBegin@4'
...TextureMapper.cpp:52: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:53: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:54: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:55: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:58: undefined reference to `glEnd@0'
...TextureMapper.cpp:61: undefined reference to `glFlush@0'
Run Code Online (Sandbox Code Playgroud)

我正在使用MinGW和CLion来完成这个项目.我以为我得到了正确的一切.我将相应的文件移动到includeMinGW中的bin文件夹,以及文件夹和lib …

c++ opengl mingw cmake freeglut

8
推荐指数
1
解决办法
2681
查看次数

编译程序找不到freeglut.dll

我是这个网站的新手,对编程比较陌生.我使用Visual Studio 2010做了一段时间的C++编程,我想进入OpenGL,所以我买了OpenGL Superbible来开始.我已经陷入了第二章的"简单"项目.经过数小时的研究,我已经能够下载所有必要的文件以使用freeGLUT和GLtools.我已经确保一切都在适合程序运行的地方.现在,似乎一切都已经解决了......除了一个奇怪的问题.

我被告知我需要将freeglut.dll放入Windows\System32,所以我做到了.该项目现在将建立,但是当我去运行它时,它会告诉我

"程序无法启动,因为您的计算机缺少freeglut.dll.请尝试重新安装该程序以解决此问题."

现在,我确信freeglut.dll应该在Windows\System32中,所以问题是什么?我该如何解决?

这是本书的原始代码:

#include "../../shared/gltools.h"  //OpenGL toolkit

//////////////////////////////////////////////
//called to draw scene

void RenderScene(void)
{
    // clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);

 //Flush drawing commands
    glFlush();
}
////////////////////////////////////////////////////////
//set up the rendering state
void SetupRC(void)
{
    glClearColor(0.0f , 0.0f, 1.0f, 1.0f );
}
///////////////////////////////////////////////////////////
//main program entry point
void main(void)
int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();
    glutMainLoop();
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

这是实际编译的代码,但不会运行(从我从不同资源获得的所有冲突数据有点混乱):

 #include <stdio.h>
 #include <stdlib.h> …
Run Code Online (Sandbox Code Playgroud)

c++ opengl dll freeglut visual-studio-2010

7
推荐指数
2
解决办法
1万
查看次数

错误:仅在返回类型上有所不同的函数不能重载

我正在使用mac os 10.9,我有一个使用freeglut库的C++程序.当我尝试制作项目时.它给出了一个错误,我不知道这是我的错.这是消息:

In file included from /usr/X11/include/GL/freeglut.h:18:
/usr/X11/include/GL/freeglut_ext.h:177:27: error: functions that differ only in their return type cannot be overloaded
FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );
Run Code Online (Sandbox Code Playgroud)

更多信息:我使用cmake(版本2.8.12)生成Makefile,安装了最新版本的Xcode和XQuartz.
任何帮助表示赞赏.谢谢.


在glut.h和freeglut_ext.h文件中:
在glut.h中:

#if (GLUT_API_VERSION >= 5)
extern void * APIENTRY glutGetProcAddress(const char *procName) OPENGL_DEPRECATED(10_3, 10_9);
#endif
Run Code Online (Sandbox Code Playgroud)

在freeglut_ext.h中:

/*
 * Extension functions, see freeglut_ext.c
 */
typedef void (*GLUTproc)();
FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );
Run Code Online (Sandbox Code Playgroud)

macos freeglut

7
推荐指数
1
解决办法
1万
查看次数

为什么当我使用大于 1.0f 的颜色值时 OpenGL 会这样?

我正在学习 OpenGL,我的任务是创建下图: 正确的图像

这就是我的意图,但在我第一次编写它时,我将颜色缓冲为 0 - 255 而不是 0.0 - 1.0 的浮点数。显然这是错误的,但这是显示的内容: 图片不正确

仅显示中心三角形,仅显示轮廓,颜色为前三个顶点颜色。为什么会这样?当我缓冲不在 [0.0, 1.0] 范围内的颜色时,OpenGL 会做什么?我找不到这方面的文档。

我的着色器如下:

顶点:

layout (location = 0) in vec3 Position;
layout (location = 2) in vec4 vertexColor;

out vec4 vertexColor0;

void main() {
    gl_Position = vec4(Position, 1.0f);
    vertexColor0 = vertexColor;
}
Run Code Online (Sandbox Code Playgroud)

分段:

in vec4 vertexColor0;

void main() {
    gl_FragColor = vertexColor0;
}
Run Code Online (Sandbox Code Playgroud)

这是我用于缓冲数据和绘制数据的代码:

static const int npoints = 9;
static const glm::vec3 points[npoints] = {
                                glm::vec3(-0.5, 0.5, 0.0),
                                glm::vec3(-0.7, 0.0, 0.0),
                                glm::vec3(-0.3, 0.0, 0.0),

                                glm::vec3(0.2, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl freeglut

7
推荐指数
1
解决办法
3286
查看次数

为什么Visual Studio试图链接'freeglutd.lib'?

我正在尝试使用Visual Studio 2013编译OpenGL程序,但是我收到以下错误:

错误1错误LNK1104:无法打开文件'freeglutd.lib'...

作为参考,我安装了FreeGLUT并配置了VS来搜索包含文件和库文件的正确目录.实际上,VS认识到GLUT包含文件就好了.我还将opengl32.libfreeglut.lib添加到Additional Dependencies.

VS为什么要寻找'freeglutd.lib'?它绝对没有在附加依赖项中列出.我可以通过将'libglut.lib'重命名为'libglutd.lib'并从依赖项中删除前者来解决编译错误,但我只是好奇为什么它会以这种方式运行.

说到附加依赖,是否真的需要添加opengl32.lib?我可以在没有它的情况下编译我的(非常基本的)程序,但不止一个人说它是必需的,也许对于旧版本的Visual Studio?

freeglut visual-studio

7
推荐指数
1
解决办法
1万
查看次数