MantisBT - VTK
View Issue Details
0008317VTK(No Category)public2008-12-18 11:142016-08-12 09:55
JNaresh 
Kitware Robot 
normalminorhave not tried
closedmoved 
 
 
0008317: Rendering is slow compared to Java3D
I have created a scene with 10x10x10 spheres. I am using VTK with java wrapper. When I try to rotate the model, the rendering is sluggish compared to Java3D. I have attached the sample code below.

//-----Imports----------------------------------------------------------------
import javax.swing.JFrame;

import vtk.vtkActor;
import vtk.vtkLight;
import vtk.vtkPolyDataMapper;
import vtk.vtkProperty;
import vtk.vtkRenderer;
import vtk.vtkRenderWindowPanel;
import vtk.vtkSphereSource;


/**
 * This class renders multiple spheres in VTK window. This can be used
 * for stress testing Java3D.
 */
public class MultipleSpheres
{
   /**
    * Number of spheres in X direction.
    */
   private int m_nX = 10;

   /**
    * Number of spheres in Y direction.
    */
   private int m_nY = 10;

   /**
    * Number of spheres in Z direction.
    */
   private int m_nZ = 10;

   /**
    * RenderWindow panel.
    */
   private vtkRenderWindowPanel m_zPanel;

   /**
    * Reference to JFrame.
    */
   private JFrame m_zFrame;

   static
   {
      System.loadLibrary("vtkCommonJava");
      System.loadLibrary("vtkFilteringJava");
      System.loadLibrary("vtkIOJava");
      System.loadLibrary("vtkImagingJava");
      System.loadLibrary("vtkGraphicsJava");
      System.loadLibrary("vtkRenderingJava");
      System.loadLibrary("vtkInfovisJava");
      System.loadLibrary("vtkViewsJava");

   } // static

   /**
    * Constructs MultipleSpheres object.
    *
    * @param ascArg Array of command line arguments.
    */
   public MultipleSpheres( String [] ascArg )
   {
      for( int i = 0; i < ascArg.length; i++ )
      {
         if ( ascArg[i].equalsIgnoreCase("-nx") && (i+1) < ascArg.length )
         {
            m_nX = Integer.parseInt(ascArg[++i]);
         }
         else if ( ascArg[i].equalsIgnoreCase("-ny") &&
                   (i+1) < ascArg.length )
         {
            m_nY = Integer.parseInt(ascArg[++i]);
         }
         else if ( ascArg[i].equalsIgnoreCase("-nZ") &&
                   (i+1) < ascArg.length )
         {
            m_nZ = Integer.parseInt(ascArg[++i]);
         }
      }

      buildUI();
      buildScene();

      m_zFrame.setVisible(true);

   } // Constructor MultipleSpheres

   /**
    * Builds the UI.
    */
   private void buildUI()
   {
      m_zPanel = new vtkRenderWindowPanel();
      m_zPanel.GetRenderWindow().SwapBuffersOn();

      m_zFrame = new JFrame("MultipleSpheres");
      m_zFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      m_zFrame.add("Center", m_zPanel);
      m_zFrame.setSize(500, 500);

   } // buildUI

   /**
    * Builds the scene.
    */
   private void buildScene()
   {
      vtkSphereSource zSphere = new vtkSphereSource();
      zSphere.SetThetaResolution(100);
      zSphere.SetPhiResolution(50);
      zSphere.SetRadius(1.0);

      vtkPolyDataMapper zPolyDataMapper = new vtkPolyDataMapper();
      zPolyDataMapper.SetInputConnection(zSphere.GetOutputPort());

      vtkProperty zProperty = new vtkProperty();
      zProperty.SetColor(1.0, 0.3882, 0.2784);
      zProperty.SetDiffuse(0.7);
      zProperty.SetSpecular(0.4);
      zProperty.SetSpecularPower(30);

      vtkRenderer zRenderer = m_zPanel.GetRenderer();

      double dX = -m_nX;
      for( int i = 0; i < m_nX; i++ )
      {
         double dY = -m_nY;
         for( int j = 0; j < m_nY; j++ )
         {
            double dZ = -m_nZ;
            for( int k = 0; k < m_nZ; k++ )
            {
               System.out.println("X: " + dX + ", Y: " + dY +
                                  ", Z: " + dZ);
               vtkActor zActor = new vtkActor();
               zActor.SetMapper(zPolyDataMapper);
               zActor.SetProperty(zProperty);
               zActor.SetPosition(dX, dY, dZ);

               zRenderer.AddActor(zActor);

               dZ += 2.0;
            }

            dY += 2.0;
         }

         dX += 2.0;
      }

      vtkLight zLight1 = new vtkLight();
      zLight1.SetFocalPoint(1.875, 0.6125, 0);
      zLight1.SetPosition(0.875, 1.6125, 1);
      zRenderer.AddLight(zLight1);

      vtkLight zLight2 = new vtkLight();
      zLight2.SetFocalPoint(1.875, 0.6125, 0);
      zLight2.SetPosition(9, 9, -9);
      zRenderer.AddLight(zLight2);

      vtkLight zLight3 = new vtkLight();
      zLight3.SetFocalPoint(1.875, 0.6125, 0);
      zLight3.SetPosition(0.875, -9, -9);
      zRenderer.AddLight(zLight3);

      zRenderer.GetActiveCamera().SetFocalPoint(0, 0, 0);
      zRenderer.GetActiveCamera().SetPosition(0, 0, 1);
      zRenderer.GetActiveCamera().SetViewUp(0, 1, 0);
      zRenderer.GetActiveCamera().ParallelProjectionOn();
      zRenderer.ResetCamera();
// zRenderer.GetActiveCamera().SetParallelScale(1.5);

   } // buildScene

   /**
    * Main function.
    *
    * @param ascArg Array of command line arguments.
    */
   public static void main( String ascArg[] )
   {
      MultipleSpheres zMultSpheres = new MultipleSpheres(ascArg);

   } // main

} // Class MultipleSpheres
No tags attached.
Issue History
2008-12-18 11:14JNareshNew Issue
2011-06-16 13:11Zack GalbreathCategory => (No Category)
2016-08-12 09:55Kitware RobotNote Added: 0037049
2016-08-12 09:55Kitware RobotStatusexpired => closed
2016-08-12 09:55Kitware RobotResolutionopen => moved
2016-08-12 09:55Kitware RobotAssigned To => Kitware Robot

Notes
(0037049)
Kitware Robot   
2016-08-12 09:55   
Resolving issue as `moved`.

This issue tracker is no longer used. Further discussion of this issue may take place in the current VTK Issues page linked in the banner at the top of this page.