Activiz (C#) VTK 对比 Python VTK 渲染质量
Activiz (C#) VTK vs Python VTK render quality
我在 Python 中创建了一个小工具,它显示了几个 STL 并创建了它们的一些屏幕截图。最近,我使用 Activiz VTK 包装器(两个 VTK 实现都是 5.8.0 版)将此工具转换为 C#。
在 C# 实现中创建的屏幕截图的质量与 Python 屏幕截图的质量相似,除了 STL 相互重叠的地方。
这是 Python VTK 屏幕截图
这是对应的Activiz VTK截图
如您所见,红色对象通过 Activiz VTK 中的米色对象显示,橙色(和红色)对象也通过左侧的蓝色对象显示。
这是 Activiz 渲染设置:
vtkOpenGLRenderer renderer = new vtkOpenGLRenderer();
renderer.SetBackground(1, 1, 1);
vtkWin32OpenGLRenderWindow window = new vtkWin32OpenGLRenderWindow();
window.SetSize(1000, 1000);
window.AddRenderer(renderer);
STL 是这样添加的
vtkPolyDataMappermapper = vtkPolyDataMapper.New();
mapper.SetInput(_polydata);
vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
actor.GetProperty().SetColor((double)color.R / 255, (double)color.G / 255, (double)color.B / 255);
actor.GetProperty().SetOpacity(alpha);
actor.GetProperty().SetInterpolationToPhong();
renderer.AddActor(actor);
这是原始的 Python 渲染设置
renderer = vtkOpenGLRenderer()
renderer.SetBackground(1,1,1)
window = vtkWin32OpenGLRenderWindow()
window.SetSize(1000,1000)
window.AddRenderer(renderer)
STL 是这样添加到 Python
mapper = vtkPolyDataMapper()
mapper.SetInputData(polydata)
actor = vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(color)
actor.GetProperty().SetOpacity(alpha)
actor.GetProperty().SetInterpolationToPhong()
renderer.AddActor(actor)
有没有人有过类似的经历,或者有谁知道造成这种质量差异的原因是什么?
亲切的问候
可能相机 clipping planes(参见 "Perspective Projection")设置了不同的值。如果裁剪范围太大,可能会出现此类渲染错误。尝试将其设置得足够小,以便显示所有对象。没试过,但像这样:
renderer.GetActiveCamera().SetClippingRange(0.1, 100);
其中两个参数是近距和远距裁剪平面与相机的距离。
我在 Python 中创建了一个小工具,它显示了几个 STL 并创建了它们的一些屏幕截图。最近,我使用 Activiz VTK 包装器(两个 VTK 实现都是 5.8.0 版)将此工具转换为 C#。 在 C# 实现中创建的屏幕截图的质量与 Python 屏幕截图的质量相似,除了 STL 相互重叠的地方。
这是 Python VTK 屏幕截图
这是对应的Activiz VTK截图
如您所见,红色对象通过 Activiz VTK 中的米色对象显示,橙色(和红色)对象也通过左侧的蓝色对象显示。
这是 Activiz 渲染设置:
vtkOpenGLRenderer renderer = new vtkOpenGLRenderer();
renderer.SetBackground(1, 1, 1);
vtkWin32OpenGLRenderWindow window = new vtkWin32OpenGLRenderWindow();
window.SetSize(1000, 1000);
window.AddRenderer(renderer);
STL 是这样添加的
vtkPolyDataMappermapper = vtkPolyDataMapper.New();
mapper.SetInput(_polydata);
vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
actor.GetProperty().SetColor((double)color.R / 255, (double)color.G / 255, (double)color.B / 255);
actor.GetProperty().SetOpacity(alpha);
actor.GetProperty().SetInterpolationToPhong();
renderer.AddActor(actor);
这是原始的 Python 渲染设置
renderer = vtkOpenGLRenderer()
renderer.SetBackground(1,1,1)
window = vtkWin32OpenGLRenderWindow()
window.SetSize(1000,1000)
window.AddRenderer(renderer)
STL 是这样添加到 Python
mapper = vtkPolyDataMapper()
mapper.SetInputData(polydata)
actor = vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(color)
actor.GetProperty().SetOpacity(alpha)
actor.GetProperty().SetInterpolationToPhong()
renderer.AddActor(actor)
有没有人有过类似的经历,或者有谁知道造成这种质量差异的原因是什么?
亲切的问候
可能相机 clipping planes(参见 "Perspective Projection")设置了不同的值。如果裁剪范围太大,可能会出现此类渲染错误。尝试将其设置得足够小,以便显示所有对象。没试过,但像这样:
renderer.GetActiveCamera().SetClippingRange(0.1, 100);
其中两个参数是近距和远距裁剪平面与相机的距离。