【问题标题】:How to visualize 3D scalar field with Helix.SharpDX Volume Rendering?如何使用 Helix.SharpDX 体积渲染可视化 3D 标量场?
【发布时间】:2019-06-26 21:38:11
【问题描述】:

我的任务是使用 Helix Toolkit 可视化 3D 标量场。输入数组包含没有限制的双精度值,但通常介于 [-50000, +50000] 之间。标量值影响立方体的颜色:最小值为蓝色,0 - 白色,最大值 - 红色。所有其他颜色值都根据该值进行插值。

现在我正在尝试了解颜色传输图在 HelixToolkit.Wpf.SharpDX 中的工作原理。为此,我创建了一个简单的 2x2x1 标量字段。

MainWindow.xaml

<hx:Viewport3DX
    Name="view1"
    Grid.Row="1"
    BackgroundColor="SkyBlue"
    Camera="{Binding Camera}"
    EffectsManager="{Binding EffectsManager}"
    EnableDesignModeRendering="True"
    UseDefaultGestures="False"
    CameraRotationMode="Trackball">
    <hx:Viewport3DX.InputBindings>
        <KeyBinding Key="B" Command="hx:ViewportCommands.BackView" />
        <KeyBinding Key="F" Command="hx:ViewportCommands.FrontView" />
        <KeyBinding Key="U" Command="hx:ViewportCommands.TopView" />
        <KeyBinding Key="D" Command="hx:ViewportCommands.BottomView" />
        <KeyBinding Key="L" Command="hx:ViewportCommands.LeftView" />
        <KeyBinding Key="R" Command="hx:ViewportCommands.RightView" />
        <KeyBinding Command="hx:ViewportCommands.ZoomExtents" Gesture="Control+E" />
        <MouseBinding Command="hx:ViewportCommands.Rotate" Gesture="RightClick" />
        <MouseBinding Command="hx:ViewportCommands.Zoom" Gesture="MiddleClick" />
        <MouseBinding Command="hx:ViewportCommands.Pan" Gesture="LeftClick" />
    </hx:Viewport3DX.InputBindings>
    <hx:VolumeTextureModel3D VolumeMaterial="{Binding VolumeMaterial}" />
</hx:Viewport3DX>

MainWindowViewModel.cs

public MainWindowViewModel()
{
    Nx = 2;
    Ny = 2;
    Nz = 1;

    var m = new VolumeTextureDiffuseMaterial();

    var data = new[] {0.0f, 0.25f, 0.5f, 1.0f};

    var gradients = VolumeDataHelper.GenerateGradients(data, Nx, Ny, Nz, 1);
    m.Texture = new VolumeTextureGradientParams(gradients, Nx, Ny, Nz);
    m.TransferMap = new[]
        {Colors.Red.ToColor4(), Colors.Blue.ToColor4(), Colors.Lime.ToColor4(), Color4.White};
    m.SampleDistance = 0.1;
    m.Freeze();

    VolumeMaterial = m;
}

我希望有 4 个不同颜色的不同立方体,例如(由于插值和采样,立方体之间可能存在渐变):

但我不断得到这种奇怪的三角形混色:

颜色传输图数组的工作原理是什么?如何使用 HelixToolkit.SharpDX 的体积渲染来获得所需的立方体效果?

【问题讨论】:

  • 请记住:如果 Helix 或任何其他软件包对于相对简单的用例来说过于繁重和复杂,您可以随时 do it yourself...:O)跨度>
  • HERE 一个示例 5x5x5 体积渲染,仅使用层之间的 Alpha 通道,显然是相同的颜色。没有第 3 方库,只有普通的 WPF。
  • 9x9x9 五色图层。
  • 15x15x15 PIXELATED SPHERE.
  • @jsanalytics,您想通过演示实现什么目标?你不提供任何代码或类似的东西。纯 WPF3D 需要手动实现这么多基本的东西(如轨迹球鼠标旋转等)。此外,WPF3D 难以应对高负载(例如 1000x1000x1000 立方体)。这就是我们项目中使用 HelixToolkit.SharpDX 的原因。这里已经实现了很多东西,DirectX 可以以 60 fps 的速度绘制非常复杂的场景。

标签: c# helix-3d-toolkit volume-rendering


【解决方案1】:

您可以尝试参考本教程。 Tutorial 1Tutorial 2

Helixtoolkit 就是这样实现体积渲染的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多