尝试交互 Ursina 和 PyVista 时出现 OpenGL 错误 [重复]

OpenGL error while trying to interact Ursina and PyVista [duplicate]

提问人:Sonarjit 提问时间:8/18/2023 最后编辑:Rabbid76Sonarjit 更新时间:8/21/2023 访问量:70

问:

好吧,我对 OpenGL 知之甚少。请帮助我了解为什么会出现错误以及解决错误的可能方法。

这是我的代码:

from ursina import *
import pyvista as pv
from pyvista import examples

# Starting an ursina app
app = Ursina()
# Define a parent entity of ursina
prnt = Entity()

# Defne a button entity which calls the method pyvista_display on click
Button("click", parent=prnt, scale=1, on_click=lambda: pyvista_display())


def pyvista_display():  # Method to display a simple pyvista mesh
    # Load an interesting example of geometry
    mesh = examples.load_random_hills()

    # Establish geometry within a pv.Plotter()
    p = pv.Plotter()
    # Add mesh to the plotter
    p.add_mesh(mesh, color=True)
    # Show the plotter
    p.show()

    p.close()


# Run ursina app
app.run()

模块说明:

  • 模块导入 ursina、pyvista 和 pyvista 示例包
  • 我运行一个 ursina 应用程序。在应用程序中,只有一个带有标签“click”的功能按钮
  • 当我单击按钮时,调用函数 pyvista_display()。
  • 函数 pyvista_display() simple 打开一个 pyvista 窗口并显示来自内置 pyvista 示例包(我在上面导入)的网格

显示力矩时出错:到目前为止,代码运行良好。我单击“单击”按钮,pyvista窗口将显示并显示简单的示例网格。 当我关闭pyvista窗口时出现问题。当我关闭pyvista窗口时,我的终端上显示以下错误消息。消息在无限循环中显示,就像我们在无限制的循环中打印一些东西一样。

错误

:d isplay:gsg:glgsg(error):GL 错误 0x502:无效操作

来自 ChatGPT 的错误消息含义

错误消息 :d isplay:gsg:glgsg(error): GL error 0x502 : invalid operation 是一个 OpenGL 错误消息,指示在 OpenGL 上下文中尝试了无效操作。错误代码0x502对应于 OpenGL 常量GL_INVALID_OPERATION。

期望:

  • 预计会正确关闭 pyvista 窗口并继续运行应用程序而不会出现任何错误。
  • 就像我关闭pyvista窗口后一样,带有“单击”按钮的ursina窗口仍然继续运行。当我再次单击“单击”窗口时,pyvista窗口再次出现

请求:正如我上面已经提到的,我对OpenGL知之甚少,如果你发现错误并解决了我的问题,那将是我的福气。或者,如果您为我提供另一种方式来达到期望,我愿意听取您的建议。

蟒蛇 ursina pyvista

评论


答:

-1赞 Sonarjit 8/18/2023 #1

具有多线程的替代解决方案

我期待在 ursina 窗口本身中显示 pyvista 网格。我无法实现确切的期望,但我提出了一个替代解决方案。

替代解决方案通过pyvista窗口的创造性单独线程执行。当我单击ursina窗口中的“单击”按钮时,它会触发start_pyvista_thread()方法。此方法在启动时创建针对 pyvista_display() 方法的 pyvista 线程。pyvista_display() 包含显示 pyvista 网格的必要代码。因此,该代码创建了单独的 pyvista 窗口并显示 pyvista 网格。

就是这样!使用线程概念的简单执行。

from ursina import *
import threading
import pyvista as pv
from pyvista import examples

# Define the Ursina app
app = Ursina()

# Define a parent entity for Ursina
prnt = Entity()

# Method to display a simple PyVista mesh


def pyvista_display():
    # Load an interesting example of geometry
    mesh = examples.load_random_hills()

    # Establish geometry within a pv.Plotter()
    p = pv.Plotter()
    # Add mesh to the plotter
    p.add_mesh(mesh, color=True)
    # Show the plotter
    p.show()

# Method to start a new PyVista thread
def start_pyvista_thread():
    # Create a thread for PyVista rendering
    pyvista_thread = threading.Thread(target=pyvista_display)
    pyvista_thread.start()


# Define a button entity that starts a new PyVista thread on click
Button("click", parent=prnt, scale=1, on_click=start_pyvista_thread)

# Run the Ursina app
app.run()

评论

1赞 Community 8/20/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。