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上有人问这个问题,http://askubuntu.com/questions/96087/how-to-install-opengl-glut-libraries,推荐安装freeglut3-dev

头文件和动态库文件(libGLU.so libGL.so libglut.so)分别如上图

导入环境变量,方便编译,打开.bashrc文件,在末尾加上

export GLCONF="-lGL -lGLU -lglut"

然后g++ test.cpp $GLCONF就可以编译了

我用了YouCompleteMe插件,于是把ycm配置文件拷到了OpenGL程序的根目录下

 cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/opengl/

然后打开python配置文件,在flags末尾中加上,这样就可以自动补全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是前缀,后面的函数名很直观,参考博客:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html

简单的代码只需要改下关键的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

-----------------------------------------------------------------------------------------------------------------------

发现自己越来越喜欢Linux编程环境了,命令行真的超级棒!最近用VS写代码时都不太习惯了。虽然也有快捷键,比如Ctrl+Shift+H打开全局替换窗口,但是真的不如vim命令模式下直接正则替换方便。

Ubuntu 16.04配置OpenGL教程的更多相关文章

  1. ubuntu 16.04 上opengl 的安装以及例子程序编译执行

    因为最近在移植 Qt5.7 + opengl , 遇到了难以越过的山峰,没有办法,试着在 ubuntu 16.04上将 opengl 配置以下,记录: 安装相关的库: sudo apt-get ins ...

  2. Ubuntu 16.04配置OpenCV 3.1.0 for Java

    我们都知道,OpenCV是基于C++的开源计算机视觉库,但是从2.4.4版本开始提供了Java绑定,也就是说,我们也可以使用Java来开发基于OpenCV的计算机视觉应用.目前,最新的版本是3.1.0 ...

  3. Ubuntu 16.04配置国内高速apt-get更新源【转】

    转自:https://blog.csdn.net/twang0x80/article/details/79782753 Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换 ...

  4. Ubuntu 16.04配置国内高速apt-get更新源

    https://www.linuxidc.com/Linux/2017-11/148627.htm Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换到国内比较好的快速更 ...

  5. ubuntu 16.04 配置ssl

    Let's Encrypt 的服务相信很多人都知道了,我个人认为这是最好的免费 SSL 服务.下面内容即使如何在自己的网站上使用 Let's Encrypt 实现 SSL. 前提条件 自己拥有一个域名 ...

  6. Ubuntu 16.04 配置安卓5.1编译环境

    Ubuntu 16.04版本 电脑cpu必须是64位 硬盘分配大约100G的空间 1.ubuntu中更新源 $ sudo apt-get update 2.安装 openjdk-8-jdk $ sud ...

  7. Ubuntu 16.04配置vncviewer

    网上有各种各样的教程,既混乱又复杂.这是提供一个亲自测试可用的配置方案,十分简单,桌面环境选用xfce,Ubuntu版本是16.04. 1 安装 Xfce 和 TightVNC sudo apt in ...

  8. ubuntu 16.04 配置静态ip 后默认的网卡eno1变成eth0了不能联网的问题解决

    我这次是在真实机器上面安装的ubuntu16.04 在配置了静态ip后不懂什么原因默认的eno1网卡变回了eth0网卡之后就不能上网, 同一个网段的其他集群节点也不能ping 通 因为ubuntu16 ...

  9. Ubuntu 16.04配置SSL免费证书

    主要参考地址为:https://blog.csdn.net/setoy/article/details/78441613 本篇主要以Apache这个web服务器来讲解,所以前提必须要安装好apache ...

随机推荐

  1. request.getPathInfo() 方法的作用

    request.getPathInfo(); 这个方法返回请求的实际URL相对于请求的serlvet的url的路径.(个人理解.) 比如,有一个Servlet的映射是这样配置的: <servle ...

  2. ffmpeg 命令小记

    指定格式转码 ffmpeg -i 1.mp4 -c:v libx264 -c:a aac -y 1.flv 等时长转为m3u8格式 ffmpeg -i 1.avi -c:v libx264 -c:a ...

  3. 基于IDEA和Maven的SSM分层项目搭建

    前言 虽然现在SpringBoot开始流行,但是SSM作为一个经典框架,还是有必要去了解一下. 项目建立 1.新建一个空白的Maven项目,如下图.然后把IDEA自动生成的多余src目录删掉. 2.右 ...

  4. SpringMVC启动和执行流程

    Spring框架大家用得很多,相当熟悉,但是我对里面的运作比较好奇,例如bean的加载和使用,和我们定义的配置文件有什么联系;又例如aop在什么时候起作用,原理又是怎样.经过一个了解后,整理了启动和执 ...

  5. PHP获取随机数的函数rand()和mt_rand()

    rand()函数用户获取随机数,具体用法如下: rand()可以设置0个参数或者两个参数,如rand($min,$max),$min表示从XX开始取值,$max表示最大只能为XX 例如: <?p ...

  6. java反射抄的例子

    package com.reflect; import java.lang.reflect.Field; import java.lang.reflect.Modifier; /* * 反射的概念 * ...

  7. L165

    New evidence of how the Norse became long-distance marinersAccording to the saga of Erik the Red, “s ...

  8. 一个功能丰富的 jQuery 树形插件 z-tree

    链接 如果你的树 很复杂, 需要拖拽功能, 还可以考虑用这个 另外还有一个目前在用 Dynatree 如果一般的树, 还是自己写一个, 也很轻松,    如果有一两个复杂的点, 可以参考ZTree

  9. 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)(转)

    这篇博客将MVCC讲的很透彻,以前自己懂了,很难给别人讲出来,但是这篇文章给的例子就让人很容易的复述出来,因此想记录一下,转载给更多的人 转自:https://www.cnblogs.com/flyi ...

  10. wordpress 生成自定义 meta box

    工具 https://jeremyhixon.com/tool/wordpress-meta-box-generator/ 使用 生成代码 /** * Generated by the WordPre ...