如何寫一個應用於cad的圖形引擎?

不是二次開發,類似於遊戲引擎。

就是做一個閹割了的autocad,只有圖形方面的渲染框架。


之前實驗室有做過這方面的工作(GEMS),不過我沒有參與了解的不是非常深入

就CAD來說,其圖形部分是非常簡單的……簡單到用glew蹭蹭蹭隨便搭一個渲染都夠用(線框模式,然後再支持個Phong模型差不多了...)

真正複雜的在數學部分,各種求交啊、運算啊什麼的,還有噁心的精度問題……


本人是做計算機輔助製造(CAM)方向的,讀博的時候一直在用自己寫一個非常小的的計算幾何庫,也試圖把它做大做強,但發現比較難。

圖形引擎應該包括兩個方面。一方面是指專門負責圖形渲染的引擎,如OpenGL,DirectX等。另一方面是指上層的計算幾何演算法(Computation Geometry Algorithm),如曲線曲面相交、偏置、擬合、布爾運算等。

渲染的引擎沒什麼好說的,這方面的軟體歸根到底可能都是用OpenGL做的。

計算幾何演算法方面免費能用的C++庫也蠻多的,如OpenCasCade、CGAL、Clipper、Fade等。OpenCadCade和CGAL都是大型開源庫,其中OpenCasCade還封裝了OpenGL渲染功能,裡面包含了大量數據結構和演算法,上手直接能用;CGAL使用泛型編程,基本上每一個類都是模板寫的,非常晦澀,但能用的演算法還是蠻多的,比如多邊形中軸線提取等;Clipper就是一個非常小的C++類,封裝了平面矢量圖形的布爾運算、偏置等演算法,魯棒性好,效率非常高;Fade可以用來做平面圖形的三角化。


opencascade.還有,codeproject 上面有個sharpcad也不錯,是用c#寫的,基本的直線,圓弧都已經有了,支持圖層,點選和框選,還能夠序列化反序列化,很不錯的代碼。可以考慮下。


謝邀,雖然我以前用過autocad,但是確實對這方面不太了解,恰好最近看了一篇文章渲染引擎對比:Cycles和其他BlenderGET

所以題主或許可以參考一下blender的渲染引擎


強烈不建議使用 OpenCasCade 庫。大坑。效率殺手,各種不穩定。

曾經做過類似CAD的設計軟體,這裡把想到的和渲染有關的技術點羅列一下。

幾何運算: 建議arx開發庫中的acge庫。對一般的點,向量,矩陣,曲線支持非常好。但不支持體和面的BOOL運算。多邊形的BOOL運算推薦gpc。

顯示精度: 每個實體的渲染數據不要寫死,顯示的精度和當前視口大小有關,類似CAD的RE命令,刷新重新創建渲染數據。

皮筋機制:在很多功能的操作過程中,需要實時刷新場景,當場景數據很大時,會有卡頓。要麼對渲染引擎的效率做優化,要麼對皮筋的渲染做局部刷新優化。

選擇交互:可以利用渲染實現,如OPENGL的選擇模式等。也可以自己建立空間樹運算。

渲染效果:如果渲染效果要求高,建議使用遊戲引擎。如果場景以點,線,簡單材質的面為主,用OPENGL或DX,注意一下效率就好。


沒有市場,誰願意搞呀


據我所知,計算機輔助設計主要要hold住大規模多而且複雜的曲面,還要很好地處理透明,另外精度準確度也是很重要的。真實感要求倒不是很多,這和娛樂應用不太一樣,一般的娛樂渲染引擎肯定是搞不定的。blender不知道有么有參考價值。


謝邀~

題主能詳細描述下具體要幹啥子嗎?


能詳細說下啥意思么,和二次開發啥區別?


推薦閱讀:

CAD 文件不知道保存在哪兒了?
學習建築 CAD 應該多注意哪些細節?
為什麼3d設計軟體那麼多,別人還用cad來設計傢具呢!?
CAD 中出現「未協調圖層」是怎麼回事?有什麼影響?
cad有什麼經典教材?

TAG:遊戲引擎 | CAD | 計算機圖形學 | 有限元分析FEA | 圖形處理引擎 |