标签: freeglut

将现有的C++ openGL项目从glut/freeglut转换为glfw

我想将我的科学3D应用程序从Freeglut升级到GLFW,但我担心隐藏的冲突或数据丢失,实际上我的应用程序就像Freeglut的魅力一​​样,我没有任何问题,但GLFW被推荐用于现代OpenGL( 3.0+)在所有现代书籍和教程中.

我看看GLFW API,它看起来像带有glfw*前缀的Glut ,但我不完全确定.所以我有三个问题:

  1. 是否值得为GLFW打破我现有的项目,或坚持freeglut?
  2. 我是否会因过剩而失去任何功能?
  3. GLFW与GTK +兼容吗?(因为我的GUI基于GTK)

c++ gtk opengl freeglut glfw

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

是否可以在Mac OS X上构建FreeGLUT?

我正在做一些使用FreeGLUT的OpenGL教程.

显然,这是你在mac上构建和安装它的方式:

CPPFLAGS="-I/usr/X11R6/include" ./configure --prefix="${PWD}/../"
make
make install
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我执行make命令时,这本身就会给我一个错误:Undefined symbols for architecture x86_64

做完工作后,我发现第一行的改进是:

CPPFLAGS="-I/usr/X11R6/include -L/usr/X11R6/lib" LDFLAGS="-L/usr/X11R6/lib" ./configure --prefix="${PWD}/../"
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我执行make命令时,我仍然收到错误:

gcc -DHAVE_CONFIG_H -I. -I../../..   -I/usr/X11R6/include -L/usr/X11R6/lib -I../../../include  -g -O2 -Wall -pedantic -MT smooth_opengl3-smooth_opengl3.o -MD -MP -MF .deps/smooth_opengl3-smooth_opengl3.Tpo -c -o smooth_opengl3-smooth_opengl3.o `test -f 'smooth_opengl3.c' || echo './'`smooth_opengl3.c
smooth_opengl3.c:101: error: redefinition of typedef ‘PFNGLGENBUFFERSPROC’
/usr/X11R6/include/GL/glext.h:5080: error: previous declaration of ‘PFNGLGENBUFFERSPROC’ was here
smooth_opengl3.c:102: error: redefinition of typedef ‘PFNGLBINDBUFFERPROC’
/usr/X11R6/include/GL/glext.h:5078: error: previous …
Run Code Online (Sandbox Code Playgroud)

opengl macos makefile freeglut

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

使用MinGW,freeglut和glew编译简单的静态OpenGL 4.0程序

问题在于标题,我将尝试列出我已经尝试过的内容,等等.

首先,根据我的理解,为了在Windows上使用OpenGL 4.0,您必须扩展和/或绕过默认的Windows库,因为它只提供OpenGL 1.1.

所以我们安装了MinGW C:/MinGW/.接下来,我通过从项目站点下载tarball来设置FreeGLUT .提取和通过根据运行的生成文件编译指令与未成年人加入到命令.--prefix./configure

./configure --prefix=/c/Users/Owner/root/
make all
make install 
Run Code Online (Sandbox Code Playgroud)

现在我有freeglut /c/Users/Owner/root/lib/,/c/Users/Owner/root/include/等等.接下来是GLEW,就我所知,我的问题孩子.

项目站点下载源存档(直接1.7.0.zip链接).编译有点复杂,我目前的配方来自堆栈溢出问题" 用mingw构建窗口上的glew ".缩写形式如下:

mkdir lib/
mkdir bin/
gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32.a src/glew.o
gcc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.mx.o -c src/glew.c
gcc -shared …
Run Code Online (Sandbox Code Playgroud)

c++ opengl winapi glew freeglut

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

传递指向成员函数的指针

我有一个具有实例函数(或方法?)的类.在一个实例中,我尝试将指向这些函数的指针传递给库.该库需要静态函数.

当我将指针传递给回调函数时,编译器会抱怨我的函数不是静态的.我试图将它们设为静态,但如果我这样做,那么我就无法从函数中访问实例字段.

我怎么能绕过这个?

类似的问题是:使用C++类成员函数作为C回调函数,他们建议将方法设置为静态.但是我做不到,或者我不知道我怎么做.

GlutController::GlutController (int argc, char **argv) {

   // stuff ..

   // Register callbacks
   glutSpecialFunc( OnSpecialKeys );  // Error, need static functions
   glutReshapeFunc( OnChangeSize );   // Error...
   glutDisplayFunc( OnRenderScene );  // Error...

   // stuff ..
}

GlutController::~GlutController() {

}

void GlutController::OnChangeSize(int aNewWidth, int aNewHeight){

   glViewport(0,0,aNewWidth, aNewHeight);
   mViewFrustrum.SetPerspective( APP_CAMERA_FOV,             // If this function is 
            float( aNewWidth ) / float( aNewHeight ),        // static, this won't 
            APP_CAMERA_NEAR,                                 // work
            APP_CAMERA_FAR );
   mProjectionMatrixStack.LoadMatrix(                        // Same here
            mViewFrustrum.GetProjectionMatrix() ); …
Run Code Online (Sandbox Code Playgroud)

c++ glut member-function-pointers function-pointers freeglut

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

随处开发OpenGL应用程序

我正在学习OpenGL,我通常在我大学的实验室里学习.

我的问题是大学里的计算机没有安装必要的库来研究程序,我在这些计算机上只有用户权限,所以我无法安装任何需要管理员权限的东西.

通常我在Linux环境中开发,但实验室中的计算机都运行Windows XP或Windows 7.我用g ++来编译我的程序,freeglut和opengl库.我还使用OpenGL扩展来使用顶点数组对象,以及其他功能到新版本的OpenGL.

我想如果这是一种将我需要的东西放在我的pendrive中的方法,只需在我去的每台计算机上执行此操作,而无需安装任何东西.也许类似的东西就像把所有的文件库与cygwin和一个记事本++可移植到pendrive中并使用pendrive上的cygwin编译我的程序.

但是我怎样才能实现这一点,我需要对代码进行哪些修改?

编辑:

为了解决我的问题,我做了以下事情:

在我的电脑上安装带有MSYS的MinGW;

使用MinGW文件夹中的以下代码创建名为startMinGW的批处理文件(.bat):

@echo off
mode con:cols=130 lines=50
path=%path%;%CD%\bin
path=%path%;%CD%\lib
path=%path%;%CD%\msys\1.0\bin
title MinGW Compiler
echo Ready!
cmd.exe /K
Run Code Online (Sandbox Code Playgroud)

执行批处理文件以编译以下内容;

使用MinGW编译freeglut 2.8.0,进入freeglut的根文件夹并执行:

sh configure
make
Run Code Online (Sandbox Code Playgroud)

使用MinGW编译glew 1.9.0,进入freeglut的根文件夹并执行:

make
Run Code Online (Sandbox Code Playgroud)

将本地化在freeglut和glew的include文件夹中的.h文件复制到MinGW的include文件夹中

将本地化在freeglut和glew的lib文件夹中的.a,.dll,.la,.lai(我不知道是否有必要复制.la和.lai文件)复制到MinGW的lib文件夹中

将文件夹C:\ MinGW复制到我的pendrive.

现在要编译OpenGL程序,我只需要从pendrive执行startMinGW并执行

g++ file.cpp -lopeng32 -lglu32 -lglut -lglew
Run Code Online (Sandbox Code Playgroud)

opengl portability cygwin g++ freeglut

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

如何使用States创建游戏菜单

我一直在寻找一个如何制作游戏菜单的例子.例如,我想让应用程序打开菜单.从那里它将打开"玩游戏""显示积分""退出".

到目前为止我所看到的一切都是弹出菜单..

因此我寻找的答案是关于使用"状态",如暂停状态,游戏状态等等.但我无法弄清楚应该是这样的布局或应该如何使用..没有如何创建MenuState而无法找到一个示例任何地方

使用过剩和freeglew

c++ opengl glew freeglut

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

OpenGL代码未运行:显示器不支持OpenGL GLX扩展

我必须运行一个代码,它包括库GL/glut.h和GL/glew.h.通过以下指令编译好代码:

$ gcc test.c -lglut -lGLEW -lGL
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到以下错误:

freeglut (./a.out): OpenGL GLX extension not supported by display ':0.0'
Run Code Online (Sandbox Code Playgroud)

相同的代码在我的其他系统上工作,它突然崩溃甚至没有启动,所以我必须在这个上完成它.

$ glxinfo的输出是:

name of display: :0.0
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on display ":0.0".
Error: couldn't find RGB GLX visual or fbconfig

Xlib:  extension "GLX" missing on display ":0.0".
Xlib:  extension "GLX" missing on …
Run Code Online (Sandbox Code Playgroud)

opengl glew nvidia freeglut glx

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

glutInitContextVersion的文档在哪里?

FreeGLUT API文档中没有包含条目glutInitContextVersion,当我谷歌搜索它时,我发现的所有问题都没有直接解决其使用或效果.

是否记录在任何地方?

opengl freeglut

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

Visual Studio 2015:v120 vs v140?

仅供参考:Win10,x64

我今天开始尝试使用Visual Studio 2015,在弄清楚如何运行C/C++部件后,我试图加载一个使用非官方glsdk的大型个人项目.我试图构建并获得链接器错误.它抱怨freeglutD.lib,glloadD.lib和glutil.lib中引用了未解析的外部符号.它还抱怨我自己的文件中的_MSC_VER不匹配.

我在网上做了一些研究,搞乱了2013和编译器版本(项目属性 - >常规 - >平台工具集)) - 2013年的v120和2015的v140 - 并且能够用v140重建glsdk(由于缺少文件而不包括glmesh) ).然后......它工作得很好.

问题:这是为什么?我认为由符合标准的编译器创建的静态lib文件可以与符合标准的编译器的其他版本一起使用(在本例中,v120上的C/C++和v140上的C/C++).但显然v140不会与之前编译器生成的库一起玩.

如果这只是VS构建例程的黑暗之地,那么我可以放弃这个问题,但我也想知道为什么它们不能一起工作.

c++ linker compiler-errors freeglut visual-studio-2015

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

freeglut(./light):错误:函数fgOpenWindow中的内部错误<未找到具有必需功能的FBConfig>

我在没有图形界面的Linux服务器(Ubuntu16.04)中安装了OpenGL,安装命令如下:

apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
apt-get install freeglut3-dev libglew1.10 libglew-dev libgl1-mesa-glx libxmu-dev
apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
apt-get install mesa-utils
Run Code Online (Sandbox Code Playgroud)

现在,我light.c通过编译gcc light.c -o light -lGL -lglut

我想通过XMing服务器在Windows机械中显示它。

码:

#include <GL/glut.h>
#include <stdlib.h>

void init ( void )
{
    GLfloat mat_specular [ ] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat mat_shininess [ ] = { 50.0 };
    GLfloat light_position [ ] = { 1.0, 1.0, 1.0, 0.0 };
    glClearColor ( 0.0, 0.0, 0.0, …
Run Code Online (Sandbox Code Playgroud)

x11 opengl glut freeglut

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