① vtk和opengl哪個效率高
當然是OpenGL高效。vtk使用簡單。
② 怎麼把vtk的window轉到qt中的qgraphicsview
qt
可以通過QGLWidget運行opengl。QGLWidget繼承QWidget,能夠直接在裡面調用opengl的介面。這個在qt文檔里有具體說
明,也有相關例子,所以不贅述了。但是無法在正式軟體裡面執行,為什麼?因為正式軟體是用QGraphicsScene這個場景類操作和操作一切
item,而用QGraphicsView將其顯示出來,而每一個item都是QGraphicsItem的子類。QGLWidget並不是QGraphicsItem類,我曾經嘗試用普通的QWidget類那樣,通過proxy來加進QGraphicsItem,但是沒有成功。或許有方法,但是沒有找到。
於是我放棄了用QGLWidget來操作opengl的打算,尋找直接在QGraphicsItem中操作opengl的方法。通過查看文檔和示例代碼,找到了這個洞逗方法:
1 往qt工程文件里添加opengl以及對應的lib。
2
對QGraphicsView進行一個三維對話框的指定,代碼如下:
QGLWidget *widget = new
QGLWidget(QGLFormat(QGL::SampleBuffers));
widget->makeCurrent();
QGraphicsView
view;
view.setViewport(widget);
上述代碼告訴了 QGraphicsView 類當前繪制的對象是支持opengl的。於是所有的場景中的item都將繪制到widget 上。
3
寫一個QGraphicsItem的繼承類,特別要重寫paint函數。代碼如下:
void XXX::paint(QPainter
*painter, const QStyleOptionGraphicsItem *option, QWidget
*widget)
{
painter->beginNativePainting();
glColor3f(0.5,1.0,0.2);
glBegin(GL_TRIANGLES);
glVertex3f(100.0,100.0,-100.0);
glVertex3f(150.0, 100.0,
-100.0);
glVertex3f(100.0, 150.0,
-100.0);
glEnd();
painter->endNativePainting();
}
上面這個函數主要是用opengl介面繪制了一個三角形。記住,在opengl繪制之前一定要執行painter->beginNativePainting()以及painter->endNativePainting()這兩個語句。
QGraphicsScene、
QGraphicsView和QGraphicsItem的關系可以查閱相關文檔,也不贅述了。
不過我按照這個方式畫的三角形,怎麼也在窗口上顯示不出來,找了半天才發現問題在這個函數上QGraphicsItem::boundingRect()。這個函數是
干什麼用的呢?主要用來返回該item的初始化大小,這個大小不會輕易改變,後續的改變都可以通過矩陣來完成,但是初始大小是不變的。QGraphicsView通過這個矩形來判斷當前item是不是需要重繪,如果在重繪區外,則不調用重繪函數了。同時碰撞檢測之類,也可以用這個矩形來判斷。原來,item本身的矩陣外包框不對,所以才導致了重回不出來,改過來就正確了。
上面說的很潦草,具體怎麼改的步驟就不說了。要想正確的繪制,必須得弄清楚坐標系的關系,QGraphicsScene、QGraphicsView以及QGraphicsItem這三個坐標繫到底是什麼關系。我看了文檔,也自己進行了測試,但是感覺文檔和測試的結果有些出入。具體出入不說了。說一下自己得心的吧。
先說明:涉及到一切大小和長度,都是像素大小,至少我測試的結果是這樣的。
在建立QGraphicsScene
對象的時候,有一個構造高顫芹函數是矩形,這個矩形是什麼含義呢?經過測試,發現這個矩形並沒有指定彈出窗口戚畢的位置,比如,我把矩形的左上角點指定為
-1000,-1000,顯示的位置和1000,1000是一樣的,而長度則正確指定了(當然,可能會有滾動條)。所以,這個矩形的左上角點並不是顯示的
窗口的位置,而是它在邏輯上的左上角點。我們顯示一切item,都是以這個邏輯上的坐標系為准來繪制的。比如,左上角點是-1000,-1000,而
item的位置在-500,-500,則這個-500,-500相當於在顯示窗口的左上角往下各加500個像素的坐標的位置。
那麼 QGraphicsItem的boundingRect是什麼意思呢?返回的是什麼大小?是以什麼坐標系顯示的大小?首先,這個大小肯定是以像素為單位的,其次,這個矩形的坐標是以QGraphicsScene的邏輯坐標為準的。當然這個大小是沒有任何矩陣疊加的大小。有了矩陣疊加後,實際的矩形可能會發生變化。假如在boundingRect中指定矩形的左上角為100,100,那麼最終體現的位置則是QGraphicsScene邏輯坐標100,100的位置,如果QGraphicsScene的左上角點已經指定為-1000,-1000,那麼這個位置實際上就是離窗口左上角點1100,1100的位置(由於有滾動條,所以也不一定是這個長度。)
那麼在QGraphicsItem的paint函數中進行了opengl繪制用的是什麼坐標呢?其實用的也是QGraphicsScene
的邏輯坐標。如上面的例子,繪制的直角三角形直角頂點是0,0,那麼顯示的位置就是距離顯示窗口左上角點1000,1000的位置。不過opengl的所
有繪制都是沒有矩陣疊加的基礎上,如果用矩陣疊加,則顯示的位置肯定和指定的有區別了。比如,我用setPos強制指定一個位置,這個位置將和opengl繪圖坐標相疊加,最後顯示到窗口上。我推測setPos其實是改變了矩陣,是一個平移矩陣。
③ opengl opencv vtk哪個快
你會那個那個就快。
④ 編譯vtk出現的問題
說得詳細一些,編譯到什麼情況出現的錯誤,bin已經編譯出其他exe和dll文件了么?
⑤ vtkguisupportqt 庫怎麼安裝
1、下載
VTk官方下載頁面:http://www.vtk.org/VTK/resources/software.html#latest
我下載的是vtk-6.0.0.zip(源碼)、vtkdata-6.0.0.zip(數據)、vtkDocHtml-6.0.0.tar.gz.(幫助文檔)。
既然下載了源碼, 就不需要下載則緩者win32的安裝exe程序了,我們自己手動編譯哪正。
2、編譯
2.1下載cmake-2.8.11.2-win32-x86.exe,並安裝。用它來完成VTK的編譯。
2.2解壓vtk-6.0.0.zip至D:\VTK6.0\vtk,
解壓vtkdata-6.0.0.zip至D:\VTK6.0\vtkdata
解壓vtkDocHtml-6.0.0.tar.gz 至D:\VTK6.0\vtkDocHtml
2.3 運行安裝後的,CMake程序。
選擇source code目錄為 D:\VTK6.0\vtk
選擇build後的bin目錄為 D:\VTK6.0\bin
點擊Configure按孫薯鈕,會提示你選擇編譯器,我們選擇visual studio 9 2008.然後Cmake會掃描一下它需要的文件,等它停下來後,我們就可以修改CMake的參數選項了。
⑥ 如何安裝VTK6.2.0
1、首先從VTK官網上下載vtk6.2.0和CMake3.2.3.
http://www.vtk.org/download/
http://www.cmake.org/download/
默認已經裝好了vs2010啦,
最後是環境配置,請在系統path中添加.../vtk;,然後把vtk/bin中的dll文件拷進system32中。
⑦ VTK初學,抄了這么一個程序,老說LIB 不對,誰幫看看 謝謝
你查找你的vtk文件中是否有vtkCommon.lib,可能由於版本問題,這個lib換了名字!!!
⑧ 請問VTK與open inventor以及openGL各有什麼特點,區別
簡散卜帆單的說,openGL是面向過程的,OIV是面向對象的,VTK我沒用過,OIV有許多對象模沖雹塊,你可以直接調用而省去大量的編程。也就是說,同樣的實現,OIV的代碼可以弊賣做到最短,據我所知是所有圖形庫中最短的。
⑨ Cmake動態編譯VTK庫(QVtkwidget)
在版本問題上大費周章之後,得到如下的成功嘗試
軟體版本說明:
PCl1.8.1 + VS2017 + Qt5.9.6 + Cmake + Vtk8.0.0
點擊Configure後對條目進行處理:(修改完成繼續Configure直到沒有錯誤)
1.點擊Add Entry添加
Name: CMAKE_DEBUG_POSTFIX 、Type: STRING 、Value:-gd、Description:空
讓vtk的lib最後分為debug版本跟release版本。Debug版本帶-gd。Release版本不帶-gd,方便區分.
2.勾選BUILD_SHARED_LIBS,這樣最後生成的vtk才會有dll跟lib
3.CMAKE_INSTALL_PREFIX設置為你清空的VTK文件夾(為了方便,這里選擇的路徑為PCL集成的VTK路徑)
4.勾選VTK_Group_Qt,這樣以後方便在qt裡面使用
5.修改Qt5_DIR路徑為PATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/lib/cmake/Qt5
6.修改VTK_QT_VERSION:STRING=5,使用Qt5修改相應版本號
7.如出現qmake路徑則修改QT_QMAKE_EXECUTABLE:FILEPATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/bin/qmake.exe
完成Configure,不出意外就不再顯示紅色,接著點Generate
接著以管理員身份運行VS2017,打開構建目錄下的VTK.sln
選擇Debug,x64,然後右鍵解決方案窗口的ALL_BUILD --> 生成。
漫長等待...ing
然後右鍵install --> 僅生成install
Release版本同理,先ALL_BUILD --> 生成 再 右鍵install --> 僅生成install
至此完成編譯VTK操作,接下來提取所需的QVtkwidget插件