Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在3D pyqtgraph实现中设置GLMeshItem的绝对位置_Python_Opengl_Pyqtgraph - Fatal编程技术网

Python 如何在3D pyqtgraph实现中设置GLMeshItem的绝对位置

Python 如何在3D pyqtgraph实现中设置GLMeshItem的绝对位置,python,opengl,pyqtgraph,Python,Opengl,Pyqtgraph,我正在为一些数据构建一个可视化工具,并希望使用pyqtgraphs 3D OpenGL组件中绘制的3D球体来表示所提供数据中标识的目标 我可以使用GLMeshItem.translate()命令生成球体并移动它们,但是如果不首先通过调用.transform()获取所述球体的当前位置,我无法找到设置球体坐标的便捷方法然后从它的当前位置生成一个translate命令到我希望它移动到的新绝对坐标。这可能是实现这一点的唯一方法,我只是怀疑有一个更直接的设置网格项目绝对坐标,我似乎无法识别 下面的代码显示

我正在为一些数据构建一个可视化工具,并希望使用pyqtgraphs 3D OpenGL组件中绘制的3D球体来表示所提供数据中标识的目标

我可以使用
GLMeshItem.translate()
命令生成球体并移动它们,但是如果不首先通过调用.transform()获取所述球体的当前位置,我无法找到设置球体坐标的便捷方法然后从它的当前位置生成一个translate命令到我希望它移动到的新绝对坐标。这可能是实现这一点的唯一方法,我只是怀疑有一个更直接的设置网格项目绝对坐标,我似乎无法识别

下面的代码显示了我正在执行的操作的基本框架,以及我正在使用的移动球体的当前方法


从pyqtgraph.Qt导入QtCore、QtGui
将pyqtgraph作为pg导入
将pyqtgraph.opengl作为gl导入
将numpy作为np导入
app=QtGui.QApplication([])
w=gl.GLViewWidget()
w、 显示最大化()
w、 setWindowTitle('pyqtgraph示例:GLMeshItem')
w、 设置摄像机位置(距离=40)
g=gl.GLGridItem()
g、 比例尺(2,2,1)
w、 附加项(g)
verts=np.array([
[0, 0, 0],
[2, 0, 0],
[1, 2, 0],
[1, 1, 1],
])
faces=np.array([
[0, 1, 2],
[0, 1, 3],
[0, 2, 3],
[1, 2, 3]
])
colors=np.array([
[1, 0, 0, 0.3],
[0, 1, 0, 0.3],
[0, 0, 1, 0.3],
[1, 1, 0, 0.3]
])
md=gl.MeshData.sphere(行=4,列=4)
colors=np.ones((md.faceCount(),4),dtype=float)
颜色[::2,0]=0
colors[:,1]=np.linspace(0,1,colors.shape[0])
md.SetFaceColor(颜色)
m3=gl.GLMeshItem(meshdata=md,smooth=False)#,着色器='balloon')
w、 附加项(m3)
目标=gl.MeshData.sphere(4,4,10)
targetMI=gl.GLMeshItem(meshdata=target,drawFaces=True,smooth=False)
w、 附加项(targetMI)
而(一):
targetMI.translate(0.1,0,0)
app.processEvents()
##启动Qt事件循环,除非在交互模式下运行。
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
导入系统
如果(sys.flags.interactive!=1)或不是hasattr(QtCore,'PYQT_VERSION'):
QtGui.QApplication.instance()

从这个例子中可以看出。“平移”在相对于当前位置移动时效果良好。我只是想知道是否有一种方法可以在
GLMeshItem
上进行绝对位置移动(在本例中为
targetMI
)这样,我就可以使它移动到一个坐标,而不必首先获得变换,然后计算移动到所需坐标所需的变换。

一个选项是,在通过
translate()
设置绝对位置之前,将项的变换重置为变换。e、 g:

targetMI.resetTransform()
targetMI.translate(10,0,0)

这完美地解决了问题,而且很有意义。感谢您提供的解决方案以及描述底层主体的链接。干杯