Thank you all for the inspiration :)
Well, I’m all in for Julia at the moment, so I want OpenGL to feel as native and natural as possible.
I actually don’t have a science visualization background.
I’m studying Cognitive Science and am a hobby 3D graphic designer.
So I always saw the need for performant visualizations from two perspectives: data visualization and art visualization.
Well, there’s actually a third one for me, which are the needs from image recognition: having fast and interactive tools to tweak parameters of a filter pipeline.
My conclusion: They always overlap, but they don’t really exist in one package.
For 3D programs like 3DS Max, you have all the simple interactivity, but you’ll always find the programming, libraries and low-level missing, OpenCV is lacking of good ways to make 3D plots, and scientific visualizations are way too often ugly and you can’t really tweak them.
So I want to create something that has high interactivity and can directly work with the datastructures of the language, but also has good lighting (raytracing and the like).
I actually searched long for a language that can make this possible in a nice way.
Julia was the first language, where I was satisfied with performance and how you can interface with low-level API’s, but also have nice high level features ( and no classes, I really love to leave the Java/C++ world for multiple dispatch).
Also code sharing and working on the same project must be very easy, as one or two persons could never realize such a huge functionality.
I think to go away from classes is one of the best ways of making code sharing easier.
But that is very far out, and just my ultimate motivation.
At the moment I write a bachelor thesis about an IDE, that is supposed to blur the lines between debugging, print-eval loop and interactive visualizations.
So for the start I want something more like this : https://code.google.com/p/glumpy/ (a friend pointed me out this package, thanks for that)
This actually nails the functionality that I want to develop in the next few months.
On top of that I want to implement some GUI like elements and views with manipulation possibilities for different Julia datastructures.
One of the first datastructures will be the Julia Expression tree, allowing for editing your code while you run it.
Its very nice to have interactive views to a bundle of Julia’s datastructures. Like this you can just traverse the tree and display the right view for the leaves, having a functionality similar to Ijulia or Wolfram Mathematica.
My Package is still a little broken, as it depends on a newer version of the OpenGL package and things are a little ugly inside as I rushed to show you something, but this is what I have so far:
Event Management:
# EventAction{EventToReactTo}(id, event -> bool, (additional, params, to condition function), actionFunction, (additional params))
registerEvent(EventAction{MouseClicked}("", x -> x.key == 4 || x.key == 3, (), zoom, (cam,)))
This is a window with a view on the syntax tree of the actual Julia source file that opened this window, and a 3D gauss. The formula for the gauss and color is hidden inside the shader. At some point I want to allow for very easy automated shader generation, so that you basically just define functions on your array and then execute them on the gpu.
Also, I work together with a friend on the IDE. We want to parse the packages, so that you can search through packages from inside your IDE.
It will be a multipurpose database, in which you can store sample data, images, 3d models, shader, shader functions, julia code, etc, which will ultimately be accessible from inside your IDE.
I guess I should just write all of this minus the IDE part into my application for GSOC =)
At the moment I need to work on the interactivity and source code display, as it concerns my bachelor thesis, so that I’ll have time for GSOC and 3D visualization in Mai.
Best regards,
Simon
@TobiI need to put in a mentor for the project. As no one else offered mentoring so far I will mention you there.Hope that's fine with you ;)
Before I read the Julia GSOC projects, I was actually just in the middle of trying out some way of rendering functions that manipulate planes, volumes and particles ( or just render them without applying a function).
Why is the scope of the project too wide? Drawing volumetric and surface data in OpenGL is not really so hard.