【问题标题】:Use Direct3D9 CreateSphere with Direct3D11 device将 Direct3D9 CreateSphere 与 Direct3D11 设备一起使用
【发布时间】:2015-01-12 13:53:42
【问题描述】:

我是 SlimDX 的新手,并且在旧系统中工作。正在使用 Direct3D11 设备,但我正在尝试使用 CreateSphere:

SlimDX.Direct3D9.Mesh.CreateSphere(Direct3D9.Device,...)

有什么方法可以在 Direct3D11 设备上使用 CreateMesh?转换为 Direct3D9.Device 不是有效的转换。我不明白为什么较新的 API 会删除像创建球体这样简单的功能。

【问题讨论】:

    标签: c# slimdx


    【解决方案1】:

    您的问题的问题在于您混淆了两个截然不同的事物。

    DirectX API 从来没有 CreateSphere 方法。它包含在帮助程序库 DXUT 中,该库已被 Microsoft 停用。

    只需编写您自己的或使用预制的网格。如果您不知道如何操作,那么您可能过于依赖帮助程序库。

    当然,创建 3D 球体在某种程度上是一项简单的任务,这种感觉背叛了您的理解水平。它不是。甚至有很多不同的方法可以生成 3D 基元,这在很大程度上取决于你在做什么,这可能是 DXUT 最初停产的原因之一。有很多方法可以排列球体的顶点(UV 球体、Icosphere 等),有很多方法可以索引这些顶点,许多不同的顶点格式需要根据您的操作进行不同的填充。

    当这些问题根本不存在时(在可编程图形管道时代之前),拥有这些帮助程序库仍然是有意义的。旧的固定管道是为相对简单的任务预先制作的,现在您拥有更大的灵活性,因为必须了解一些事情是如何完成的——比如 HLSL、纹理映射、光照计算等。

    【讨论】:

    • 我知道 CreateSphere 从来没有直接在 DirectX 中,这就是为什么我提到 SlimDX,它是专门为帮助库而构建的。在这种情况下,我想要创建球体 CreateSphere() 的确切类型。如果我只有 Direct3D11 设备,有没有办法使用这种方法?
    • @Brandon 据我所知,SlimDX 实际上正在调用 DXUT 方法,而 DX11 不存在这些方法(同样,有充分的理由)。例如,您可以使用 DX9 方法然后手动转换网格,但实际上没有太多理由这样做。只需拥有一个模型或按照您想要的方式创建网格。 DXUT 方法确实适用于可预编程的 GPU 模型。成为可编程 GPU 世界的本地人,旧模型很久以前就已经死了。 SlimDX 本质上不是一个帮助库——它是一个轻量级的 DirectX 包装器。
    • 对于 C++,Direct3D 11 的 DirectX Tool Kit 库包括一个包含球体的 GeometricPrimitive 类。希望 SlimDX 能尽快看到这一点。
    • 好吧,如果您稍微看看周围,就会有很多帮助库 - 例如,github.com/mrvux/FeralTic
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多