華為云計算 云知識 PhysX是什么
PhysX是什么

簡介

NVIDIA PhysX SDK是可擴(kuò)展的多平臺物理解決方案,支持從智能手機(jī)到高端多核CPU和GPU的各種設(shè)備。 PhysX已經(jīng)集成到一些最受歡迎的游戲引擎中,包括虛幻引擎和Unity3D。

配置安裝流程

1.配置編譯環(huán)境

1)安裝wget包

yum install wget -y

2)安裝Python 2.7.6或以上版本

請參考http://m.cqfng.cn/kunpeng/software/python.html安裝Python2或者h(yuǎn)ttps://m.cqfng.cn/kunpeng/software/python3.htmlan安裝Python3。

3)安裝CMake 3.12或以上版本

yum install cmake3 -y

ln -s /usr/bin/cmake3 /usr/bin/cmake

----結(jié)束

2.獲取源碼

獲取“PhysX-3.4.2-bsd”源碼包。

cd /usr/local/src

wget https://github.com/NVIDIAGameWorks/PhysX/archive/3.4.2-bsd.tar.gz -O PhysX-3.4.2-bsd.tar.gz

3.編譯和安裝

1)解壓軟件包。

tar -zxvf PhysX-3.4.2-bsd.tar.gz

2)重命名并且移動

rm -rf /usr/local/physx

mv PhysX-3.4.2-bsd /usr/local/physx

3)進(jìn)入PhysX編譯目錄。

cd /usr/local/physx/PhysX_3.4/Source/compiler/linux64

4)編譯PhysX

make -j4

編譯過程中會報錯,請參考故障排除解決報錯問題

5)將生成的動態(tài)庫的路徑添加到ld.so.conf配置。

a)修改“/etc/ld.so.conf”文件。

vim /etc/ld.so.conf

在文件末尾添加如下內(nèi)容:

/usr/local/physx/PxShared/bin/linux64/

/usr/local/physx/PhysX_3.4/Bin/linux64/

b)使配置修改生效。

ldconfig -f /etc/ld.so.conf

c)檢查配置是否生效。

ldconfig -p

----結(jié)束

4. 運(yùn)行和驗證

1)執(zhí)行如下命令,檢查生成的動態(tài)庫和靜態(tài)庫。

a)檢查生成的靜態(tài)庫。

cd /usr/local/physx/PhysX_3.4

find -name "*.a"

當(dāng)系統(tǒng)回顯類似如下信息時,表示生成的靜態(tài)庫成功。

b)檢查生成的動態(tài)庫。

cd /usr/local/physx/PhysX_3.4

find -name "*.so"

當(dāng)系統(tǒng)回顯類似如下信息時,表示生成的動態(tài)庫成功。

2)選擇SnippetHelloWorld.cpp進(jìn)行測試。

a)進(jìn)入SnippetHelloWorld目錄。

cd /usr/local/physx/PhysX_3.4/Snippets/SnippetHelloWorld/

b)編輯SnippetHelloWorld.cpp,修改代碼中的snippetMain為main。

c)編寫makefile文件。

vim makefile

內(nèi)容如下:

BINARY = $(patsubst %.cpp,%,$(wildcard *.cpp))

 

DEBUG_FLAG=-g -Werror -Wall -fPIC -fno-strict-aliasing -I ../../Include/ -I ../../../PxShared/include/ -DNDEBUG  \

        -L ../../Bin/linux64/ \

        -lPxFoundationDEBUG_x64 \

        -lPhysX3CommonDEBUG_x64 \

        -lPhysX3DEBUG_x64 \

        -lPhysX3CookingDEBUG_x64  \

        -lPhysX3PROFILE_x64 \

        -lPhysX3CommonPROFILE_x64 \

        -lPhysX3CharacterKinematicDEBUG_x64 \

        -L ../../Lib/linux64/ \

        -lLowLevel \

        -lPhysX3Extensions \

        -l PhysX3Vehicle \

        -l SceneQuery \

        -l SimulationController \

        -L ../../../PxShared/bin/linux64/ \

        -lPxFoundationDEBUG_x64 \

        -lPxPvdSDKDEBUG_x64 \

        -lPxFoundationPROFILE_x64 \

        -lPxPvdSDKPROFILE_x64 \

        -L ../../../PxShared/lib/linux64/ \

        -lPsFastXmlDEBUG \

        -lPxTaskDEBUG \

        -lpthread -ldl -rdynamic

 

RELEASE_FLAG = -Werror -Wall -fPIC -fno-strict-aliasing -I ../../Include/ -I ../../../PxShared/include/ -DNDEBUG  \

        -L ../../Bin/linux64/ \

        -lPxFoundation_x64 \

        -lPhysX3Common_x64 \

        -lPhysX3_x64 \

        -lPhysX3Cooking_x64  \

        -lPhysX3PROFILE_x64 \

        -lPhysX3CommonPROFILE_x64 \

        -lPhysX3CharacterKinematic_x64 \

        -L ../../Lib/linux64/ \

        -lLowLevel \

        -lPhysX3Extensions \

        -l PhysX3Vehicle \

        -l SceneQuery \

        -l SimulationController \

        -L ../../../PxShared/bin/linux64/ \

        -lPxFoundation_x64 \

        -lPxPvdSDK_x64 \

        -lPxFoundationPROFILE_x64 \

        -lPxPvdSDKPROFILE_x64 \

        -L ../../../PxShared/lib/linux64/ \

        -lPsFastXml \

        -lPxTask \

        -lpthread -ldl -rdynamic

 

#all:$BINARY)

 

all:SnippetHelloWorld.cpp

        g++ SnippetHelloWorld.cpp $(DEBUG_FLAG)

注意:“g++ SnippetHelloWorld.cpp $(DEBUG_FLAG)”前面是Tab鍵

d)編譯SnippetHelloWorld.cpp生成a.out。

make all

e)執(zhí)行SnippetHelloWorld。

./a.out

當(dāng)系統(tǒng)回顯類似如下信息時,表示安裝PhysX成功,可以正常使用。

[root@ecs SnippetHelloWorld]# ./a.out

SnippetHelloWorld done.

----結(jié)束

5. 故障排除

問題一:編譯報“unrecognized command line option "-m64"”等錯誤

問題描述:

進(jìn)入PhysX-3.4-master/PhysX_3.4/Source/compiler/linux64目錄,執(zhí)行make時,提示信息如下:

問題原因:下載子模塊速度太慢導(dǎo)致終端。

-m64,-msse2,-mfpmath=sse是x86 64位應(yīng)用編譯選項,為AMD的x86 64架構(gòu)生成代碼。在ARM64平臺無法支持。

解決方法:

執(zhí)行如下命令將PhysX-3.4-master/PhysX_3.4/Source/compiler/linux64目錄下所有文件中涉及的標(biāo)識-m64,-msse2,-mfpmath=sse替換掉

(1)將當(dāng)期目錄下所有文件中內(nèi)容“-m64”替換為“ ”

sed -i 's/-m64/ /g’`grep '\-m64' -rl ./`

(2)將當(dāng)期目錄下所有文件中內(nèi)容“-mfpmath=sse”替換為“ ”

sed -i 's/-msse2/ /g’`grep '\-msse2' -rl ./`

(3)將當(dāng)期目錄下所有文件中內(nèi)容“-mfpmath=sse”替換為“ ”

sed -i 's/-mfpmath=sse/ /g’`grep '\-mfpmath=sse' -rl ./`

(4)重新編譯

make

問題二:編譯報“error argument 1 null where non null expected werror nonnull”等錯誤

問題描述:

進(jìn)入PhysX-3.4-master/PhysX_3.4/Source/compiler/linux64目錄,執(zhí)行make時,報“werror nonnull”錯誤,截圖如下:

問題原因:gcc的編譯選項-Wall 打開gcc的所有警告-Werror,它要求gcc將所有的警告當(dāng)成錯誤進(jìn)行處理,所以報錯了。

解決方法:

不要將警告當(dāng)錯誤處理,執(zhí)行如下命令, 將當(dāng)期目錄下所有文件中內(nèi)容“-Werror”替換為“ ”。

sed -i 's/-Werror/ /g’`grep '\-Werror' -rl ./`