[vtkusers] 3d texture map volume rendering

Yogi Girdhar yogi.girdhar at kitware.com
Mon Jun 27 13:54:44 EDT 2005


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




More information about the vtkusers mailing list