【问题标题】:Translucency issue using SharpDX on WinRT在 WinRT 上使用 SharpDX 的半透明问题
【发布时间】:2014-04-09 05:51:21
【问题描述】:

我在 winrt 中使用 sharpdx 时遇到半透明问题。 首先,我的代码:

在 Mainpage.xaml 中,我添加了一个如下所示的 swapchainPanel:

<Grid>
  <SwapChainPanel  x:Name="Panel" />
</Grid>  
// There is nothing else...

我使用与来自 github 的示例相同的类来渲染 3D 模型:

// Initialisation part
graphicsDeviceManager = new GraphicsDeviceManager(this);
graphicsDeviceManager.PreferredGraphicsProfile = new FeatureLevel[] { FeatureLevel.Level_11_0, };
graphicsDeviceManager.DepthBufferShaderResource = true;

还在同一个类中,加载内容时:

models = new List<Model>();
foreach (var modelName in new[] {"dude"}) 
{
   model = Content.Load<Model>(modelName); 
   BasicEffect.EnableDefaultLighting(model, true); 
   models.Add(model);
}
model = models[0]; 
// Instantiate a SpriteBatch
spriteBatch = ToDisposeContent(new SpriteBatch(GraphicsDevice)); 
base.LoadContent();

最后,绘制部分:

// Clears the screen with the Color.CornflowerBlue
   GraphicsDevice.Clear(Color.CornflowerBlue);
   model.Draw(GraphicsDevice, world, view, projection);
   base.Draw(gameTime);

一切都很好,但这是我为纹理模型得到的(注意到屏幕截图上的半透明有点棘手......)

这是我使用非纹理模型所拥有的...

我认为它来自 Alpha 模式下的渲染。我试图设置 BlendState 但我得到了一些例外,因为我没有使用正确的参数。

【问题讨论】:

  • 看起来像深度模板缓冲区问题,因为 ModelRendering 示例正在工作,您应该从它重新开始并逐步检查您的更改破坏了什么

标签: c# windows-runtime sharpdx


【解决方案1】:

按照@xoofx 的建议进行了几次逐步检查后确定(谢谢:))

我发现使用 SharpDx 存在一些问题。

  • ModelRendering 示例带有 .dae 模型。当我启动此示例时,一切正常,没有问题。

  • 当我加载在 .dae、.fbx 和 .obj 上导出的模型时,半透明出现在 .dae、.fbx 中,但工具包编译器无法编译与 .mtl 关联的 .obj 文件,因为某些原语和文件标签的格式不正确。 (即使我在导出时检查了 Blender 中的 XNA 兼容性)

那么我做了什么来解决我的问题?

1 - 减少或确保我的图形配置文件是正确的配置文件,因为我使用的英特尔图形 4000 尚不支持 directX 11.1...

 graphicsDeviceManager.PreferredGraphicsProfile = new FeatureLevel[] { FeatureLevel.Level_11_0, };

2 - 删除工具包编译器在 Debug 目录中生成的所有内容。我认为当文件已经存在/编译时,编译器不会生成两次文件。

3 - 最后,我注意到我的问题图片上所有白色/透明的部分都带有纹理。那种颜色来自这个组合:

  • 我已在模型或模型部件上应用纹理。
  • 很遗憾,Toolkit 编译器找不到纹理或纹理值无效。
  • 但是当您在模型上应用纹理时,将激活表面镜面反射高光,尤其是 MaterialSpecular(您可以在 VisualStudio 中的模型部件属性上看到。MaterialSpecular 有 4 个值:R、G、B 和 A 用于 Alpha始终将 Alpha 设置为 1。我的 aplha 有时为 0 :( )。

所以光线被反光了,tadaaa 我们得到了一个漂亮的半透明模型 :)

另外,我将我的模型导出为 .fbx,并确保在没有纹理的部分上显示默认的灰色素色。

4 - 最后但同样重要的是,在模型上启用默认闪电。

 BasicEffect.EnableDefaultLighting(model, true); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多