Home › Forum › SOFA › Programming with SOFA › Sofa Gui with SofaPython3
Tagged: 2012_beta, 64_bits, GUI, Linux_ubuntu, Plugin_other, SOFA_other, SofaPython3
- This topic has 24 replies, 5 voices, and was last updated 3 years, 3 months ago by Hugo.
-
AuthorPosts
-
29 December 2020 at 17:33 #18086ArthurBlocked
Hello,
I am trying to automatically record videos of simulations that I start and stop with SofaPython3. Either with Sofa.Gui, or another way?
I have not been able to get Sofa.Gui to work, right now the error I see when I run SofaGui.py (in examples of SofaPython3) is:
(base) sofauser@carbon:/builds/plugins/SofaPython3/examples$ python SofaGui.py Supported GUIs are batch,qglviewer,qt libGL error: failed to open /dev/dri/card0: Permission denied libGL error: failed to load driver: nouveau [ERROR] [ObjectFactory::addAlias()] Target class for alias 'OglModel' not found: VisualModel [WARNING] [RealGUI] Global Bounding Box seems very small; Your viewer settings (based on the bbox) are likely invalid, switching to default value of [-1,-1,-1,1,1,1].This is caused by using component which does not implement properly the updateBBox function.You can remove this warning by manually forcing a value in the parameter bbox="minX minY minZ maxX maxY maxZ" in your root node [ERROR] [PythonScript] RuntimeError: basic_string::_M_construct null not valid File "SofaGui.py", line 19, in <module> Sofa.Gui.GUIManager.createGUI(root) [WARNING] [SofaSimulationTree] the library has not been cleaned up (sofa::simulation::tree::cleanup() has never been called, see sofa/helper/init.h) [WARNING] [SofaSimulationGraph] the library has not been cleaned up (sofa::simulation::graph::cleanup() has never been called, see sofa/helper/init.h) [WARNING] [SofaSimulationCommon] the library has not been cleaned up (sofa::simulation::common::cleanup() has never been called, see sofa/helper/init.h) [WARNING] [SofaSimulationCore] the library has not been cleaned up (sofa::simulation::core::cleanup() has never been called, see sofa/helper/init.h) [WARNING] [SofaCore] the library has not been cleaned up (sofa::core::cleanup() has never been called, see sofa/helper/init.h) [WARNING] [SofaDefaultType] the library has not been cleaned up (sofa::defaulttype::cleanup() has never been called, see sofa/helper/init.h) [WARNING] [SofaHelper] the library has not been cleaned up (sofa::helper::cleanup() has never been called, see sofa/helper/init.h) (base) sofauser@carbon:/builds/plugins/SofaPython3/examples$
My build details can be found here:
https://github.com/ripl-ttic/SofaFramework-Docker/blob/python3/DockerfileTo recreate this error, do ./build.sh, ./launch-docker.sh, and then once in the container: cd /builds/plugins/SofaPython3/examples, python SofaGui.py
30 December 2020 at 14:50 #18091jnbrunetModeratorHey @amackeith,
Are you able to launch runSofa? Or any GUI application using OpenGL?
> libGL error: failed to open /dev/dri/card0: Permission denied
> libGL error: failed to load driver: nouveauThe error you are having here looks more to me as a driver problem than SOFA…
J-N
30 December 2020 at 19:00 #18092ArthurBlockedHi @jnbrunet,
Thanks for your response!
Using runSofa works fine (the gui loads and I can run the scene). It even has the same libGL error when it is working.
This is the terminal output from (working) runSofa:
(base) sofauser@carbon:/pkgs/dl/examples/sofa_start$ runSofa [INFO] [runSofa] PluginRepository paths = /builds/build/master/lib:/builds/build/master/plugins [INFO] [runSofa] DataRepository paths = /builds/src/share:/builds/src/examples [INFO] [runSofa] GuiDataRepository paths = /builds/src/applications/projects/runSofa/resources:/builds/src/modules/SofaGuiQt/src/sofa/gui/qt/resources Created directory: /builds/build/master//config Created directory: /builds/build/master//screenshots [INFO] [runSofa] Loading automatically plugin list in /builds/build/master/lib/plugin_list.conf [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralVisual.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGraphComponent.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralMeshCollision.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaBoundaryCondition.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralAnimationLoop.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralDeformable.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralEngine.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralExplicitOdeSolver.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralImplicitOdeSolver.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralLinearSolver.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralRigid.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralObjectInteraction.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralSimpleFem.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralTopology.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaTopologyMapping.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaUserInteraction.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaConstraint.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaGeneralLoader.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaSparseSolver.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaPreconditioner.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaHaptics.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaValidation.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaDenseSolver.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaNonUniformFem.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaOpenglVisual.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscTopology.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscExtra.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscForceField.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscEngine.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscSolver.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscFem.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscMapping.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaExporter.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libCImgPlugin.so [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaMiscCollision.so [INFO] [SofaPython3] Initializing with python version 3.7.4 (default, Aug 13 2019, 20:39:44) [GCC 7.3.0] [INFO] [SofaPython3] Registering a scene loader for [.py, .py3, .pyscn, .py3scn] files. [INFO] [SofaPython3] Shared library name is 'libpython3.7m.so' [INFO] [SofaPython3] Intializing python [INFO] [SofaPython3] Added '/builds/build/master/python3/site-packages' to sys.path [INFO] [SofaPython3] Added '/builds/src/applications/plugins/SofaTest/python' to sys.path [INFO] [SofaPython3] Added '/builds/build/master/lib/python3/site-packages' to sys.path [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaPython3.so [INFO] [GUIManager] INFO(SofaGUI): lastUsedGUI.ini not found; using default GUI. libGL error: failed to open /dev/dri/card0: Permission denied libGL error: failed to load driver: nouveau Warning: Setting a new default format with a different version or profile after the global shared context is created may cause issues with context sharing. The constructor with a QGLFormat is deprecated, use the regular contructor instead. [INFO] [SceneCheckerVisitor] Validating node "root" with checks: [SceneCheckDuplicatedName, SceneCheckMissingRequiredPlugin, SceneCheckUsingAlias] [INFO] [SceneCheckerVisitor] Finished validating node "root". (base) sofauser@carbon:/pkgs/dl/examples/sofa_start$
30 December 2020 at 20:36 #18093jnbrunetModeratorHey @amackeith,
Alright, I’ve missed the error on the ‘OglModel’ component.
Can you try adding the following at the beginning of your script:
import SofaRuntime SofaRuntime.importPlugin('SofaOpenglVisual')
J-N
30 December 2020 at 23:36 #18094ArthurBlockedHi @jnbrunet,
This is the exact script I’m using, I’ve added the two lines you suggested to this file: https://github.com/sofa-framework/SofaPython3/blob/master/examples/SofaGui.py
So it looks like this:
import Sofa import Sofa.Core import Sofa.Simulation import Sofa.Gui import SofaRuntime SofaRuntime.importPlugin('SofaOpenglVisual') print ("Supported GUIs are " + Sofa.Gui.GUIManager.ListSupportedGUI(",")) root = Sofa.Core.Node("root") # Create the rest of the scene here... # Initialize all components found in the scene Sofa.Simulation.init(root) # Launch the GUI Sofa.Gui.GUIManager.Init("simple_scene", "qt") Sofa.Gui.GUIManager.createGUI(root) Sofa.Gui.GUIManager.MainLoop(root) Sofa.Gui.GUIManager.closeGUI()
I still get the original error though (though with fewer warnings):
(base) sofauser@carbon:/builds/plugins/SofaPython3/examples$ python SofaGui.py [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaOpenglVisual.so Supported GUIs are batch,qglviewer,qt libGL error: failed to open /dev/dri/card0: Permission denied libGL error: failed to load driver: nouveau [WARNING] [RealGUI] Global Bounding Box seems very small; Your viewer settings (based on the bbox) are likely invalid, switching to default value of [-1,-1,-1,1,1,1].This is caused by using component which does not implement properly the updateBBox function.You can remove this warning by manually forcing a value in the parameter bbox="minX minY minZ maxX maxY maxZ" in your root node [ERROR] [SofaRuntime] RuntimeError: basic_string::_M_construct null not valid Traceback (most recent call last): File "SofaGui.py", line 24, in <module> Sofa.Gui.GUIManager.createGUI(root) [WARNING] [SofaSimulationTree] the library has not been cleaned up (sofa::simulation::tree::cleanup() has never been called, see sofa/helper/init.h) (base) sofauser@carbon:/builds/plugins/SofaPython3/examples$
31 December 2020 at 12:32 #18095jnbrunetModeratorHey @amackeith,
Crap, I think I know what’s going on. This is a bug on SOFA’s API side. Can you try swapping the following line:
Sofa.Gui.GUIManager.createGUI(root)
for
Sofa.Gui.GUIManager.createGUI(root, __file__)
We should fix this before the next release, I’ll create an issue on Github.
Let me know if it worked.
J-N31 December 2020 at 18:58 #18096ArthurBlockedHi @jnbrunet,
The edit you suggested successfully opens a Gui!
However, once I try to add something to the scene I get the
[ERROR] [SofaRuntime] RuntimeError: basic_string::_M_construct null not valid
error again:This is my code now:
import Sofa import Sofa.Core import Sofa.Simulation import Sofa.Gui import SofaRuntime SofaRuntime.importPlugin('SofaOpenglVisual') print ("Supported GUIs are " + Sofa.Gui.GUIManager.ListSupportedGUI(",")) root = Sofa.Core.Node("root") # Create the rest of the scene here... def Sphere(rootNode, name, position, color): #Creating the sphere sphere = rootNode.addChild(name) sphere.addObject('MechanicalObject', name="mstate", template="Rigid3", position=position) #### Visualization of the sphere sphereVisu = sphere.addChild("VisualModel") sphereVisu.loader = sphereVisu.addObject('MeshObjLoader', name="loader", filename="mesh/ball.obj", scale=0.5) sphereVisu.addObject('OglModel', name="model", src="@loader", color=color) sphereVisu.addObject('RigidMapping') return sphere Sphere(root, "hi", "0 0 0", None) # Initialize all components found in the scene Sofa.Simulation.init(root) # Launch the GUI Sofa.Gui.GUIManager.Init("simple_scene", "qt") Sofa.Gui.GUIManager.createGUI(root, __file__) Sofa.Gui.GUIManager.MainLoop(root) Sofa.Gui.GUIManager.closeGUI()
This is my output:
(base) sofauser@carbon:~/workdir/simple_control_policy$ python gui_sofa.py [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaOpenglVisual.so Supported GUIs are batch,qglviewer,qt libGL error: failed to open /dev/dri/card0: Permission denied libGL error: failed to load driver: nouveau [WARNING] [RealGUI] Global Bounding Box seems very small; Your viewer settings (based on the bbox) are likely invalid, switching to default value of [-1,-1,-1,1,1,1].This is caused by using component which does not implement properly the updateBBox function.You can remove this warning by manually forcing a value in the parameter bbox="minX minY minZ maxX maxY maxZ" in your root node QtViewer: OpenGL 3.3 (Core Profile) Mesa 20.0.8 context created. [WARNING] [SofaViewer] Could not create file '/builds/src/share/textures/SOFA_logo.bmp' Valid extensions: dds [WARNING] [SofaSimulationTree] the library has not been cleaned up (sofa::simulation::tree::cleanup() has never been called, see sofa/helper/init.h) (base) sofauser@carbon:~/workdir/simple_control_policy$ python gui_sofa.py [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaOpenglVisual.so Supported GUIs are batch,qglviewer,qt libGL error: failed to open /dev/dri/card0: Permission denied libGL error: failed to load driver: nouveau QtViewer: OpenGL 3.3 (Core Profile) Mesa 20.0.8 context created. [WARNING] [SofaViewer] Could not create file '/builds/src/share/textures/SOFA_logo.bmp' Valid extensions: dds [ERROR] [SofaRuntime] RuntimeError: basic_string::_M_construct null not valid Traceback (most recent call last): File "gui_sofa.py", line 34, in <module> Sofa.Gui.GUIManager.createGUI(root, __file__) [WARNING] [SofaSimulationTree] the library has not been cleaned up (sofa::simulation::tree::cleanup() has never been called, see sofa/helper/init.h) (base) sofauser@carbon:~/workdir/simple_control_policy$
And this is my output without trying to add the sphere which opens the gui successfully.
(base) sofauser@carbon:~/workdir/simple_control_policy$ python gui_sofa.py [INFO] [PluginManager] Loaded plugin: /builds/build/master/lib/libSofaOpenglVisual.so Supported GUIs are batch,qglviewer,qt libGL error: failed to open /dev/dri/card0: Permission denied libGL error: failed to load driver: nouveau [WARNING] [RealGUI] Global Bounding Box seems very small; Your viewer settings (based on the bbox) are likely invalid, switching to default value of [-1,-1,-1,1,1,1].This is caused by using component which does not implement properly the updateBBox function.You can remove this warning by manually forcing a value in the parameter bbox="minX minY minZ maxX maxY maxZ" in your root node QtViewer: OpenGL 3.3 (Core Profile) Mesa 20.0.8 context created. [WARNING] [SofaViewer] Could not create file '/builds/src/share/textures/SOFA_logo.bmp' Valid extensions: dds
1 January 2021 at 16:17 #18097jnbrunetModeratorHey @amackeith,
My guess would be that this is caused by the OglModel, and probably related to the driver error you are having. The “Qt” viewer of SOFA is quite old and sensible to the OpenGL extensions available.
Could you try using the qglviewer instead of the Qt one? Simply change
Sofa.Gui.GUIManager.Init("simple_scene", "qt")
to
Sofa.Gui.GUIManager.Init("simple_scene", "qglviewer")
Note:
@scheikl has seen your post here and suggested the following for your driver problem (he had some problem replying directly here, spam filter issue):could you check whether your user is part of the video group?
(is video in the output of $ groups?)If not, that would explain the Permission denied part.
I never quite understood when this is necessary, and when not.
On my system, for example, it works without the video group :D.You can add your user to the group with
$ sudo usermod -a -G video sofauser
Might not work, but it is worth a try.
This might fix the issue using the “qt” viewer.
J-N
8 January 2021 at 02:21 #18130ArthurBlockedHi @jnbrunet,
That has got the GUI working! (EDIT: specifically the change to qglviewer fixed it)
However, I am trying to use this to view a simulation that is controlled by another python script, which steps the animation forward using the “Sofa.Simulation.animate” function. However when I try to use that with the gui, use of that function and “Sofa.Gui.GUIManager.MainLoop” seem to be mutually exclusive. Is this the case?
If so, is there a way to use the gui or record screenshots at every time step without needing to use MainLoop?
8 January 2021 at 09:37 #18134jnbrunetModerator8 January 2021 at 17:57 #18161ArthurBlockedHi @jnbrunet,
I believe that example is out of date with SofaPython3. I was able to find a solution though. It still requires a display — so unless there is a way to set the QApplication display to offscreen in sofapython3, it is still not ideal for running on a server. That said this is my solution:
# encoding: utf-8 # !/usr/bin/python3 import Sofa import SofaRuntime import Sofa.Gui class scene_interface: """Scene_interface provides step and reset methods""" def __init__(self, dt=0.01, max_steps=300): self.dt = dt # max_steps, how long the simulator should run. Total length: dt*max_steps self.max_steps = max_steps # root node in the simulator self.root = None # the current step in the simulation self.current_step = 0 # Register all the common component in the factory. SofaRuntime.importPlugin('SofaOpenglVisual') SofaRuntime.importPlugin("SofaComponentAll") self.root = Sofa.Core.Node("myroot") ### create some objects to observe self.place_objects_in_scene(self.root) # place light and a camera self.root.addObject("LightManager") self.root.addObject("SpotLight", position=[0,10,0], direction=[0,-1,0]) self.root.addObject("InteractiveCamera", name="camera", position=[0,10, 0], lookAt=[0,0,0], distance=37, fieldOfView=45, zNear=0.63, zFar=55.69) # start the simulator Sofa.Simulation.init(self.root) # start the gui Sofa.Gui.GUIManager.Init("Recorded_Episode", "qt") Sofa.Gui.GUIManager.createGUI(self.root, __file__) def place_objects_in_scene(self, root): ### these are just some things that stay still and move around # so you know the animation is actually happening root.gravity = [0, -1., 0] root.addObject("VisualStyle", displayFlags="showWireframe showBehaviorModels showAll") root.addObject("MeshGmshLoader", name="meshLoaderCoarse", filename="mesh/liver.msh") root.addObject("MeshObjLoader", name="meshLoaderFine", filename="mesh/liver-smooth.obj") root.addObject("EulerImplicitSolver") root.addObject("CGLinearSolver", iterations="200", tolerance="1e-09", threshold="1e-09") liver = root.addChild("liver") liver.addObject("TetrahedronSetTopologyContainer", name="topo", src="@../meshLoaderCoarse" ) liver.addObject("TetrahedronSetGeometryAlgorithms", template="Vec3d", name="GeomAlgo") liver.addObject("MechanicalObject", template="Vec3d", name="MechanicalModel", showObject="1", showObjectScale="3") liver.addObject("TetrahedronFEMForceField", name="fem", youngModulus="1000", poissonRatio="0.4", method="large") liver.addObject("MeshMatrixMass", massDensity="1") liver.addObject("FixedConstraint", indices="2 3 50") def step(self): # step through time # this steps the simulation Sofa.Simulation.animate(self.root, self.dt) # just to keep track of where we are self.current_step += 1 ### A better example would also show how to read and edit values through scripts # which would likely be useful if you are running without a normal gui # return true if done return self.current_step >= self.max_steps # save a screenshot from the position of where we set the camera above def record_frame(self, filename): Sofa.Gui.GUIManager.SaveScreenshot(filename) def main(): a = scene_interface() done = False while not done: factor = a.current_step done = a.step() a.record_frame(str(factor) + ".png") if __name__ == '__main__': main()
14 January 2021 at 13:50 #18222jnbrunetModeratorHey Arthur,
Thanks for sharing your solution !
I agree that it is probably not the best for headless simulation. Some time ago, I made a fully OffscreenCamera that was able to render the SOFA scene into a QtOffscreenSurface. I will try to dig up this old code and bring it back to life. I’ll update this post when it is done.
J-N
30 June 2021 at 16:01 #19906AnthonyBlockedHi @jnbrunet, i am trying to do the exact same thing for headless simulation. Have you able to dig up the code?
30 June 2021 at 19:54 #19907jnbrunetModerator12 July 2021 at 12:27 #20008AnthonyBlockedHi @jnbrunet
Thanks for the code, I managed to get it working. However, the screenshots from the simulation is of low quality, i tried changing the parameters of the camera but could not improve the output. I would be grateful if you could take a quick look at the code and give me some pointers ? the link below contains the pyscn code and the output mp4 simulation.
https://github.com/AnthonyLe93/SofaSoftRobot_TAS12 July 2021 at 16:20 #20009jnbrunetModeratorHum I’m not sure what’s going on by looking at your mp4. Can you share the mesh files so that I try it?
12 July 2021 at 16:43 #20010AnthonyBlockedHi @jnbrunet
I have uploaded the mesh files used in the pyscn. Many thanks in advance for looking at this.
https://github.com/AnthonyLe93/SofaSoftRobot_TAS13 July 2021 at 14:38 #20015jnbrunetModeratorHum I tried to run your scene but I’m not sure what point of view you need for the offscreen camera. Can you launch your scene with
runSofa -g qt
(using theqt
GUI of SOFA), then position your view to the one you want for the offscreen camera, and hit the “Save View” button. This will save a “Ellipse_axial_load (1).pyscn.view” file.Can you paste here:
1. This Ellipse_axial_load (1).pyscn.view file
2. A screenshot of this point of view (simple screen shot of SOFA’s GUI with the good position13 July 2021 at 16:35 #20021AnthonyBlockedHi @jnbrunet
Many thanks for looking at this.
Please see below the view file and a screenshot.
122.979 21.4852 101.304
-0.0980628 0.535538 -0.0488142 0.837377
13 July 2021 at 16:38 #20022AnthonyBlockedLink to the screenshot
https://github.com/AnthonyLe93/SofaSoftRobot_TAS/blob/main/Ellipse_axial_load_screenshot.png14 July 2021 at 16:48 #20029jnbrunetModeratorHey Anthony,
I’m sorry for the delay, I did not find the source of the problem yet, and I’m running a little bit low on time this week. I reduced your example to a very minimal scene:
import Sofa def createScene(rootNode): rootNode.addObject('RequiredPlugin', pluginName='SofaPython3 SofaOpenglVisual SofaLoader SofaOffscreenCamera') rootNode.addObject('MeshSTLLoader', filename='Ellipse_cylinder_tas.stl', name="loader") rootNode.addObject('OglModel', src="@loader", color=[1, 0, 0, 1]) rootNode.addObject('OffscreenCamera', name='camera_offscreen', filepath='%s_%i.png', widthViewport=3840, heightViewport=2160, save_frame_before_first_step=True, save_frame_after_each_n_steps=1, position=[123, 21, 101], orientation=[-0.0980628, 0.535538, -0.0488142, 0.837377], distance=151)
I will try to debug this further in the next couple of days.
@froy : do you have something OpenGL related that pops into your head when you see these two images:Expected result:
Actual result:
Jean-Nicolas
15 July 2021 at 09:55 #20032FroyKeymaster@jnbunet
I cannot really see well on the screenshot (the pipe is a bit far from the camera 🧐) but seems like there is a problem with depth; maybe depth testing is disabled ? (i.e a
glEnable(GL_DEPTH_TEST);
is missing)2 August 2021 at 12:30 #20110AnthonyBlockedHi @jnbunet
My apologise for the late reply I was on holiday. I tried the glEnable(GL_DEPTH_TEST) but the result is still the same. Have you able to find anything that might cause this issue?. Or is there an alternative solution to this?
5 August 2021 at 02:40 #20131jnbrunetModeratorHey @anthony,
Unfortunately, I haven’t come up with a solution yet. I also tried @froy ‘s suggestion without success. I’m failing to see where the issue is coming from…
I’m running a bit low on time these days. You could try Arthur’s solution (using SOFA’s GUI screenshot functionality). Or, if you got some c++ knowledge, try to debug the SofaOffscreenCamera plugin, that would be of great help.
I’ll keep you updated if I find something.
J-N
18 August 2021 at 14:46 #20179 -
AuthorPosts
- You must be logged in to reply to this topic.