[vtkusers] 3d texture map volume rendering
    Sun Geun Kim 
    sungeun at ecn.purdue.edu
       
    Mon Jun 27 13:40:27 EDT 2005
    
    
  
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
-------------- next part --------------
/*=========================================================================
  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;
}
    
    
More information about the vtkusers
mailing list