[vtkusers] 3d texture map volume rendering

Lisa Avila lisa.avila at kitware.com
Mon Jun 27 17:05:20 EDT 2005


Hi Sungeun Kim,

Are you using OpenGL? The 3D texture mapper is not supported for Mesa 
(although you should just get back a vtkVolumeTextureMapper3D when you do a 
New() - not null).

So, if I understand correctly, you can create a simple Cxx program with this:

vtkVolumeTextureMapper3D *mapper = vtkVolumeTextureMapper3D::New();

and at this point mapper would be null?

Lisa


At 04:59 PM 6/27/2005, SungeunKim wrote:
>Hi,
>
>I tested on NVidia GeForce FX 5900 Ultra 256MB and the error that I have is
>
>after create the mapper, no matter what member funcions of that mapper I 
>call, my program is terminated with an error message, saying "a command at 
>"0x--------------" is referencing "0x00000000" memory and memory cannot be 
>read".
>
>What can it be the possible reason for this error?
>
>Sungeun Kim.
>
>Yogi Girdhar wrote:
>
>>What is the error?
>>What kind of graphics card do you have? As far as I know, this mapper is
>>highly dependent on your graphics hardware. I know it works for newer
>>NVIDIA cards, but I am not sure about others.
>>
>>-Yogi
>>
>>
>>Sun Geun Kim wrote:
>>
>>
>>
>>>Hi,
>>>
>>>I am testing cvs-version VTK library on MS Windows platform(Win
>>>XP).There was no problem in compilation. However, when I test
>>>vtkVolumeTextureMap3D mapper with a simple volume (headsq/quater), it
>>>always gives me an error message. Does this mapper work correctly? I
>>>checked out the source code on June 20th. If it works right, can I get
>>>any example c-source code?
>>>
>>>For your refernce, I attach my file. If there is anybody who make that
>>>mapper work, please check my source code.
>>>
>>>Thank you in advance
>>>
>>>===========================
>>>Sun Geun Kim
>>>Ph.D student
>>>School of Electrical and Computer Engineering
>>>Purdue University
>>>
>>>---------------------------
>>>email: sungeun at ecn.purdue.edu
>>>
>>>------------------------------------------------------------------------
>>>
>>>/*=========================================================================
>>>
>>>
>>>Program:   Visualization Toolkit
>>>
>>>Module:    $RCSfile: Medical3.cxx,v $
>>>
>>>
>>>Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
>>>
>>>All rights reserved.
>>>
>>>See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
>>>
>>>
>>>    This software is distributed WITHOUT ANY WARRANTY; without even
>>>
>>>    the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
>>>
>>>    PURPOSE.  See the above copyright notice for more information.
>>>
>>>
>>>=========================================================================*/
>>>
>>>
>>>//
>>>// This example reads a volume dataset, extracts two isosurfaces that
>>>
>>>// represent the skin and bone, creates three orthogonal planes
>>>// (saggital, axial, coronal), and displays them.
>>>
>>>//
>>>
>>>#include "vtkRenderer.h"
>>>
>>>#include "vtkRenderWindow.h"
>>>
>>>#include "vtkRenderWindowInteractor.h"
>>>
>>>#include "vtkVolume16Reader.h"
>>>
>>>#include "vtkCamera.h"
>>>
>>>#include "vtkImageData.h"
>>>
>>>#include "vtkPiecewiseFunction.h"
>>>
>>>#include "vtkVolume.h"
>>>
>>>#include "vtkVolumeProperty.h"
>>>
>>>#include "vtkColorTransferFunction.h"
>>>
>>>#include "vtkVolumeRayCastCompositeFunction.h"
>>>
>>>#include "vtkVolumeRayCastIsosurfaceFunction.h"
>>>
>>>#include "vtkVolumeRayCastMIPFunction.h"
>>>
>>>#include "vtkVolumeRayCastMapper.h"
>>>
>>>#include "vtkVolumeTextureMapper2D.h"
>>>
>>>#include "vtkVolumeTextureMapper3D.h"
>>>
>>>
>>>int main (int argc, char **argv)
>>>
>>>{
>>>
>>>if (argc < 2)
>>>
>>>   {
>>>
>>>     cout << "Usage: " << argv[0] << " DATADIR/headsq/quarter" << endl;
>>>
>>>   return 1;
>>>
>>>   }
>>>
>>>
>>>// Create the renderer, the render window, and the interactor. The
>>>
>>>// renderer draws into the render window, the interactor enables
>>>
>>>// mouse- and keyboard-based interaction with the data within the
>>>
>>>// render window.
>>>
>>>//
>>>
>>>vtkRenderer *aRenderer = vtkRenderer::New();
>>>
>>>vtkRenderWindow *renWin = vtkRenderWindow::New();
>>>
>>>   renWin->AddRenderer(aRenderer);
>>>
>>>vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>>>
>>>   iren->SetRenderWindow(renWin);
>>>
>>>
>>>// The following reader is used to read a series of 2D slices (images)
>>>
>>>// that compose the volume. The slice dimensions are set, and the
>>>
>>>// pixel spacing. The data Endianness must also be specified. The
>>>
>>>// reader usese the FilePrefix in combination with the slice number to
>>>
>>>// construct filenames using the format FilePrefix.%d. (In this case
>>>
>>>// the FilePrefix is the root name of the file: quarter.)
>>>
>>>vtkVolume16Reader *v16 = vtkVolume16Reader::New();
>>>
>>>   v16->SetDataDimensions(64,64);
>>>
>>>   v16->SetDataByteOrderToLittleEndian();
>>>
>>>   v16->SetFilePrefix (argv[1]);
>>>
>>>   v16->SetImageRange(1, 93);
>>>
>>>   v16->SetDataSpacing (3.2, 3.2, 1.5);
>>>
>>>/*
>>>
>>>vtkVolumeRayCastCompositeFunction *compositeFunction = 
>>>vtkVolumeRayCastCompositeFunction::New();
>>>
>>>compositeFunction->SetCompositeMethodToInterpolateFirst();
>>>
>>>
>>>vtkVolumeRayCastMIPFunction *MIPFunction = 
>>>vtkVolumeRayCastMIPFunction::New();
>>>
>>>MIPFunction->SetMaximizeMethodToScalarValue();
>>>
>>>
>>>vtkVolumeRayCastIsosurfaceFunction *isosurfaceFunction = 
>>>vtkVolumeRayCastIsosurfaceFunction::New();
>>>
>>>isosurfaceFunction->SetIsoValue(80);
>>>
>>>*/
>>>
>>>// Create a transfer function mapping scalar value to color (color)
>>>
>>>vtkColorTransferFunction *cTFun = vtkColorTransferFunction::New();
>>>
>>>cTFun->AddRGBPoint(  0.0, 0.0, 0.0, 0.0 );
>>>
>>>cTFun->AddRGBPoint(  500.0, 1.0, 0.49, 0.35 );
>>>
>>>cTFun->AddRGBPoint( 800.0, 0.81, 0.27, 0.1 );
>>>
>>>cTFun->AddRGBPoint( 1150.0, 0.92,0.9, 0.89 );
>>>
>>>cTFun->AddRGBPoint( 4095.0, 0.5, 0.5, 0.5 );
>>>
>>>
>>>// Create a transfer function mapping magnitude of gradient to opacity
>>>
>>>vtkPiecewiseFunction *goTFun = vtkPiecewiseFunction::New();
>>>
>>>goTFun->AddPoint(   0, 0.0 );
>>>
>>>goTFun->AddPoint(  50, 0.0 );
>>>
>>>goTFun->AddPoint(  150, 1.0 );
>>>
>>>
>>>vtkPiecewiseFunction *oTFun = vtkPiecewiseFunction::New();
>>>
>>>oTFun->AddPoint(20.0, 0.0);
>>>
>>>oTFun->AddSegment(20.0, 0.0, 500.0, 0.15);
>>>
>>>oTFun->AddSegment(500.0, 0.2, 1150.0, 0.35);
>>>
>>>oTFun->AddSegment(1150.0, 0.8, 3000.0, 0.45);
>>>
>>>
>>>vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
>>>
>>>         volumeProperty->SetColor(cTFun);
>>>
>>>         volumeProperty->SetGradientOpacity(goTFun);
>>>
>>>         volumeProperty->SetScalarOpacity(oTFun);
>>>
>>>         volumeProperty->ShadeOn();
>>>
>>>         volumeProperty->SetInterpolationTypeToLinear();
>>>
>>>//      volumeProperty->SetAmbient(material->GetAmbient());
>>>
>>>//      volumeProperty->SetDiffuse(material->GetDiffuse());
>>>
>>>//      volumeProperty->SetSpecular(material->GetSpecular());
>>>
>>>//      volumeProperty->SetSpecularPower(material->GetSpecularPower());
>>>
>>>
>>>         vtkVolume *volume = vtkVolume::New();
>>>
>>>
>>>         vtkVolumeTextureMapper3D *textureMap3D = 
>>> vtkVolumeTextureMapper3D::New();
>>>
>>>         textureMap3D->IsRenderSupported(volumeProperty);
>>>
>>>         textureMap3D->SetInput(v16->GetOutput());
>>>
>>>
>>>         volume->SetMapper(textureMap3D);
>>>
>>>         volume->SetProperty(volumeProperty);
>>>
>>>
>>>// It is convenient to create an initial view of the data. The
>>>
>>>// FocalPoint and Position form a vector direction. Later on
>>>
>>>// (ResetCamera() method) this vector is used to position the camera
>>>
>>>// to look at the data in this direction.
>>>
>>>vtkCamera *aCamera = vtkCamera::New();
>>>
>>>   aCamera->SetViewUp (0, 0, -1);
>>>
>>>   aCamera->SetPosition (0, 1, 0);
>>>
>>>   aCamera->SetFocalPoint (0, 0, 0);
>>>
>>>   aCamera->ComputeViewPlaneNormal();
>>>
>>>
>>>// Actors are added to the renderer.
>>>         aRenderer->AddVolume(volume);
>>>
>>>
>>>// An initial camera view is created.  The Dolly() method moves
>>>// the camera towards the FocalPoint, thereby enlarging the image.
>>>
>>>aRenderer->SetActiveCamera(aCamera);
>>>
>>>aRenderer->Render();
>>>
>>>aRenderer->ResetCamera ();
>>>
>>>aCamera->Dolly(1.5);
>>>
>>>
>>>// Set a background color for the renderer and set the size of the
>>>
>>>// render window (expressed in pixels).
>>>
>>>aRenderer->SetBackground(1,1,1);
>>>
>>>renWin->SetSize(640, 480);
>>>
>>>
>>>// Note that when camera movement occurs (as it does in the Dolly()
>>>
>>>// method), the clipping planes often need adjusting. Clipping planes
>>>
>>>// consist of two planes: near and far along the view direction. The
>>>// near plane clips out objects in front of the plane; the far plane
>>>
>>>// clips out objects behind the plane. This way only what is drawn
>>>
>>>// between the planes is actually rendered.
>>>
>>>aRenderer->ResetCameraClippingRange ();
>>>
>>>
>>>// interact with data
>>>
>>>iren->Initialize();
>>>
>>>iren->Start();
>>>
>>>// It is important to delete all objects created previously to prevent
>>>
>>>// memory leaks. In this case, since the program is on its way to
>>>
>>>// exiting, it is not so important. But in applications it is
>>>
>>>// essential.
>>>
>>>v16->Delete();
>>>
>>>aCamera->Delete();
>>>
>>>aRenderer->Delete();
>>>
>>>renWin->Delete();
>>>
>>>iren->Delete();
>>>
>>>
>>>volume->Delete();
>>>
>>>volumeProperty->Delete();
>>>
>>>
>>>oTFun->Delete();
>>>
>>>goTFun->Delete();
>>>
>>>cTFun->Delete();
>>>
>>>
>>>textureMap3D->Delete();
>>>
>>>
>>>return 0;
>>>
>>>}
>>>
>>>
>>>------------------------------------------------------------------------
>>>
>>>_______________________________________________
>>>This is the private VTK discussion list. Please keep messages on-topic. 
>>>Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>>Follow this link to subscribe/unsubscribe:
>>>http://www.vtk.org/mailman/listinfo/vtkusers
>>>
>>>
>>
>>_______________________________________________
>>This is the private VTK discussion list. Please keep messages on-topic. 
>>Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>Follow this link to subscribe/unsubscribe:
>>http://www.vtk.org/mailman/listinfo/vtkusers
>>
>
>_______________________________________________
>This is the private VTK discussion list. Please keep messages on-topic. 
>Check the 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