Rendering Scilab Graphism in VTK
Abstract:
- Scilab currently uses OpenGL through it's Java bindings - JOGL - to render 2D and 3D graphics. This implementation has disadvantages. It is difficult to code and maintain due to the interaction between Java and C++, has performance issues and is difficult to integrate with the Java/Swing GUI. The aim of this project is to overcome these limitations by implementing graphics rendering in VTK.
Student time line
See here for the Google Summer of Code planning.
Motivation and Overview
As noted in the abstract, the current implementation of graphics rendering in Scilab suffers from the following disadvantages:
- Perfomance issues
Difficult to code and maintain due to C++ <-> Java interaction
- Difficult to integrate rendered graphics within a Java/Swing window
To overcome these problems, it is planned to rewrite graphics/rendering modules of Scilab using VTK [c]. VTK offers a many advantages.
- VTK is higher level than OpenGL.
- VTK has a large collection of high level 2D and 3D visualization and filtering routines.
- VTK has a rich set of widgets and interactors to manipulate the graphics
- VTK has a fairly good set of math routines and data structures
- VTK has widgets that can be integrated into Qt, GTK, Swing or Tk.
To accomplish this, the following two approaches are proposed:
- Rewrite the graphics/rendering modules using Java bindings for VTK. This can be easily integrated into the Java/Swing GUI. Since the actual rendering is done by the underlying C++ code, performace is expected to be good.
- Rewrite the graphics/rendering modules using Qt/VTK. This gets rid of Java altogether and has the best possible performance. However, the GUI will need to be done in Qt.
Which of the above two approaches will be used has to be evaluated further using these criteria:
- Performance
- Ease of implementation and maintainence
- Ease of integration with rest of Scilab
Design Details
Graphics rendering in Scilab is reasonably well separated from the rest of the code (details in [a]). The code for graphics resides in the 'graphics' and 'renderer' modules. Since it is difficult to complete both 2D and 3D rendering within the GSoC timeframe, only 2D plotting is planned to be implemented. We will have to:
- Replace JOGL specific code (e.g. DrawableObjectJOGL, DrawableClippedObjectJOGL and DrawableSegsJOGL etc.) in 'graphics' with their VTK counterparts (DrawableObjectVTK, DrawableClippedObjectVTK and DrawableSegsVTK etc.).
If we use approach [1] we will delegate actual rendering to Java/VTK through the JavaMapper classes. JavaMapper classes will be modified to call upon VTK to do the rendering [b].
- If we use approach [2] the C++ code (DrawableObjectVTK, DrawableClippedObjectVTK and DrawableSegsVTK etc.) can directly call VTK to do the rendering.
- Replace the entire code in the 'renderer' module with VTK specific routines. Since only 2D rendering is planned, AA sub-modules will be left out. Proposed Timeline
April 21, 2009 to May 22, 2009: The community bonding time will be used not only to bond with the community but also to evaluate the proposed approaches and decide upon which one is best. Familiarize myself with Scilab source code and build system. (~ 4 Weeks)
May 23, 2009 to July 5, 2009: Begin coding. Plan to finish the Scilab <-> VTK interaction code in 'graphics' module. (~ 6 Weeks)
July 6, 2009 to July 13, 2009: Bugfixing, testing and mid-term submission. (~ 1 Week)
July 14 to August 10: Code the part or whole of 2D rendering code in 'renderer' module. (~ 4 Weeks)
August 11 to August 24: Bugfixing, testing and final submission. (~ 2 Weeks)
- References
[a] Handle Rendering - Scilab Wiki, https://scilab.gitlab.io/legacy_wiki/Handle_Rendering
[b] C++ <-> Java Interaction, https://scilab.gitlab.io/legacy_wiki/C%2B%2B_%3C-%3E_Java_interaction
[c] VTK - The Visualization Toolkit, http://www.vtk.org/
- About Me
Describe yourself
I'm currently pursuing a masters degree in Geodetic Science (with a focus on Computer Vision) from The Ohio State University at Columbus, Ohio, USA. As a high school kid, I twice qualified for the Indian National Informatics Olympiad training camps which intoduced me to fascinating world of computer science and software development. My current research interests are multi-view geometry and 3D reconstruction.
Why are you interested in this subject?
I am passionate about open-source and have been a linux user for well over 7 years and have wanted to contribute to open-source since a long time. I use open-source technologies such as Qt and VTK for my research work. However, I had to use Matlab for much of my coursework and sorely missed an open-source alternative for scientific computing. Obvioulsy, Scilab comes to mind. Since I already have been recently working with VTK to create 3D visualization for my research, I decided to contribute to this particular aspect of Scilab.
Do you have any experience in C/C++, Fortran or Java?
I have know C++ and Java for more nearly 8 years. I use C++ to implement various computer vision algorithms for my course work and research at school. I have used Java in the past to develop GUI application for a geo-spatial data processing company based in India.
Did you study advanced maths / physics / biology / others?
I'm fairly well-versed with advanced mathematics, especially linear algebra and calculus.
Do you plan to maintain your development at the end of the Google Summer of Code?
Given my passion for open-source I plan to contribute to Scilab even after GSoC and maintain the code in the future. I would like to complete the implementation to include 3D graphics in the future.
What is your email address?
I can be reached at vinod.khare@gmail.com