【发布时间】:2017-09-26 00:46:49
【问题描述】:
当我尝试渲染包含透明对象(50% 透明度)和带纹理的不透明对象的场景时,透明对象变得更加褪色。如果纹理对象被隐藏,透明对象将再次获得其预期的透明度。
我使用vtkTextureMapToSphere 将纹理映射到对象。请注意,下面代码中的bounds 表示我应用纹理的_polydata 对象的边界框。
vtkTextureMapToSphere textureMapper = vtkTextureMapToSphere.New();
textureMapper.SetInput(_polydata);
textureMapper.SetCenter(bounds.center[0], bounds.center[1], bounds.center[2]);
textureMapper.PreventSeamOn();
vtkTransformTextureCoords transformMap = vtkTransformTextureCoords.New();
double factorEnlarge = 4;
double scale = bounds.dimensions.Sum() / bounds.dimensions.Length / factorEnlarge;
transformMap.SetInputConnection(textureMapper.GetOutputPort());
transformMap.SetScale(scale, scale, scale);
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(transformMap.GetOutputPort());
vtkActor actor = vtkActor.New();
actor.SetTexture(texture);
actor.GetProperty().SetColor((double)color.R / 255, (double)color.G / 255, (double)color.B / 255);
actor.GetProperty().SetOpacity(alpha);
actor.SetMapper(mapper);
actor.GetProperty().SetInterpolationToPhong();
renderer.AddActor(actor);
编辑
关闭vtkTextureMapToSphere的PreventSeam选项后,颜色差异消失了。但是,无论您从网格的两个以上表面(例如网格中存在空腔的位置)观察,阴影仍然存在显着差异。
【问题讨论】:
-
经过一些实验,我注意到关闭 vtkTextureMapToSphere 的 PreventSeams 会降低效果。尽管如此,使用和不使用纹理对象的渲染之间还是存在显着差异。