当我尝试渲染包含透明对象(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选项后,颜色差异消失。但是,在通过网格的两个以上曲面进行查看的任何位置(例如,网格中有空洞的地方),着色方面仍然存在明显的差异。


发布于 2017-05-09 06:28:46
嗯,如果我理解这个问题的当前状态,你是在问如何去除由网格中的口袋引起的较暗的颜色。如果这是正确的,你只需要弄清楚如何为你的半透明网格激活遮挡剔除。不幸的是,我不熟悉Activiz,所以我不能提供细节,但是在XNA (DirectX)中,您可能需要更改GraphicsDevice.BlendState或创建自定义着色器,这取决于您的最终目标是什么。
我知道这不是很多,但我希望它能有所帮助。
https://stackoverflow.com/questions/43671059
复制相似问题