【问题标题】:Loading a .bmp file and rendering it as the background in DirectX 11加载 .bmp 文件并将其渲染为 DirectX 11 中的背景
【发布时间】:2016-01-26 13:44:29
【问题描述】:

我花了一个下午查看有关上下文/表面的文档并遵循了很多指南,但我只是不明白这是如何完成的。

我只想使用位图(已加载)并将其作为背景放入我的场景中。

听说要先用surface,然后画出来,但是我完全不知道怎么获取surface或者怎么给它分配bitmap。

感谢任何帮助。

【问题讨论】:

  • 由于您是 DirectX 11 的新手,您应该看看 DirectX Tool Kit。您可以轻松地使用SpriteBatch 类来渲染使用DDSTextureLoaderWICTextureLoader 类加载的纹理。请特别参阅Sprites and textures 课程。
  • 会的。我实际上是在 DirectX 9 中学习的,但我一生都不会在我的机器上安装,所以我必须尝试使用​​ 11 向后工作。
  • 旧版 DirectX SDK(2010 年 6 月)应安装在现代版本的 Windows 上,但需要一些 workarounds。它还有一些方面不适用于 DirectX 11.1 Runtime 或更高版本(即 Windows 8 或更高版本,以及带有 KB2670838 更新的 Windows 7 SP1)。见DirectX 11.1 and Windows 7。使用 VS 2012 或更高版本时也存在重要差异。

标签: visual-c++ directx-11


【解决方案1】:

是的,一种方法是使用 Surface,但我会推荐这种方法

我不知道你是如何加载位图的,无论如何你可以通过这种方式使用位图作为背景

//Make texture object
LPDIRECT3DTEXTURE9 m_myBitmapTexture;

// During Initialization, Load texture from file
if(FAILED(D3DXCREATETEXTUREFROMFILE(device,"filepath\\file.bmp", 0, 0, 0, D3DMFT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFULT, D3DX_DEFAULT, 0x00000000, NULL, NULL, *m_myBitmapTexture)))
   return E_FAIL;

// During Rendering, set texture
device->SetTexture(0, m_myBitmapTexture);
device->SetStreamSource(0, yourBuffer, 0, size(YourBufferStruct));
device->SetFVF(yourTextureFVF); // Setting flexible vertex format
device->DrawPrimitive(topologyType, startindex, totalIndex);

您只需要确保您的缓冲区也应该有纹理坐标和着色器

struct YourBufferStruct
{
   D3DXVECTOR3 position;
   D3DXVECTOR2 textureCoord;
}



// Define your flexible vertex format, i am just adding position and texture,   
//well you can add color, normal whatever extra you want
     #define yourTextureFVF (D3DFVF_XYZ | D3DFVF_TEX1) 

现在也将纹理坐标添加到着色器

更多详情可以参考这个链接https://msdn.microsoft.com/en-us/library/windows/desktop/bb153262(v=vs.85).aspx

【讨论】:

  • 非常感谢!我相信这就是我所需要的。
  • 请注意,这是 10 年前的一个很好的答案。 Direct3D 9 已被弃用,在现代版本的 Windows 上几乎没有调试支持。所有版本的 D3DX 包括 D3DX9、D3DX10 和 D3DX11 都已弃用,仅在旧版 DirectX SDK 中可用,该 SDK 本身已弃用,并由也已弃用的旧版 DirectSetup 包部署。见MSDN
  • 仍然有很多组织在使用 DirectX SDK,现在 DirectX SDK 是 Windows SDK 的一部分,并且两者的大部分方法几乎相同。
  • 我可以使用 LPDIRECT3DTEXTURE9 m_myBitmapTexture;在 DirectX 11 中?
  • Windows SDK 中的方法与 Direct3D 9 API 相同,但不是 D3DX9。 D3DXCREATETEXTUREFROMFILE 仅在旧版 DirectX SDK 中。不,这些代码都不适用于 DirectX 11。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2019-04-16
相关资源
最近更新 更多