[vtkusers] Transparency/Opacity - DepthSort example
John Platt
jcplatt at lineone.net
Sat Mar 20 15:46:24 EST 2004
Hi All,
I have run the depthsort example to see what effects I can expect using
transparent colours. The spheres are shown speckled (see attachment). Is
this a limitation? I am running vtk4.5.0 on XP sp1. The C++ translation
of the example is included below.
Thanks in advance.
John.
/*
# This example demonstrates the use of vtkDepthSortPolyData. This is a
# poor man's algorithm to sort polygons for proper transparent blending.
# It sorts polygons based on a single point (i.e., centroid) so the
sorting
# may not work for overlapping or intersection polygons.
#
*/
#include "stdafx.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkRenderer.h"
#include "vtkActor.h"
#include "vtkProperty.h"
#include "vtkSphereSource.h"
#include "vtkAppendPolyData.h"
#include "vtkDepthSortPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkPolyData.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// Create a bunch of spheres that overlap and cannot be easily
arranged
// so that the blending works without sorting. They are appended into
a
// single vtkPolyData because the filter only sorts within a single
// vtkPolyData input.
vtkSphereSource* sphere = vtkSphereSource::New();
sphere->SetThetaResolution( 80 );
sphere->SetPhiResolution( 40 );
sphere->SetRadius( 1 );
sphere->SetCenter( 0, 0, 0 );
vtkSphereSource* sphere2 = vtkSphereSource::New();
sphere2->SetThetaResolution( 80 );
sphere2->SetPhiResolution( 40 );
sphere2->SetRadius( 0.5 );
sphere2->SetCenter( 1, 0, 0 );
vtkSphereSource* sphere3 = vtkSphereSource::New();
sphere3->SetThetaResolution( 80 );
sphere3->SetPhiResolution( 40 );
sphere3->SetRadius( 0.5 );
sphere3->SetCenter( -1, 0, 0 );
vtkSphereSource* sphere4 = vtkSphereSource::New();
sphere4->SetThetaResolution( 80 );
sphere4->SetPhiResolution( 40 );
sphere4->SetRadius( 0.5 );
sphere4->SetCenter( 0, 1, 0 );
vtkSphereSource* sphere5 = vtkSphereSource::New();
sphere5->SetThetaResolution( 80 );
sphere5->SetPhiResolution( 40 );
sphere5->SetRadius( 0.5 );
sphere5->SetCenter( 0, -1, 0 );
vtkAppendPolyData* appendData = vtkAppendPolyData::New();
appendData->AddInput( sphere->GetOutput() );
appendData->AddInput( sphere2->GetOutput() );
appendData->AddInput( sphere3->GetOutput() );
appendData->AddInput( sphere4->GetOutput() );
appendData->AddInput( sphere5->GetOutput() );
// The dephSort object is set up to generate scalars representing
// the sort depth. A camera is assigned for the sorting. The camera
// define the sort vector (position and focal point).
vtkCamera* camera = vtkCamera::New();
vtkDepthSortPolyData* depthSort = vtkDepthSortPolyData::New();
depthSort->SetInput( appendData->GetOutput() );
// depthSort SetDirectionToBackToFront
// depthSort SetVector 1 1 1
depthSort->SetCamera( camera );
depthSort-> SortScalarsOn();
depthSort->Update();
vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
mapper->SetInput( depthSort->GetOutput() );
mapper->SetScalarRange( 0, depthSort->GetOutput()->GetNumberOfCells()
);
vtkActor* actor = vtkActor::New();
actor->SetMapper( mapper );
actor->GetProperty()->SetOpacity( 0.5 );
actor->GetProperty()->SetColor( 1.0, 0.0, 0.0 );
actor->RotateX( -72 );
// If an Prop3D is supplied, then its transformation matrix is taken
// into account during sorting.
depthSort->SetProp3D( actor );
// Create the RenderWindow & Renderer.
vtkRenderer* ren1 = vtkRenderer::New();
ren1->SetActiveCamera( camera );
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->AddRenderer( ren1 );
vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow( renWin );
// Add the actors to the renderer, set the background and size.
ren1->AddActor( actor );
ren1->SetBackground( 1, 1, 1 );
renWin->SetSize( 300, 200 );
iren->Initialize();
ren1->ResetCamera();
ren1->GetActiveCamera()->Zoom( 2.2 );
renWin->Render();
// Main message loop:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20040320/4c51ef37/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Image2.jpg
Type: image/jpeg
Size: 17923 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20040320/4c51ef37/attachment.jpg>
More information about the vtkusers
mailing list