お疲れ様です。秋並です。
Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。
今回は、getTextureUid.pyを解説します。(コードのリンクはこちら)
本コードを実行すると、
使用している機能
本コードは、以下の機能を使用して「指定したオブジェクトのテクスチャのIDの取得」を実現しています。
指定したオブジェクトのテクスチャのIDの取得
getVisualShapeData
関数を使用することで、指定したオブジェクトの視覚情報を取得できます。
visualData = pybullet.getVisualShapeData(objectId, p.VISUAL_SHAPE_DATA_TEXTURE_UNIQUE_IDS)
-
visualData
:オブジェクトの視覚情報 -
objectId
:オブジェクトのID -
VISUAL_SHAPE_DATA_TEXTURE_UNIQUE_IDS
:テクスチャのIDも取得するフラグ
上記の「視覚情報visualDara
」の[0][8]を指定すると、オブジェクトのテクスチャのIDを取得できます。
textureId = visualData[0][8]
コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)
import pybullet as p
import pybullet_data
# PybulletをGUIモードで接続
p.connect(p.GUI)
# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())
# 床のオブジェクトを生成
plane = p.loadURDF("plane.urdf")
# 床のオブジェクトの視覚情報を取得
visualData = p.getVisualShapeData(plane, p.VISUAL_SHAPE_DATA_TEXTURE_UNIQUE_IDS)
print(visualData)
# 床のオブジェクトのテクスチャのIDを取得
curTexUid = visualData[0][8]
print(curTexUid)
# pngファイルからテクスチャのIDを取得
texUid = p.loadTexture("tex256.png")
print("texUid=", texUid)
# 床のオブジェクトにpngファイルから取得したテクスチャを適用
p.changeVisualShape(plane, -1, textureUniqueId=texUid)
# カメラ画像を取得
for i in range(100):
p.getCameraImage(320, 200)
# 床のオブジェクトをもとのテクスチャに戻す
p.changeVisualShape(plane, -1, textureUniqueId=curTexUid)
# カメラ画像を取得
for i in range(100):
p.getCameraImage(320, 200)