红联Linux门户
Linux帮助

Ubuntu 16.04配置OpenGL教程

发布时间:2017-03-03 09:33:15来源:linux网站作者:Harley_Quinn
命令:
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install freeglut3-dev
 
网上有些教程最后一步是sudo apt-get install libglut-dev,但是会报错Unable to locate package libglut-dev,搜索错误信息后搜到stackoverflow上有人问这个问题,推荐安装freeglut3-dev
Ubuntu 16.04配置OpenGL教程
头文件和动态库文件(libGLU.so libGL.so libglut.so)分别如上图
 
我用了YouCompleteMe插件,于是把ycm配置文件拷到了OpenGL程序的根目录下
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/opengl/
然后打开python配置文件,在flags末尾中加上,这样就可以自动补全OpenGL的函数了
Ubuntu 16.04配置OpenGL教程
 
然后在网上找个OpenGL的示例代码
// File Name: example.cpp                                                  
#include <GL/glut.h>
void draw()
{
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(300, 300);
glutCreateWindow("My First OpenGL Program");
glutDisplayFunc(draw);
glutMainLoop();
return 0;
}
 
其实代码都挺好理解,glut是前缀,后面的函数名很直观。
 
简单的代码只需要改下关键的draw函数,因此我用bash写了个OpenGL代码模板生成器
#!/bin/bash
# File Name: opengl.sh
# Created Time: Thu 02 Mar 2017 06:48:03 AM PST
if [ $# -lt 1 ]; then
echo "usage: ./opengl.sh <filename>"
exit 1
fi
FileName=$1
# 若文件存在则直接打开, 不删除原来文件
if [ -e $FileName ]; then
vim $FileName
exit 1
fi
# 生成OpenGL框架
echo "// File Name: $FileName" >> $FileName
echo "#include <GL/glut.h>" >> $FileName
echo "" >> $FileName
echo "void draw()" >> $FileName
echo "{" >> $FileName
echo -e "\t" >> $FileName
echo "}" >> $FileName
echo "" >> $FileName
echo "int main(int argc, char** argv)" >> $FileName
echo "{" >> $FileName
echo -e "\tglutInit(&argc, argv);" >> $FileName
echo -e "\tglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);" >> $FileName
echo -e "\tglutInitWindowPosition(100, 100);" >> $FileName
echo -e "\tglutInitWindowSize(300, 300);" >> $FileName
echo -e "\tglutCreateWindow(\"My First OpenGL Program\");" >> $FileName
echo -e "\tglutDisplayFunc(draw);" >> $FileName
echo -e "\tglutMainLoop();" >> $FileName
echo -e "\treturn 0;" >> $FileName
echo "}" >> $FileName
vim $FileName +6 # 打开时直接跳转到draw()函数中那一行
exit 0
 
可以先把代码复制进去在写echo时可以调用vim命令批量添加TAB
:28,33s/^\(.*\)$/echo -e "\\t\1"/g
比如我这句就是在28行到33行(行首无空格或tab键)用echo -e ""把代码放在引号里
:17,34s/\(.*\)/\1 >> $FileName/g
17行到34行末尾添加 >> $FileName重定向输入到文件中,之前是用标准输出查看echo是否正确。
 
然后我又想把这个弄成系统命令,发现应该没有哪个程序叫gl,于是我就写个C++程序调用opengl.sh然后都放在bin目录下。
// File Name: gl.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string>
int main(int argc, char** argv)
{
if (argc < 2) {
fprintf(stderr, "usage: gl <pathname>\n");
exit(1);
}
std::string cmd = "./opengl.sh ";
cmd.append(argv[1]);
system(cmd.c_str());
return 0;
}
 
命令
g++ gl.cpp -o gl
sudo cp gl opengl.sh /bin/
 
然后就可以使用命令gl test.cpp来创建OpenGL代码模板了,而且想要修改的时候只用修改opengl.sh就行,不需要重新编译cpp
Ubuntu 16.04配置OpenGL教程
 
发现自己越来越喜欢Linux编程环境了,命令行真的超级棒!最近用VS写代码时都不太习惯了。虽然也有快捷键,比如Ctrl+Shift+H打开全局替换窗口,但是真的不如vim命令模式下直接正则替换方便。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28848.html