網(wǎng)站優(yōu)化 圖片每天新聞早知道
目錄
- 準(zhǔn)備環(huán)境
- 構(gòu)建官方案例
- 另行構(gòu)建
- 經(jīng)驗(yàn)分享
- 附錄
準(zhǔn)備環(huán)境
- 安裝Motion Builder 2024并破解
- 安裝Qt 5.15.2
截止至2024年12月19日,Qt的在線安裝器的默認(rèn)頁面是沒有5.15.2版本的。你需要:在“選擇組件”界面,選擇“Archive”,點(diǎn)擊“篩選”,重新加載數(shù)據(jù)庫之后,你就可以看到舊版5.15.2了。
勾選Qt 5.15.2 的MSVC 2019 64-bit和Qt WebEngine。我個(gè)人比較斷舍離,我覺得其它組件用不上,我就都消選了。點(diǎn)擊下一步,直到安裝完成。
- 安裝cmake 3.17或更高的版本。
- 安裝Visual Studio 2022 或更高版本,還必須安裝“使用 C++ 進(jìn)行桌面開發(fā)”Visual Studio 組件。
本節(jié)參考資料:MotionBuilder SDK 要求
構(gòu)建官方案例
-
添加環(huán)境變量
變量名:QTDIR
變量值:{Qt5Config.cmake所在的目錄}
(舉例:D:\software\Qt\5.15.2\msvc2019_64\lib\cmake\Qt5) -
修改MB給的cmake文件MotionBuilder 2024\OpenRealitySDK\cmake\OpenReality.cmake的第82行,把${QT_VERSION_MAJOR}改成5。
# find_package(Qt${QT_VERSION_MAJOR} ${QtVersion} REQUIRED COMPONENTS Core Gui Widgets Multimedia OpenGL OpenGLExtensions WebEngineWidgets Xml) find_package(Qt5 ${QtVersion} REQUIRED COMPONENTS Core Gui Widgets Multimedia OpenGL OpenGLExtensions WebEngineWidgets Xml)
-
在
{你的MB安裝目錄}\MotionBuilder 2024\OpenRealitySDK
下,輸入cmake指令:cmake . -DCMAKE_BUILD_TYPE=Debug
可選的build type還有RelWithDebInfo。
-
如果成功構(gòu)建,打開OpenReality.sln。默認(rèn)當(dāng)前啟動項(xiàng)目是ALL_BUILD,如果你直接編全部,大概率遇到各種警告編不過。建議按需編譯:選擇你需要的項(xiàng)目,右鍵點(diǎn)擊”設(shè)為啟動項(xiàng)目“,然后右鍵點(diǎn)擊”生成“。
-
如果成功編譯,那么編譯出來的.lib會放在
D:\software\MotionBuilder 2024\bin\x64\plugins\Debug
。
要想使用插件,你需要手動啟動MB,點(diǎn)擊頂部菜單欄的Settings>Preference>SDK>Add,選擇上述目錄,確定,Ok,重啟MB即可使用。 -
快速啟動(選讀)
如果直接點(diǎn)擊運(yùn)行,是運(yùn)行不了的,因?yàn)榫幾g的結(jié)果是生成一個(gè)DLL而不是一個(gè)exe。我們需要把這個(gè)dll綁給MB。
右鍵當(dāng)前項(xiàng)目,點(diǎn)擊最下面的“屬性”,選擇“調(diào)試”,
填寫“命令”為你本地的MB的exe文件。例如我的是"D:\software\MotionBuilder 2024\bin\x64\motionbuilder.exe"
。這一步的作用是,在我們編譯好之后,有.exe能直接啟動。
填寫“環(huán)境”為MOTIONBUILDER_PLUGIN_PATH=C:\Program Files\Autodesk\MotionBuilder 2023\bin\x64\plugins\Debug
。這一步的作用是,讓MB能找到插件在哪里。
如此啟動之后,MB就能啟動咱們編出來的樣例插件,并且我們能在vs里打斷點(diǎn)調(diào)試了。
另行構(gòu)建
請先確保官方構(gòu)建環(huán)節(jié)能夠跑通。
我的基本思路:照搬官方構(gòu)建的cmake文件,按需小改。
- 創(chuàng)建項(xiàng)目文件夾,以myplugin為例。
- 從OpenRealitySDK文件夾內(nèi)拷貝以下3個(gè)內(nèi)容到myplugin文件夾:
- 修改myplugin\CMakeLists.txt的第10行,把MOBU_ROOT設(shè)為你的MB根目錄,例如我的是:
修改myplugin\CMakeLists.txt的第16行,子目錄改為Src:# Mandatory path to MotionBuilder Root folder. set(MOBU_ROOT "D:/software/MotionBuilder 2024")
add_subdirectory( Src )
- 在myplugin文件夾下,創(chuàng)建文件夾,命名為Src,用于放置源文件。在myplugin\Src\創(chuàng)建以下4個(gè)文件,拷貝我提供的內(nèi)容(詳見附錄):
① CMakeLists.txt
② mytool_tool.h
③ mytool_tool.cpp
④ mytool_lib.cpp - 在myplugin文件夾下,cmake構(gòu)建解決方案。創(chuàng)建腳本雙擊更方便。
Build.batmkdir build cd build cmake ..
- 打開解決方案myplugin\build\myplugin.sln,把MyTool設(shè)為啟動項(xiàng)目,運(yùn)行啟動,你會得到:
再次總結(jié),構(gòu)建好的文件目錄應(yīng)該是這樣的,被選中的是必需:
之后就是圈地自嗨時(shí)間啦~!Enjoy!
經(jīng)驗(yàn)分享
- 編譯MB的插件,可能會把破解好的許可證弄壞,此時(shí)需要重新破解。祝大家心平氣和
- 官方示例插件個(gè)數(shù)大約有80+,并不是每個(gè)插件都放在Tools列表里,而是藏在各種邊邊角角的下拉框。
當(dāng)你找不到想學(xué)習(xí)的插件的入口時(shí),請打開MotionBuilder 2024\OpenRealitySDK\Samples{插件的系列名}{插件的系列名}.txt,這個(gè)txt文本里面會標(biāo)注這個(gè)系列下的每個(gè)插件是怎么使用的。
另外,每個(gè)插件的頭文件,可能也會說明這個(gè)插件的功能作用。 - 官方文檔是個(gè)好東西。
https://help.autodesk.com/view/MOBPRO/2024/ENU/?guid=GUID-0AEB6C9E-3A7D-4427-86DA-30E03D65E1C3
附錄
① CMakeLists.txt
你可以從每個(gè)官方示例插件下找到cmake模板,例如OpenRealitySDK\Samples\boxes\box_template\CMakeLists.txt。不同的是,我對它進(jìn)行了按需修改。
# 第1處修改: 設(shè)置我自己的項(xiàng)目名稱
project(MyTool LANGUAGES CXX)# 第2處修改: 從羅列每個(gè)源文件,改成自動識別
file(GLOB HEADER_FILES ${PROJECT_SOURCE_DIR}/*.h)
file(GLOB SOURCE_FILE ${PROJECT_SOURCE_DIR}/*.cpp) # 注意,官方用的是cxx,我用的是cppsource_group(TREE ${CMAKE_SOURCE_DIR} FILES ${HEADER_FILES})
source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${SOURCE_FILE})add_library(${PROJECT_NAME} SHARED${HEADER_FILES}${SOURCE_FILE}
)# 第3處修改:添加調(diào)試選項(xiàng)參數(shù),這樣就可以直接啟動MB并綁定調(diào)試
set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DEBUGGER_COMMAND ${MOBU_ROOT}/bin/${BIN_PATH}/motionbuilder.exe)
set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "-console")
set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DEBUGGER_ENVIRONMENT "MOTIONBUILDER_PLUGIN_PATH=${MOBU_ROOT}/bin/${BIN_PATH}/plugins/$(Configuration)")target_compile_definitions(${PROJECT_NAME} PRIVATE FBXSDK_SHARED FBXSDK_NEW_API)
target_link_libraries(${PROJECT_NAME} PRIVATE fbsdk fbxsdk OpenGL::GL OpenGL::GLU)mobu_target_finalize(${PROJECT_NAME} plugins)
② mytool_tool.h
這是插件的UI入口類的頭文件。
#ifndef __MYTOOL_H__
#define __MYTOOL_H__
// ===========================================================================
// Copyright 2017 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk license
// agreement provided at the time of installation or download, or which
// otherwise accompanies this software in either electronic or hard copy form.
// ===========================================================================//--- SDK include
#include <fbsdk/fbsdk.h>//--- Registration define
#define ORTOOLTEMPLATE__CLASSNAME MyTool
#define ORTOOLTEMPLATE__CLASSSTR "MyTool"class FbxScene;/** Tool template.
*/
class MyTool : public FBTool
{//--- Tool declaration.FBToolDeclare( MyTool, FBTool );public://--- Construction/Destruction,virtual bool FBCreate(); //!< Creation function.virtual void FBDestroy(); //!< Destruction function.private:FBLabel mLabel;FBButton mButton;
};#endif
③ mytool_tool.cpp
這是插件的UI入口類的.cpp文件
// ===========================================================================
// Copyright 2017 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk license
// agreement provided at the time of installation or download, or which
// otherwise accompanies this software in either electronic or hard copy form.
// ===========================================================================/** \file mytool_tool.cxx
*/
#include <fbsdk/fbsdk.h>//--- Class declaration
#include "mytool_tool.h"//--- Registration defines
#define ORTOOLTEMPLATE__CLASS ORTOOLTEMPLATE__CLASSNAME
#define ORTOOLTEMPLATE__LABEL "MyTool"
#define ORTOOLTEMPLATE__DESC "MAY - Tool Description"//--- Implementation and registration
FBToolImplementation( ORTOOLTEMPLATE__CLASS );
FBRegisterTool ( ORTOOLTEMPLATE__CLASS,ORTOOLTEMPLATE__LABEL,ORTOOLTEMPLATE__DESC,FB_DEFAULT_SDK_ICON ); // Icon filename (default=Open Reality icon)using namespace FBXSDK_NAMESPACE;/************************************************* Constructor.************************************************/
bool MyTool::FBCreate()
{// Tool optionsStartSize[0] = 800;StartSize[1] = 500;int lB = 10;//int lS = 4;int lW = 200;int lH = 18;// Configure layoutAddRegion("Label", "Label",lB, kFBAttachLeft, "", 1.0,lB, kFBAttachTop, "", 1.0,lW, kFBAttachNone, "", 1.0,lH, kFBAttachNone, "", 1.0);SetControl("Label", mLabel);mLabel.Caption = "Label";AddRegion("Button", "Button",lB, kFBAttachLeft, "", 1.0,30, kFBAttachTop, "", 1.0,lW, kFBAttachNone, "", 1.0,lH, kFBAttachNone, "", 1.0);SetControl("Button", mButton);mButton.Caption = "Button";return true;
}/************************************************* Destruction function.************************************************/
void MyTool::FBDestroy()
{}
④ mytool_lib.cpp
這是dll文件的注冊信息。每個(gè)MB插件都是一個(gè)綁給MB的dll。
// ===========================================================================
// Copyright 2017 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk license
// agreement provided at the time of installation or download, or which
// otherwise accompanies this software in either electronic or hard copy form.
// ===========================================================================/** \file MyToolcxx
* Library declarations.
* Contains the basic routines to declare the DLL as a loadable
* library.
*///--- SDK include
#include <fbsdk/fbsdk.h>#ifdef KARCH_ENV_WIN#include <windows.h>
#endif//--- Library declaration.
FBLibraryDeclare(MyTool)
{FBLibraryRegister(MyTool);
}
FBLibraryDeclareEnd;/************************************************* Library functions.************************************************/
bool FBLibrary::LibInit() { return true; }
bool FBLibrary::LibOpen() { return true; }
bool FBLibrary::LibReady() { return true; }
bool FBLibrary::LibClose() { return true; }
bool FBLibrary::LibRelease() { return true; }