[vtkusers] 3d texture map volume rendering

Lisa Avila lisa.avila at kitware.com
Mon Jun 27 17:19:30 EDT 2005


Hi Sungeun Kim,

OK - your mapper is not null. Can you please check the value of 
mapper->GetClassName() - it should be vtkOpenGLVolumeTextureMapper3D. If it 
is vtkVolumeTextureMapper3D then something went wrong in the volume 
rendering factor that creates the correct subclass (this should not cause 
you to crash, but it will not render an image)

Lisa



At 05:17 PM 6/27/2005, SungeunKim wrote:
>Hi Lisa Avila,
>
>I am using OpenGL, not Mesa. And I tested whether 
>vtkVolumeTextureMapper3D::New() returns NULL or not with this code:
>
>vtkVolumeTextureMapper3D *mapper = NULL;
>mapper = vtkVolumeTextureMapper3D::New();
>
>if(mapper == NULL)
>{
>    printf("Cannot create mapper\n");
>}
>
>And the pointer was not NULL.
>To make sure that I am using OpenGL, is there any ways to check whether I 
>am using OpenGL, not Mesa?
>
>Sungeun Kim.
>
>Lisa Avila wrote:
>
>>
>>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
>>
>>
>>
>>_______________________________________________
>>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