Took the exact code, but replaced the widget with my own widget (made using the old design, no representation). Here things look correct. I can reproduce the above behavior for the code Laure provided.
#include <vtkActor.h>
#include <vtkImplicitRectangleWidget.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkSphereRepresentation.h>
#include <vtkSphereSource.h>
#include <vtkSphereWidget2.h>
int main(int, char*[])
{
// Create a sphere/mapper/actor
auto sphereSource = vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetRadius(2.0);
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphereSource->GetOutputPort());
auto actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
actor->GetProperty()->SetOpacity(0.5);
// Create a renderer/render window/interactor
auto renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(0, 0, 0);
auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
auto renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkNew<vtkImplicitRectangleWidget> widget;
widget->SetInteractor(renderWindow->GetInteractor());
widget->GetHandleProperty()->SetOpacity(0.99);
renderWindow->SetMultiSamples(0); // Disable multi-sampling (for clarity)
renderWindow->SetAlphaBitPlanes(1); // Ensure alpha channel if blending is used
// Start the rendering loop
renderWindow->Render();
renderer->ResetCamera();
renderWindowInteractor->Initialize();
widget->On();
renderWindowInteractor->Start();
return 0;
}
The widget I used can be found here, gist:c949a1841bb003a9368170b05f34e869 ยท GitHub
The shape I use with transparency is a cone. Perhaps, something is implemented wrongly for the translucent pass in the vtkSphereWidget2