1、resetDebugVisualizerCamera
我们要用到resetDebugVisualizerCamera
这个api。您可以设置3D OpenGL调试可视化程序相机距离(在眼睛和相机目标位置之间),相机偏航和俯仰
以及相机目标位置。它的参数如下:
需要 | cameraDistance | float | 眼睛到相机目标位置的距离 |
---|---|---|---|
需要 | cameraYaw | float | 相机偏航角(度)左/右 |
需要 | cameraPitch | float | 相机俯仰角(度)上/下 |
需要 | cameraTargetPosition | vec3 | cameraTargetPosition是相机焦点 |
可选的 | physicsClientId | int | 如果您连接到多台服务器,则可以选择一台 |
示例:
pybullet.resetDebugVisualizerCamera(cameraDistance = 3,cameraYaw = 30,cameraPitch = 52,cameraTargetPosition = [0,0,0])
2、原理
如图,根据几何关系我们有以下结论:
因此,我们可以给定角速度 ,计算相机位置[x, y],让其实现指定半径的圆周运动。然后根据与x轴的夹角调整相机角度。根据几何关系我们可以知道 。
3、程序
思路:
- 导入相关库
- 连接物理引擎
- 设置文件路径
- 主循环,更新相加位置
import pybullet as p
import pybullet_data as pd
import numpy as np
p.connect(p.GUI)
p.setAdditionalSearchPath(pd.getDataPath())
plane = p.loadURDF("plane.urdf")
roll = 0
radius = 1
speed = 0.001
while 1:
# 当完成一个周期后roll值归0,避免数值过大
if roll > 360:
roll = 0
roll += speed
# 根据起始位置不同需要调整相位,这里是[1, 0],注意单位转换
x = radius*np.cos(roll * np.pi / 180)
y = radius*np.sin(roll * np.pi / 180)
# 设置相机位置
p.resetDebugVisualizerCamera(radius, roll+90, -30, [x, y, 1])
p.stepSimulation()
效果: