我正在开发应用软件,在这个软件中我可以渲染三维图形,然后操纵它们,例如,我画了一个立方体,然后我想通过在三维世界中拖动它的顶点来改变立方体的形状。在
{a1}
在进入PythonOCC之前,我试图在OpenGL中做同样的事情,但在OpenGL中,我做不到。在
在OpenGL中,我无法通过屏幕视口的2D坐标精确地获得3D世界的3D坐标。在
后来我发现了一个PythonOCC库,在这个库中很容易通过鼠标光标的二维坐标来获得三维坐标。所以在PythonOCC中,我要做的就是改变立方体的形状,我在跟踪鼠标光标,在mouseMoveEvent上,我把鼠标坐标转换成三维坐标,改变立方体一个顶点的坐标,然后用一组新的顶点坐标来绘制这个立方体。在
但是我不能删除以前的立方体,或者你可以说我不能同时清除屏幕。
我在pythonOCC中尝试过一种方法_display.eraseAll()
,但这对我不起作用。在
我怎么才能做到呢?但是你可以在我的qti库中显示任何一个目标。在
下面是我在pythonOCC中实现目标的代码
from __future__ import print_function
import random
import sys
from OCC.Display.backend import load_any_qt_backend, get_qt_modules
load_any_qt_backend()
QtCore, QtGui, QtWidgets, QtOpenGL = get_qt_modules()
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox
# Code this Below
from QtDisplay import qtViewer3d
class AppFrame(QtWidgets.QMainWindow):
def __init__(self, *args):
QtWidgets.QMainWindow.__init__(self, *args)
self.setWindowTitle(self.tr("qtDisplay3d overpainting example"))
self.canva = qtViewer3d(self)
self.canva.InitDriver()
self.resize(600, 500)
self.setCentralWidget(self.canva)
if sys.platform != 'darwin':
self.menu_bar = self.menuBar()
else:
self.menu_bar = QtWidgets.QMenuBar()
self._menus = {}
self._menu_methods = {}
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
frame = AppFrame()
frame.show()
frame.canva.InitDriver()
display = frame.canva._display
frame.canva.InitDriver()
frame.canva.qApp = app
frame.raise_()
app.exec_()
在QtDisplay.pymouse-novic的mouse-novic被稍微修改了一下。在
^{pr2}$https://www.khanacademy.org/computer-programming/interactive-3d-cube/6436122472742912
目前没有回答
相关问题 更多 >
编程相关推荐