1 2 3 4 |
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文件,在末尾加上
1 |
export GLCONF= "-lGL -lGLU -lglut" |
然後g++ test.cpp $GLCONF就可以編譯了
我用了YouCompleteMe插件,於是把ycm配置文件拷到了OpenGL程序的根目錄下
1 |
cp ~/.vim /bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ .ycm_extra_conf.py ~ /opengl/ |
然後打開python配置文件,在flags末尾中加上,這樣就可以自動補全OpenGL的函數了
然後在網上找個OpenGL的示例代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 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代碼模板生成器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#!/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
1 |
:28,33s/^\(.*\)$ /echo -e "\\t\1" /g |
比如我這句就是在28行到33行(行首無空格或tab鍵)用echo -e ""把代碼放在引號裏
1 |
:17,34s/\(.*\)/\1 >> $FileName /g |
17行到34行末尾添加 >> $FileName重定向輸入到文件中,之前是用標準輸出查看echo是否正確。
-----------------------------------------------------------------------------------------------------------------------
然後我又喪病地想把這個弄成系統命令,發現應該沒有哪個程序叫gl,於是我就寫個C++程序調用opengl.sh然後都放在bin目錄下=。=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 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; } |
命令
1 2 |
g++ gl.cpp -o gl sudo cp gl opengl.sh /bin/ |
然後就可以使用命令gl test.cpp來創建OpenGL代碼模板了,而且想要修改的時候只用修改opengl.sh就行,不需要重新編譯cpp
-----------------------------------------------------------------------------------------------------------------------
發現自己越來越喜歡Linux編程環境了,命令行真的超級棒!最近用VS寫代碼時都不太習慣了。雖然也有快捷鍵,比如Ctrl+Shift+H打開全局替換窗口,但是真的不如vim命令模式下直接正則替換方便。