Ubuntu下安裝OpenGL圖形庫

文章推薦指數: 80 %
投票人數:10人

安裝glew[3]. glew是一個跨平臺的C++庫,是一個OpenGL圖形接口擴展庫 sudo apt-get install libglew1.8 libglew-dev. ##安裝glx[4] glx是linux下OpenGL的X Window ... ubuntu14.0.. OpenGL,glx,.. 软件开发平台及语言笔记大全(超详细) Ubuntu下安裝OpenGL圖形庫 安裝基本編譯環境 sudoapt-getinstallbuild-essential 安裝OpenGLLibrary sudoapt-getinstalllibgl1-mesa-dev 安裝OpenGLUtilities[1] OpenGLUtilities是一組建構於OpenGLLibrary之上的工具組,提供許多很方便的函式,使OpenGL更強大且更容易使用。

sudoapt-getinstalllibglu1-mesa-dev 安裝OpenGLUtilityToolkit[2] OpenGLUtilityToolkit是建立在OpenGLUtilities上面的工具箱,除了強化了OpenGLUtilities的不足之外,也增加了OpenGL對於視窗界面支援 sudoapt-getinstallfreeglut3-dev 安裝glew[3] glew是一個跨平臺的C++庫,是一個OpenGL圖形接口擴展庫 sudoapt-getinstalllibglew1.8libglew-dev ##安裝glx[4]glx是linux下OpenGL的XWindowSystem接口擴展庫,它允許通過x調用OpenGL庫 sudoapt-getinstalllibgl1-mesa-glx ##補充有的也可能需要安裝XmuXmu即X11miscellaneousutilitylibrary(X11實用工具庫) sudoapt-getinstalllibxmu-dev OpenGLMathematics(libglm) sudoapt-getinstalllibglm-dev ##說明:OpenGL不同頭文件及庫的說明 ###[1]OpenGLUtilities glu是實用庫,包含有43個函數,函數名的前綴為glu。

Glu為了減輕繁重的編程工作,封裝了OpenGL函數,Glu函數通過調用核心庫的函數,為開發者提供相對簡單的用法,實現一些較為複雜的操作。

###[2]OpenGLUtilityToolkit glut是實用工具庫,基本上是用於做窗口界面的,並且是跨平臺(所以有時你喜歡做簡單的demo的話,可以光用glut就ok了) ###[3]glew glew是一個跨平臺的C++擴展庫,基於OpenGL圖形接口。

使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵數,但OpenGL現在都發展到2.0以上了,要使用這些OpenGL的高級特性,就必須下載最新的擴展,另外,不同的顯卡公司,也會發布一些只有自家顯卡才支持的擴展函數,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴展庫,你就再也不用為找不到函數的接口而煩惱,因為GLEW能自動識別你的平臺所支持的全部OpenGL高級擴展涵數。

也就是說,只要包含一個glew.h頭文件,你就能使用gl,glu,glext,wgl,glx的全部函數。

GLEW支持目前流行的各種操作系統(includingWindows,Linux,MacOSX,FreeBSD,Irix,andSolaris)。

###[4]glx glx:OpenGLextensionforX. 對於X窗口系統,它所使用的的OpenGL擴展(GLX)是作為OpenGL的一個附件提供的,所有的GLX函數都使用前綴glX。

glx是OpenGLExtensiontotheXWindowSystem的縮寫。

它作為x的擴展,是x協議和Xserver的一部分,已經包含在Xserver的代碼中了。

GLX提供了xwindowsystem使用的OpenGL接口,允許通過x調用OpenGL庫。

OpenGL在使用時,需要與一個實際的窗口系統關聯起來。

在不同平臺上有不同的機制以關聯窗口系統,在Windows上是WGL,在Linux上是GLX,在AppleOS上是AGL等。

###[5]頭文件 :OpenGL所使用的函數和常量聲明。

:OpenGLUtilityToolkit所使用的函數和常量聲明。

GLU庫屬於OpenGL標準的一部分。

(以下各種庫則不屬於) :OpenGLUtilityToolkit所使用的函數和常量聲明。

目前許多OpenGL教程使用這個庫來編寫演示程序。

一些編譯系統可能不直接提供這個庫(例如VC系列),需要單獨下載安裝。

這個頭文件自動包含了,編程時不必再次包含它們。

:GLAUX(OpenGL輔助庫)所使用的函數和常量聲明。

這個庫的功能大致與類似,這個庫提供了創建窗口,處理鍵盤和鼠標事件,設置調色板等OpenGL本身不提供,但在編寫OpenGL程序時又經常用到的功能。

目前這個庫已經過時,只有比較少的編譯環境中有提供,例如VC系列。

在VC系列編譯器中,使用這個頭文件之前必須使用#include或者具有類似功能的頭文件。

:擴展頭文件。

因為微軟公司對OpenGL的支持不太積極,VC系列編譯器雖然有這個頭文件,但是裡面只有OpenGL1.1版本中所規定的內容,而沒有OpenGL1.2及其以後版本。

對當前的計算機配置而言,幾乎都支持OpenGL1.4版本,更高的則到1.5,2.0,2.1,而VC無法直接使用這些功能。

為瞭解決這一問題,就有了頭文件。

這個頭文件提供了高版本OpenGL所需要的各種常數聲明以及函數指針聲明。

:擴展頭文件。

類似,但這個頭文件中只提供適用於Windows系統的各種OpenGL擴展所使用的函數和常量,不適用於其它操作系統。

"glee.h":GLEE開源庫的頭文件。

它的出現是因為雖然可以使用高版本的OpenGL函數,但是使用的形式不太方便。

GLEE庫則讓高版本的OpenGL函數與其它OpenGL函數在使用上同樣方便。

需要注意的是,這個頭文件與是衝突的,在包含"glee.h"之前,不應該包含

#include #include"glee.h"//錯誤,因為glut.h中含有gl.h,它與glee.h衝突 //但是如果把兩個include順序交換,則正確 "glos.h":不明,雖然這個也時常見到,可能是與系統相關的各種功能,也可能只是自己編寫的一個文件。

測試文件 #include #include #include voidinit(); voiddisplay(); intmain(intargc,char*argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(0,0); glutInitWindowSize(300,300); glutCreateWindow("OpenGL3DView"); init(); glutDisplayFunc(display); glutMainLoop(); return0; } voidinit() { 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); } voiddisplay() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,0,0); glutWireTeapot(3); glFlush(); } 編譯命令 C gccexample.c-oexample.out-lGL-lGLU-lglut C++ g++-lGL-lGLU-glut-lGLEWexample.cpp-oexample Makefile INCLUDE=-I/usr/X11R6/include/ LIBDIR=-L/usr/X11R6/lib FLAGS=-Wall CC=g++#changetogccifusingC CFLAGS=$(FLAGS)$(INCLUDE) LIBS=-lglut-lGL-lGLU-lGLEW-lm All:your_app#changeyour_app. your_app:your_app.o $(CC)$(CFLAGS)-o$@$(LIBDIR)$comm Linux內核調試方法gdbocgdboeJTAG Linux內核kernelpanic機制淺析 如何在linuxkernel中加入systemcall 查看Linux內核編譯配置 Ubuntu更換內核方法 調試工具ltracestraceftrace的使用 根據內核Oops定位代碼 內核和用戶空間共享內存的實現例程-proc和mmap 陳鍾誠LinuxKernel 簡介 行程結構 Linux的記憶體管理 Linux的檔案系統 Linux的輸出入系統 Linux的目的檔 Linux的動態連結與載入(DynamicLinking) 例說linux內核與應用數據通信系列 (一):添加一個系統調用 (二):proc虛擬文件系統 (三):讀寫內核設備驅動文件 (四):映射設備內核空間到用戶態 把握linux內核設計思想系列 (一):系統調用 (二):硬中斷及中斷處理 (三):下半部機制之軟中斷 (四):下半部機制之tasklet (五):下半部機制之工作隊列及幾種機制的選擇 (六):內核時鐘中斷 (七):內核定時器和定時執行 (八):進程管理分析 (九):進程調度 (十):內核同步 (十一):內存管理之頁的分配與回收 移植LinuxKernel造成無法開機之解決方案以及除錯工具 delay/sleep延遲函式學習筆記 密碼學演算法實作流程 效能工具–perf來分析探討硬體加密之瓶頸 Linuxkernel調試打log流和斷點流 Linuxkernelv4.0codefor TraceKernel程式的一些小技巧 EmbeddedLinuxPrimer讀書筆記 Chapter2:TheBigPicture Chapter4:淺談Linux核心 Chapter5:KernelInitialization Chapter6:UserSpaceInitialization Chapter8:裝置驅動程式的基本知識 Chapter9:Filesystem LinuxDriver LinuxDeviceDriverProgramming Linux裝置驅動程式的概要 Linux的授權 準備開發裝置驅動程式 開發驅動程式的第一步 開發driver需要的基礎知識 實際撰寫驅動程式 控制硬體 記憶體 計時器 同步與鎖定 中斷 測試與除錯 《深入Linux設備驅動程序內核機制》之MMAP內存頁面示例 LinuxDeviceModel三角關係 Linux設備模型(1)_基本概念 Linux設備模型(2)_Kobject mmapdriverimplementation 嵌入式Linux驅動模板精講與項目實踐 動手寫LinuxDriver OS [轉]打造簡易作業系統 (一)開機HelloWorld實例 (二)BootLoader+作業系統載入實例(QEMU) (三)BootLoader+作業系統載入實例(CFCard) (四)由16位元真實模式(RealMode)進入32位元保護模式(ProtectMode) (五)使用LocalDescriptorTable(LDT) (六)簡介CallGate (七)利用CallGate與TSS(Task-StateSegment)實現特權等級的轉換 PageTablesize太大之解決 LinuxSystem Multi-pthreadnote fork+pthread_create記憶體空間差異 ProsandCons Linux內核中線程的實現方式 linux系統編程 文件與IO(一):文件描述符、open,close 文件與IO(二):系統調用read和write 文件與IO(三):利用lseek()創建空洞文件 文件與IO(四):目錄訪問相關係統調用 文件與IO(五):stat()系統調用獲取文件信息 文件與IO(六):實現ls-l功能 文件與IO(七):時間函數小結 文件與IO(八):文件描述符相關操作-dup,dup2,fcntl 進程(一):進程與程序 進程(二):進程生命週期與PCB(進程控制塊) 進程(三):進程複製fork,孤兒進程,殭屍進程 進程(四):進程退出exit,_exit區別即atexit函數 進程(五):exec系列函數(execl,execlp,execle,execv,execvp)使用 進程(六):父進程查詢子進程的退出,wait,waitpid 進程(七):system()函數使用 進程(八):守護進程詳解及創建,daemon()使用 信號(一):中斷與信號 信號(二):信號處理流程(產生、註冊、註銷、執行) 信號(三):信號安裝、signal、kill,arise講解 信號(四):alarm和可重入函數 信號(五):信號集操作函數,信號阻塞與未決 信號(六):信號發送函數sigqueue和信號安裝函數sigaction 信號(七):被信號中斷的系統調用和庫函數處理方式 信號(八):三種時間結構及定時器setitimer()詳解 管道(一):匿名管道(pipe) 管道(二):管道讀寫規則 管道(三):命令管道(FIFO) 錯誤處理:perror,strerror和errno 利用backtrace和backtrace_symbols函數打印調用棧信息 linux系統編程:setjmp和longjmp函數用法 linux新定時器:timefd及相關操作函數 Note IPC PIPE Signal LinuxDebugging 使用反彙編理解C++程序函數調用棧 熟悉AT&T彙編語言 C++函數調用的參數傳遞方法總結(通過gdb+反彙編) 使用GDB來理解C++對象的內存佈局(多重繼承,虛繼承) coredump分析入門 動態庫注入、ltrace、strace、Valgrind 使用反彙編理解動態庫函數調用方式GOT/PLT core真的那麼難以追蹤嗎? 一次生產環境下的“內存洩露” Linux作業系統分析 破解Linux操作系統的奧祕 Howprogramworks 進程的創建與可執行程序的加載 內核裝載ELF的過程總結 如何更新linuxconsole畫面 服務器進程為何通常fork()兩次 創建Daemon程式 Linux信號處理機制 函數調用棧的獲取原理分析 在Linux程序中輸出函數調用棧 C/C++混合編程 linux下C與C++混合編程 Static與Shared的函式庫撰寫 Linux的time指令 孤兒進程與殭屍進程[總結] pkg-config使用及建立方法 簡述configure、pkg-config、pkg_config_path三者的關係 動態庫的鏈接和鏈接選項-L,-rpath-link,-rpath LD_LIBRARY_PATH與-L的關係 shell環境變量以及set,env,export的區別 用gcc自製Library 如何使用pkg-config工具編譯鏈接第三方庫 stdout&stderr&fflush() 使用system()函數執行命令行命令簡述 ldconfig及LD_LIBRARY_PATH,LD_DEBUG,LD_PRELOAD SIGINT後KILL自己 my_note thread_create&signal使用技巧 pthread_sigmask控制線程的信號掩碼 C的ThreadPool筆記 IPaddressesfromaCprogram OpenMPinlinux MutexesVSSemaphores大揭祕 dlopen&dlsym用法 pthread_create&pthread_join&pthread_exit基本用法 LINUX下動態庫調用靜態庫的方法 C語言互斥鎖-雙條件變量實現循環打印 tutorial-pthreads 《ProgrammingwithPOSIXThreads》筆記 mmap映射空間與內存和磁盤的IO性能對比 一個並發10k的簡易群聊天室(使用epoll) Mutex與Semaphore最大的差異是 [讀書會]Linux環境編程:從應用到內核 example 64位x86的函數調用棧佈局 如何手工展開函數棧來定位問題 第3章行程(process)環境 打印出一個完整的程序調用堆棧信息 Linux下IPC的運作方式 細說linuxIPC 基於socket的進程間通信(上) 基於socket的進程間通信(下) mmap系統調用共享內存 posix共享內存 systemV共享內存 pipe和FIFO 信號(上) 信號(下) posix消息隊列 systemV消息隊列 細說linuxIPC:各種IPC形式比較總結 補充現代Linux有兩種共享內存機制 Linux同步與互斥應用 (零):基礎概念 (一):posix線程及線程間互斥 (二):posix線程同步 (三):posix線程實現單個生產者和單個消費者模型 (四):posix信號量的互斥與同步 (五):systemV信號量的互斥與同步 (六):文件鎖 Linux下利用backtrace追蹤函數調用堆棧以及定位段錯誤 sendfile:Linux中的"零拷貝" LinuxNote:daemon與backgroundprocess的差異 x86有個有個lea指令(LoadEffectiveAddress) Linux平臺延時之sleep、usleep、nanosleep、select比較 linux用戶空間和內核空間延時函數 即時系統使用排程器 性能分析工具使用callgrind+kcachegrind linux編程的108種奇淫巧計 1(FALSESHARING) 2(RDTSC) 3(magic2) 4(編譯展開) 5(rbp寄存器) 6(shellcode) 7(Lock-free實驗) 8(嵌入彙編的另一種寫法) PForDelta索引壓縮算法的實現 11(亂序) 12(存儲計算) 15(減少複製) 16(如何達到內存最大帶寬,複雜指令) 17(如何達到內存最大帶寬,精簡指令,預取和NT) 18(SIMD) 關於bit操作(bit_settest_bit) putvariablesinaregsiter UserspaceI/Oschedulingformulti-fileoperations ManualFIleLocking Linux下fork函數及pthread函數的總結 C++在類裡面使用多線程技術 深入Linux多線程編程 C/C++每線程(thread-local)變量的使用 在pthread的線程函數中,使用類的非靜態成員函數來執行 從pthread轉換到std::thread Assembly myAssembly Linux平臺學X86組合語言 現代計算機結構組成與工作過程 處理器指令碼及IA-32平臺瞭解 相關開發工具 從“helloworld!”開始 使用gdb調試彙編程序 數據的傳送 堆棧的使用 條件跳轉 循環指令 整數運算 字符串的傳送 字符串的存儲與加載 字符串的比較與搜索 函數的使用 使用命令行參數 在彙編語言中調用C庫函數 在彙編中使用linux系統調用 內聯彙編 C語言中調用匯編函數 彙編庫的使用(結) [轉]如何在Linux下使用GNUAS撰寫組合語言 在Linux下使用GNUAS編寫組合語言-使用gdb進行除錯 linux反彙編旁門左道小技巧一則 gas學習byJianLee 閱讀assemblycode Linuxasm系統調用:32位和64位的區別 如何在linux下編譯彙編程序,內功心法是彙編程序的結構 Toolchain crosscompilerinstall buildrootinstall arm交叉編譯器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別 GDB gdb常用指令 Beej'sQuickGuidetoGDB 簡易GDBScript教學,應用 [轉]GDB的妙用 GDB中應該知道的幾個調試方法 KGDB [轉]DebugXorgwithGDBonUbuntu [轉]使用GDB以樹狀方式將函式流程印出 gdb除錯技術 gdb的multiarch gdb編譯 KGDBLinuxKernelforSamsung 用GDB追蹤glibc代碼執行過程 使用GDB分析二進位資料 cgdb編譯&使用 gdbC++小技巧 gdb展開C/C++的macro solib-absolute-prefix和solib-search-path的區別 利用gdb進行sharedlibrary的除錯 用GDB跟蹤觀察共享庫函數的地址翻譯過程 KGDB調試LINUX內核 GDB調試原理ptrace系統調用 gdb遠程qemu-arm調試 gdb顯示結構體 GDBC++STLprinter GDBdashboard:debuginfoataglance 在程式碼中使用signal()插入中斷點,讓GDB暫停程式做debugging 只要出問題,C4炸藥gdb都能搞定 懶人除錯法 兩種將gdb的輸出信息存到文件的方法 使用call命令在GDB中重複調用某函數 通過GDB學習C語言 用GDB反彙編調試linux內核 GDB下查看記憶體指令(x指令) Howtodebugglibsourcecodeviagdb HowtouseGDBdebugOpenCVprogrammes? GDB實用教學:自動化你的debug GDB反向調試(ReverseDebugging) 讓程序崩潰時產生coredump 很經典的GDB調試命令,包括查看變量,查看內存 gdb調試帶參數程序 整理常用的gdb技巧 GDB命令基礎,讓你的程序bug無處躲藏 valgrind+gdb 調試技巧備忘 TraceFunctionCallsUsingGDBRevisited [GDB]除錯python程式thread間互相等待mutex,造成deadlock的問題 Linux內核分析雲課堂學習筆記 圖解分析彙編代碼以理解計算機是如何工作的 基於mykernel的一個簡單的時間片輪轉多道程序內核代碼分析 使用gdb跟蹤Linux內核啟動過程 使用庫函數API和C代碼中嵌入彙編代碼兩種方式使用同一個系統調用 分析system_call中斷處裡過程 初學Linux進程的描述和進程的創建 初學《Linux內核如何裝載和啟動一個可執行程序》 初學Linux中進程調度與進程切換過程 Linux內核學習總結 小博魚筆記 Linux內和分析(一)計算機是如何工作的 Linux內和分析(二)操作系統是如何工作的 C++ [轉]C++對象的內存佈局 [轉]C++對象模型之簡述C++對象的內存佈局 [轉]C++對象模型之詳述C++對象的內存佈局 [轉]C++虛函數表解析 如何判斷C++物件的類別? ASimpleC++FunctionCallStackTraceUtility 探索C++虛函數在g++中的實現 樸實的C++設計 C++智能指針 Mutex::Autolockforc++ C++STL學習總結(全面) 學習C++:實踐者的方法(Beta1) STL容器(一)-基本介紹 STL容器(二)-Iterator C/C++十三誡 標準類型轉換:static_cast,dynamic_cast,reinterpret_cast,andconst_cast example vector用法 父子類別之間函數呼叫 C++:父類調用子類的成員函數 StdPair用法 2Dvectorarrayusingstd::vector arraycopyusingstd::vector std::vector封裝到shared_ptr shared_ptr向下轉型 C++的Class中的一些重點整理 LOG建構解構 c++typeid()用法如何正確的顯示變數型態名稱的亂碼、異常 shared_ptr使用建構解構驗證記憶體回收 實例研討:從C++學習C高級技巧 為何Google禁止工程師使用C++staticobject? 是否能讓C++template的標頭檔只含宣告不含實作? 改善C++程序的150個建議 C++物件模型 物件模式(一) 物件模式(二) C++類對象內存結構 C++四种继承关系中内存分布 GNUmake example 好用Makefile CMake CMake初探 CMake入門 讓cmake顯示gcc/g++的編譯信息 把玩CMake的第一步 cmakeCFLAGSCXXFLAGS CMake入門/加入編譯選項 CMakeforwindows CMake常用指令 如何調試makefile變量 跟我一起寫Makefile:make運行 Makefile的常用技術總結 Makefile語法簡介 Makefile先編譯出so後在編譯出執行檔 利用Autotools來建立Makefile檔案 GNUMakefile雜項語法備忘 SCons筆記(詳細版) 高級Makefile技巧 Makefile條件編譯debug版和release版 Makefile範例教學 LinuxC++編譯及靜態/動態鏈接庫筆記 Makefile的基本結構 深入學習Make命令和Makefile(上) 深入學習Make命令和Makefile(下) Makefile中的$@,$^,$與



請為這篇文章評分?