首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >三维比例尺实现中如何设置GLMeshItem的绝对位置

三维比例尺实现中如何设置GLMeshItem的绝对位置
EN

Stack Overflow用户
提问于 2019-10-23 22:17:38
回答 1查看 1.1K关注 0票数 1

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

我能够生成球并使用GLMeshItem.translate()命令移动它们,但是,如果不首先通过调用.transform()获得所述球的当前位置,然后从它的当前位置生成一个转换命令到我希望将其移动到的新的绝对坐标,我就无法找到一种方便的方法来设置球面的坐标。这可能是唯一的方法来完成这一点,我只是怀疑有一个更直接的设置网格项目绝对坐标,我只是似乎无法确定。

下面的代码展示了我正在做的事情的基本框架,以及当前用于移动球体的方法。

代码语言:javascript
运行
复制
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import numpy as np

app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.showMaximized()
w.setWindowTitle('pyqtgraph example: GLMeshItem')
w.setCameraPosition(distance=40)

g = gl.GLGridItem()
g.scale(2,2,1)
w.addItem(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(rows=4, cols=4)

colors = np.ones((md.faceCount(), 4), dtype=float)
colors[::2,0] = 0
colors[:,1] = np.linspace(0, 1, colors.shape[0])
md.setFaceColors(colors)
m3 = gl.GLMeshItem(meshdata=md, smooth=False)#, shader='balloon')
w.addItem(m3)

target = gl.MeshData.sphere(4,4,10)
targetMI = gl.GLMeshItem(meshdata = target, drawFaces = True,smooth = False)
w.addItem(targetMI)
while(1):
    targetMI.translate(0.1,0,0)
    app.processEvents()



## Start Qt event loop unless running in interactive mode.
if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

如本例所示。对于相对于当前位置的移动来说,翻译工作很好。我只是好奇是否有一种方法可以在GLMeshItem上进行绝对位置移动(在本例中是targetMI),这样我就可以使它移动到一个坐标,而无需首先得到转换,然后计算移动到所需坐标所需的转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-24 15:22:33

一个选项是在按身份设置绝对位置之前,通过resetTransform()将项的转换重置为translate()转换。例如:

代码语言:javascript
运行
复制
targetMI.resetTransform()
targetMI.translate(10, 0, 0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58531651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档