[vtkusers] 3d texture map volume rendering

SungeunKim sungeun at ecn.purdue.edu
Mon Jun 27 16:59:09 EDT 2005


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
>  
>




More information about the vtkusers mailing list