我想将我的科学3D应用程序从Freeglut升级到GLFW,但我担心隐藏的冲突或数据丢失,实际上我的应用程序就像Freeglut的魅力一样,我没有任何问题,但GLFW被推荐用于现代OpenGL( 3.0+)在所有现代书籍和教程中.
我看看GLFW API,它看起来像带有glfw*前缀的Glut ,但我不完全确定.所以我有三个问题:
- 是否值得为GLFW打破我现有的项目,或坚持freeglut?
- 我是否会因过剩而失去任何功能?
- GLFW与GTK +兼容吗?(因为我的GUI基于GTK)
显然,这是你在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) 问题在于标题,我将尝试列出我已经尝试过的内容,等等.
首先,根据我的理解,为了在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++类成员函数作为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
我正在学习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) 我一直在寻找一个如何制作游戏菜单的例子.例如,我想让应用程序打开菜单.从那里它将打开"玩游戏""显示积分""退出".
到目前为止我所看到的一切都是弹出菜单..
因此我寻找的答案是关于使用"状态",如暂停状态,游戏状态等等.但我无法弄清楚应该是这样的布局或应该如何使用..没有如何创建MenuState而无法找到一个示例任何地方
使用过剩和freeglew
我必须运行一个代码,它包括库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) FreeGLUT API文档中没有包含条目glutInitContextVersion,当我谷歌搜索它时,我发现的所有问题都没有直接解决其使用或效果.
是否记录在任何地方?
仅供参考: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构建例程的黑暗之地,那么我可以放弃这个问题,但我也想知道为什么它们不能一起工作.
我在没有图形界面的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)