Ubuntu20.04 配置OpenGL开发环境(并验证)
查看Ubuntu的显卡版本信息
这一步可以查看我们手上的“树莓派”搭载的乌班图系统的显卡版本,并且它对OpenGL的支持信息。
- 首先安装“glxinfo”命令,这个命令可以查看很多与显卡、OpenGL相关的信息。
sudo apt install mesa-utils
- 然后使用命令查看显卡是否安装成功(一般默认都有),打印“yes”代表显卡安装成功。
glxinfo | grep rendering
- 获得显卡OpenGL版本信息。
glxinfo | grep OpenGL
上面OpenGL version string: 3.1 Mesa 21.2.6可以看出OpenGL的版本为3.1
安装依赖库
四个命令 依次运行(第一个命令是更新一下我们的库)
sudo apt-get update
yes|sudo apt-get install build-essential
yes|sudo apt-get install libgl1-mesa-dev
yes|sudo apt-get install libglu1-mesa-dev
yes|sudo apt-get install freeglut3-dev
遇到的问题
如果有那么简单就好了 ,现实世界是复杂的,简简单单安装库就遇到了很多问题
不管“y”还是”n“ 都提示“中止”
可能会好奇,为什么我要在四行命令前,加一个”
yes|
“?因为我们在安装时,总会提示你确认进行安装,
“Y/n”
,我们一般需要手动输入”y”,而加了命令”
yes|
“后,它会自动帮你输入“y”,你全程不需要动手。
其实这样做并不是起源于我想偷懒,开始我在执行第二个命令(没有加
yes|
)
sudo apt-get install libgl1-mesa-dev
不管我手动输入“y”还是“n”,它都会提示‘中止’,这就奇了怪了。网上建议是加“
yes|
”,这确实解决了问题,也更方便一点。
安装包失败,提示“404 not found”
除了第一行命令,这三个代码都会提示,“有xxx包没找到 404 not found”
yes|sudo apt-get install libgl1-mesa-dev
yes|sudo apt-get install libglu1-mesa-dev
yes|sudo apt-get install freeglut3-dev
刨根问底,我根据它提供的地址(因为我是
中科大ustc
的镜像源),去找到对应的deb包,一看,果然是包的名字不对,但是我们要怎么去改呢?
首先想到的就是更新镜像源
sudo apt-get update
但是 在更新的过程中,它竟然也有很多“404 not found”,这就让我觉得我的源有问题。
所以,一般这个时候网上就会建议你换源,比如换清华源等等,但是这样似乎有些麻烦了(我没有尝试)。
我看到了
一篇博客
,他说他尝试换源也没有用,他首先是是查看了自己的架构,得到结果是“
arm64”
(我也一样)
sudo dpkg --print-architecture //查看架构
于是,他进入设置镜像源的文本中进行修改(这里你可以用vim 也可以是nano 或者其他的)
sudo vim /etc/apt/sources.list
在对应的语句前 各插入一句“
[arch=arm64]
”
保存后退出。
再这之后,我们执行sudo apt-get update,果然没有404的错误。把那三条命令一一运行,也没有出现404的错误。
补充说明
如果那四行代码你没有成功运行(报404),你写代码的头文件,它会告诉你找不到该文件,你右击也转不到该文件(VsCode里右击 “转到定义”)
#include <GL/glut.h>
在我们修改后,你就可以成功右击,转到定义后看见对应的文件。
运行测试代码进行验证
代码网上很多,太多了。这边随手贴一个
#include <GL/glut.h>
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5, 5, -5, 5, 5, 15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
return;
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0, 0);
glutWireTeapot(3);
glFlush();
return;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(300, 300);
glutCreateWindow("OpenGL 3D View");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
在终端输入
g++ opTest.cpp -o test -lGL -lGLU -lglut
~~~~~~~~
./test
这个代码再解释一下吧,因为相信有很多和我一样的小白,建议小白自己再搜搜其他人对ubuntu编译的讲解。
使用g++ 命令,对 opTest.cpp文件进行编译,生成一个叫“test”的执行文件test(会生成至于cpp同一文件夹),-lGL其实是两个部分,“
-l
”(是L的小写,不是1,也不是i的大写)是说明要寻找第三方库(因为我这里用到GL库),“
GL
”代表库的名字,这些库一般的路径为“usr/lib/xxxx”,一般?有例外吗?当然,特殊情况特殊分析。
运行结果