当我尝试渲染包含透明对象(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选项后,颜色的差异消失了。但是,无论您通过网格的两个以上表面查看(例如网格中有空洞的位置),阴影中仍然存在明显的差异。
答案 0 :(得分:0)
好吧,如果我理解问题的当前状态你问的是如何去除网格中口袋造成的深色。如果这是正确的,您只需要弄清楚如何激活部分透明网格的遮挡剔除。不幸的是,我不熟悉Activiz所以我无法帮助解决细节,但在XNA(DirectX)中,您需要更改GraphicsDevice.BlendState或根据您的最终目标创建自定义着色器。
我意识到它并不多,但我希望它有所帮助。