0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Pybulletサンプル解説】オブジェクトにテクスチャを適用【projective_texture.py】

Posted at

Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧はこちら)。


今回は、projective_texture.pyを解説します。(コードのリンクはこちら

(コメントアウトを外し)本コードを実行すると、指定したオブジェクトにテクスチャを適用可能です。

projective_texture.gif

使用している機能

本コードは、以下の機能を使用して「テクスチャの読み込み」「テクスチャの適用」を実現しています。

テクスチャの読み込み

loadTexture 関数を使用することで、テクスチャを読み込むことが可能です。

textureId = pybullet.loadTexture(textureFile)
  • textureId:テクスチャのID
  • textureFile:テクスチャのファイル(今回の場合、jpgファイルを読み込み)

テクスチャの適用

changeVisualShape 関数を使用することで、オブジェクトにテクスチャを指定することができます。

pybullet.changeVisualShape(objectUniqueId, linkIndex, textureUniqueId)
  • objectUniqueId:テクスチャを適用するオブジェクトのID
  • linkIndex:オブジェクトのリンクのインデックス(ベースリンクの場合、-1)
  • textureUniqueId:テクスチャのID

今回のサンプルコードの場合、該当箇所がコメントアウトされているため、実行したい場合はコメントを外してください。

# 指定したオブジェクトにテクスチャを適用
#p.changeVisualShape(objectUniqueId=0, linkIndex=-1, textureUniqueId=textureId)
#p.changeVisualShape(objectUniqueId=1, linkIndex=-1, textureUniqueId=textureId)

コメントをつけたサンプルコード

サンプルコードにコメントをつけたものが以下になります(もともとあった不要と思われるコメント等については削除しています)

import pybullet as p
from time import sleep
import matplotlib.pyplot as plt
import numpy as np
import pybullet_data

# GUIモードでPybulletを接続
physicsClient = p.connect(p.GUI)

# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())

# 重力を[0,0,0]に設定
p.setGravity(0, 0, 0)

# 床のオブジェクトの位置/姿勢を設定(なぜかbearと記載されている)
bearStartPos1 = [-3.3, 0, 0]
bearStartOrientation1 = p.getQuaternionFromEuler([0, 0, 0])

# 床のオブジェクトを生成
bearId1 = p.loadURDF("plane.urdf", bearStartPos1, bearStartOrientation1)

# クマのオブジェクトの位置/姿勢を設定
bearStartPos2 = [0, 0, 0]
bearStartOrientation2 = p.getQuaternionFromEuler([0, 0, 0])

# クマのオブジェクトを生成
bearId2 = p.loadURDF("teddy_large.urdf", bearStartPos2, bearStartOrientation2)

# テクスチャを読み込み
textureId = p.loadTexture("checker_grid.jpg")

# 指定したオブジェクトにテクスチャを適用
#p.changeVisualShape(objectUniqueId=0, linkIndex=-1, textureUniqueId=textureId)
#p.changeVisualShape(objectUniqueId=1, linkIndex=-1, textureUniqueId=textureId)

# リアルタイムシミュレーションモードに設定
useRealTimeSimulation = 1
if (useRealTimeSimulation):
  p.setRealTimeSimulation(1)

while 1:
  if (useRealTimeSimulation):

   # カメラデータを取得
    camera = p.getDebugVisualizerCamera()
    viewMat = camera[2]
    projMat = camera[3]

    # カメラ画像を取得
    p.getCameraImage(300,
                     300,
                     renderer=p.ER_BULLET_HARDWARE_OPENGL,
                     flags=p.ER_USE_PROJECTIVE_TEXTURE,
                     projectiveTextureView=viewMat,
                     projectiveTextureProj=projMat)
    
    # 重力を[0,0,0]に設定
    p.setGravity(0, 0, 0)
  else:
    p.stepSimulation()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?