我正在使用PyQtGraph绘制网格曲面。我希望看到关闭透视的3D世界。
这在pyQtGraph中是否可行?我搜索了文档和谷歌组,但找不到任何参考。我认为原则上可以使用openGL,所以有没有办法在pyQtGraph中打开/关闭这个和控制透视图?
答案 0 :(得分:2)
确定。这是代码。
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.setBackgroundColor('k')
# Switch to 'nearly' orthographic projection.
w.opts['distance'] = 2000
w.opts['fov'] = 1
# set-up title grid etc...
w.setWindowTitle('pyqtgraph example')
g = gl.GLGridItem(color='w')
w.addItem(g)
# insert draw commands here.
w.show()
## Start Qt event loop
QtGui.QApplication.instance().exec_()
答案 1 :(得分:0)
对文档进行粗略检查没有任何帮助......但是如果在减小视野(FOV)的同时增加距离,则可以在改变这两个参数时将正交投影逼近任意精度
答案 2 :(得分:0)
我建议尝试更新的vispy;它在支持的相机类型和鼠标交互方面更加灵活。特别是,正交投影恰好是'arcball'相机类型的默认设置,也可能是其他类型的默认设置;通过将camera.fov设置为0来设置它。
作为奖励,ipython的人体工程学也得到了很大改善,即你的ipython shell在场景活动的同时保持响应,你可以杀死场景而不杀死你的ipython实例,然后启动另一个。
答案 3 :(得分:0)
已经有一段时间了,但我最近也在寻找同样的东西,想给出一个不同的解决方案。
PyQtGraph 不直接公开这一点,但可以通过继承 GLViewWidget
并覆盖 projectionMatrix
方法来实现(参见 GLViewWidget source 和 qt docs for QMatrix4x4)。
例如,以下将投影默认设置为“ortho”,并提供切换到透视(视锥体)投影的选项:
def projectionMatrix(self, region=None, projection='ortho'):
assert projection in ['ortho', 'frustum']
if region is None:
dpr = self.devicePixelRatio()
region = (0, 0, self.width() * dpr, self.height() * dpr)
x0, y0, w, h = self.getViewport()
dist = self.opts['distance']
fov = self.opts['fov']
nearClip = dist * 0.001
farClip = dist * 1000.
r = nearClip * np.tan(fov * 0.5 * np.pi / 180.)
t = r * h / w
## Note that X0 and width in these equations must be the values used in viewport
left = r * ((region[0] - x0) * (2.0 / w) - 1)
right = r * ((region[0] + region[2] - x0) * (2.0 / w) - 1)
bottom = t * ((region[1] - y0) * (2.0 / h) - 1)
top = t * ((region[1] + region[3] - y0) * (2.0 / h) - 1)
tr = QtGui.QMatrix4x4()
if projection == 'ortho':
tr.ortho(left, right, bottom, top, nearClip, farClip)
elif projection == 'frustum':
tr.frustum(left, right, bottom, top, nearClip, farClip)
return tr