Blender + 3D Connexion 三維滑鼠: 實現 Maya 式導航
(這個真不是 3DConnexion 的軟文,不信直接去看最後的部分)
總結:
如果你同時用 Blender 和 3D Connexion 三維滑鼠,且為 Blender 沒有 Maya 式三維滑鼠導航而煩惱,這就是你所需要的解決方案。
-
前幾天,買了一個 3D Connexion SpaceNavigator 三維滑鼠。唔,就是這貨:
買回來試了一下,發現我常用的 Blender 對它的支持還可以。六個自由度運動都可以被檢測出來。然後在 Maya 里嘗試用了一下,感覺 Maya 對 SpaceNavigator 默認的運動配置比 Blender 更舒服:可以在正常平移、縮放的同時,圍繞選中物體中心旋轉。回到 Blender 里後,我嘗試在偏好設置里把 3D 滑鼠運動方式改成類似 Maya 那樣,但發現無論如何也不能同時做到能夠圍繞物體中心旋轉且不用按其他按鍵來平移、縮放。Blender 要麼是圍繞屏幕中心(而不是選中物體中心)自由轉動視角,要麼是 圍繞物體中心旋轉,但要按其他的鍵盤按鍵才可以同時平移、縮放視角。Blender 不能做到類似像 Maya 那樣的控制器導航讓我很頭大,然後搜了一下解決辦法,Blender Artist 論壇上也有不少人遇到了類似的問題,但都在抱怨,沒有一條真正管用的解決方案。不過好在 Blender 是開源軟體,開源軟體的原則就是「你行你上」;那好吧,就擼起袖子上了。
解決方案:
首先下載 Blender 的源代碼和相關依賴庫。這個頁面: Dev:Doc/Building Blender 解釋了自行編譯 Blender 的大致流程。我用的是 macOS,macOS 下具體的下載源代碼、相關依賴庫、生成 Xcode 工程文件、在 Xcode 里配置方法可以參考這個頁面:Dev:Doc/Building Blender/Mac
配置好 Xcode 工程後先編譯、運行試一下看看。當然,作為一個以 C++ 代碼為主的項目,編譯這一步可能需要好幾分鐘,甚至十幾分鐘,慢慢等不要急。
如果編譯、運行沒有任何錯誤,找到 view3d_edit.c 文件:
在文件里找到static int ndof_orbit_zoom_invoke(bContext *C, wmOperator *op, const wmEvent *event)
這個函數,在這個函數代碼里找到
else if ((U.ndof_flag & NDOF_MODE_ORBIT) || ED_view3d_offset_lock_check(v3d, rv3d)){ const bool has_rotation = NDOF_HAS_ROTATE; const bool has_zoom = (ndof->tvec[2] != 0.0f); if (has_zoom) { view3d_ndof_pan_zoom(ndof, vod->sa, vod->ar, false, has_zoom); } if (has_rotation) { view3d_ndof_orbit(ndof, vod->sa, vod->ar, vod); }}
判斷代碼,這段判斷代碼即是我們需要修改的,把其改為:
else if ((U.ndof_flag & NDOF_MODE_ORBIT) || ED_view3d_offset_lock_check(v3d, rv3d)){ const bool has_rotation = NDOF_HAS_ROTATE; const bool has_translate = NDOF_HAS_TRANSLATE; const bool has_zoom = (ndof->tvec[2] != 0.0f) && !rv3d->is_persp; float dist_backup; if (has_rotation) { view3d_ndof_orbit(ndof, vod->sa, vod->ar, vod); } if (has_translate || has_zoom) { view3d_ndof_pan_zoom(ndof, vod->sa, vod->ar, has_translate, has_zoom); } dist_backup = rv3d->dist; ED_view3d_distance_set(rv3d, dist_backup);}
代碼修改後和修改前不同之處如圖所示:
這就是全部的代碼修改工作。最後,別忘了把 Xcode 的運行模式從 debug 改成 release。用 release 模式編譯後,把 Blender 偏好設置里的 NDOF 控制器導航方式改為 orbit:這樣就可以在你自己編譯的 Blender 里使用 Maya 式 3D 滑鼠導航了。
後記:
你用的是 Mac,對於 Windows 和 Linux 版行不行啊。應該可以,修改的這段代碼是平台無關的。但如何生成、編譯在 Windows 和 Linux 的項目需要參看 Blender Dev 里相關頁面來操作。
這樣自行編譯的 Blender 有什麼問題沒有啊?至少目前我沒有發現有什麼異常。
好麻煩,有沒有更簡單的解決方案啊?我在看 Blender 相關的 Python 插件開發相關資料,看看能不能寫成一個 Python 腳本,讓用戶以插件的形式安裝。這樣也避免 Blender 每發布一個版本,自己就要重新下載源代碼、修改、編譯一遍的情況。
-
修改完 Blender 後,我去某東上聯繫退換貨了。原因?看圖:
呵呵。推薦閱讀:
※送你們一隻「雞啊」~
※NO.01期Blender全科班Blender作品-沈敬祖-NIKON相機-創作分享
※Blender的強大超出你的想像
※blender 怎麼做米飯的模型?
TAG:Blender |