【问题标题】:VTK (Activiz 5.8.0) texture influencing opacityVTK (Activiz 5.8.0) 纹理影响不透明度
【发布时间】: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 会降低效果。尽管如此,使用和不使用纹理对象的渲染之间还是存在显着差异。

标签: c# vtk


【解决方案1】:

好吧,如果我了解问题的当前状态,您是在问如何去除由网格中的口袋引起的较暗颜色。如果这是正确的,您只需要弄清楚如何为部分透明的网格激活遮挡剔除。不幸的是,我不熟悉 Activiz,所以我无法提供详细信息,但在 XNA (DirectX) 中,您需要更改 GraphicsDevice.BlendState 或创建自定义着色器,具体取决于您的最终目标。

我知道这并不多,但我希望它有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2015-03-20
    相关资源
    最近更新 更多