當前位置:
首頁 > 最新 > 基於python的opengl 3D構架 一

基於python的opengl 3D構架 一

今天從個人開源庫里分享個基於Python開發的3d構架↓↓↓

項目倉庫:

https://gitee.com/matrixyang/py_mxs

文件目錄:

git下來,進入目錄運行看看(windows / Linux)…..

GIF

基本操作:

alt + 左鍵 --> 視口旋轉

alt + 中鍵 --> 視口平移

alt + 右鍵 --> 視口前後推拉

左鍵單擊 --> 選擇物體

左鍵拖拽 --> 框選物體

很常見的操作方式,一些主流軟體的使用習慣。

圖形api採用opengl,Python中的綁定庫pyopengl 窗口構架是裡面自帶的歷史悠久的glut,雖然已經被丟棄,但我一直都不太喜歡在窗口介面上折騰太多精力,對於這個小工具自帶的glut已經夠用了,喜歡好看複雜界面的,pyqt pyside都是不錯的選擇。

PyOpenGL is the most common cross platform Python binding to OpenGL and related APIs. The binding is created using the standard ctypes library, and is provided under an extremely liberal BSD-style Open-Source license.

跨平台、綁定方式通過ctypes庫。

有專門的函數查詢說明子頁面,同時對應的函數可以提供有開源庫的參考案例鏈接,這個不錯。

函數名跟原始api基本一樣,所以只要以前有c+opengl開發經歷的朋友直接上手一般都沒什麼問題 安裝庫介紹 目前框架平台比較簡單,主要是完善交互輸入功能,這個比較重要,軟體總不能少了滑鼠鍵盤的基本操作,後續開發也就可以避免枯燥的窗口構架搭建代碼過程,專註於自己想要實現的功能內容進行擴展就可以了。

由於是首次更新,只提供一些基本類和操作比如網格物體 、攝像機、燈光、載入shader、vao/vbo創建等,封裝起來避免重複的代碼開發。

Tips.基於當前階段的疑問以及部分相關代碼的說明

pyopengl如何安裝?

查看上述pyopengl的主頁,pip 直接安裝即可。

例如

安裝這兩個基本庫就可以使用了,還有額外庫的比如上下文有關的,案例都可以選擇安裝。

pyopengl的運行效率如何?

主頁面介紹貌似說運行效率不怎麼樣,不過我覺得除非開發大型案例或遊戲,一般的場景還是沒問題的,畢竟python有開發效率高這個優勢,還是值得一試的。

與c/c++寫的區別?

以自帶的框架為例 opengl API調用部分的代碼結構可以直接借鑒,函數名不變,除了參數輸入需要轉換為python的方式。

本代碼中的glm numpy ctypes庫

是opengl數學庫的python版本,選擇安裝主要是用於上層生成矩陣方便些;

我非常喜歡的庫,知名度不用多說了,必須的,代碼中頂點數組保存和傳遞都採用numpy的array存儲;

也是必須的,因為opengl的綁定都是採用,在傳遞函數參數類型用的上。

需要傳遞指針的opengl函數如何操作

比如 VAO的生成函數需要傳遞一個整數和一個指向數組的指針,對於整型數字可以直接python傳遞轉換,但是指針要通過創建的數組才能轉換。

假設要生成5個VAO,可以這麼寫 ↓

部分代碼的結構示例(完整的代碼可從倉庫地址獲取)

主函數代碼部分,經典的glut結構 ↓

繪製函數的主體,包含opengl的拾取模式完成對物體的選擇 ↓

創建Shader的代碼函數 ↓

用於繪製坐標系的頂點數據 ↓

圖形圖像開發、主流CG軟體(引擎)構架/插件/pipleline/SDK/scripts相關實戰經驗分享與探討,涉及語言(API): C、C++、C#(Unity)、python、maxscript(3d)、opengl、D3D ….

更多內容歡迎訂閱,我的二維碼 ↓

cgCraft

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

蛋白質是天然的減肥良藥:15種富含蛋白質的食物
盛開的光葉子花,是藍天最佳的配色

TAG:全球大搜羅 |