Using Blender 2.5 as Visualization Tool
For my PhD work I use Blender as visualization tool. It suits me because it uses python for scripting and is very flexible. I can also use it directly to navigate my results and render them for publication.
Blender has seen a major overhaul with version 2.5, nearly everything works differently: the GUI has changed, the internal python API has changed, the feature set has changed (grown mostly). Getting my stuff from Blender 2.4 to Blender 2.5 will be a major undertaking which I do not want to tackle now. However, I feel that it is about time to start learning it, because before I give my work to my successor, I should really port it to the current blender version.
Reviewing Interpolation
Also for my work, I am currently skimming through the book Curves and Surfaces for GACD by Gerald Farin. I need some inspiration for a better representation of my surfaces. It is a great book. If you are interested in programming 3D graphics or interpolation you should really get it.
The programming problem P1 in chapter 3 is the following:
Let three points be given by
For s = 0, 0.05, 0.1, ...1 and t = 0., 0.05, 0.1, ..., 1 plot the points b [s,t].
The function b is defined earlier in the book and is called a bivariate Blossom. It is defined by the following equation:
Using the brevity of Python, this results in this wonderful class definition:
1 2 3 4 5 6 7 8 9 10 11 12 | import numpy as np
class Blossom(object):
def __init__(self, p1, p2, p3):
self._pts = np.asarray([p1, p2, p3])
def __call__(self, t, s):
return np.dot((
(1-t)*(1-s),
(1-t)*s+t*(1-s),
s*t),
self._pts)
|
Putting it together
So I put together a python script that can be loaded and executed in Blender 2.5. It sets up a menu that is shown in the 3D View whenever a mesh with exactly 3 vertices is selected. It allows you to set the range for s and t and updates the Blossom mesh with the calculated points.
The final result looks something like this:
It took a while to put the script together: The documentation of the new python API is not very complete at the moment and googling for Blender 2.5 specific help is not trivial. I hope this script gets someone else jump started. You can find the python script here and the blender scene which also includes the python script here.
Update: The code is now also available on GitHub.