[vtkusers] Draw points with gaussian fade out

Michka Popoff michkapopoff at gmail.com
Sun Jun 16 12:31:02 EDT 2013


Hi

thank you for your help.

1) For the first solution, what would be the class to use to create the texture from the gaussian equation ? Once I have the textures, I could map them to planes. I did wrote some OpenGL code a while ago where I did this with a shader, billboarding the textures so that the gaussians would always face the camera. This was very fast.

2) I saw vtkGaussianSplatter, but I don't know if I can set a different radius and exponent factor for each point ? In the class these values can only be set globally. I wrote some code (in python), inspired from the FinancialField example from vtkGaussianSplatter, but the splats are passed through vtkContourFilter to make a surface. I think this is messing with my gaussians, and I don't know how to do this without vtkContourFilter. I found no other example for vtkGaussianSplatter. Here is the code I wrote, displaying 10x10 points :

#!/usr/bin/env python

import vtk
from numpy import random

# Create points
points = vtk.vtkPoints()
for i in range(10):
    for j in range(10):
        points.InsertNextPoint(i, j, 0.0)

polydata = vtk.vtkPolyData()
polydata.SetPoints(points)

popSplatter = vtk.vtkGaussianSplatter()
popSplatter.SetInput(polydata)
popSplatter.SetSampleDimensions(50, 50, 50)
popSplatter.SetRadius(0.05)
popSplatter.ScalarWarpingOff()
popSplatter.Update()

popSurface = vtk.vtkContourFilter()
popSurface.SetInputConnection(popSplatter.GetOutputPort())
popSurface.SetValue(0, 0.01)

popMapper = vtk.vtkPolyDataMapper()
popMapper.SetInputConnection(popSurface.GetOutputPort())
popMapper.ImmediateModeRenderingOn()

popActor = vtk.vtkActor()
popActor.SetMapper(popMapper)

# Renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(popActor)
renderer.ResetCamera()

# Render Window
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)

# Interactor
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

# Begin Interaction
renderWindow.Render()
renderWindowInteractor.Start()




On 16 juin 2013, at 11:14, Markus Neuner <neuner.markus at gmx.net> wrote:

> Hi Michka,
> 
> You could try to generate volumetric data using Gaussian splats.
> 
> There are two solutions to this problem:
> - Create the 3D Gaussian function on the CPU during application initialization, and create a 3D texture from that.
> 
> - But better and much faster is to compute the Gaussian directly in the fragment shader.
> 
> Have a look at vtkGaussianSplatter it may do what you want.
> 
> Regards,
> Markus
> 
> 
> On 06/15/2013 05:18 PM, Michka Popoff wrote:
>> Hi
>> 
>> I want to draw a lot of points in VTK (~1.000.000), with each point's color fading out to a transparent value, following a gaussian function.
>> So the center will be bright (maximum intensity), and the border will have no color.
>> 
>> I am able to draw a lot of points using vtkPoints, I can also change their color, but I am looking for a way to apply the fade out to every point. Of course the parameters of the gaussian function will be different for each point (intensity value in the middle, diameter).
>> 
>> The result for 1 point would look like this : http://www.princeton.edu/~rvdb/images/deconv/Gauss2Psf.jpg
>> 
>> Are there some filters/mappers I could use directly ? Or can I perhaps try to "hijack" vtkgaussiansplatter to achieve this ?
>> 
>> Thanks in advance
>> 
>> Michka Popoff
>> _______________________________________________
>> Powered by www.kitware.com
>> 
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>> 
>> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>> 




More information about the vtkusers mailing list