DirectX 10将文本绘制到纹理

时间:2010-11-17 06:23:44

标签: c++ directx textures directx-10 render-to-texture

我正在试图将文本绘制到纹理网格对象。网格基本上是一个粘贴到屏幕前面的立方体。 (总的来说,我的目标是菜单系统)。经过一段谷歌搜索后,我发现很少有关于如何将文本绘制到纹理的信息。我已经读到它应该像制作纹理一样简单,将其设置为渲染源然后绘制到它,但我无法想出这个。

任何有必要功能的想法,建议或骨架代码都会给我一个快速启动?

2 个答案:

答案 0 :(得分:2)

有关非常有用的文档,请参阅Creating Texture Resources中的“渲染到纹理”部分。这提供了几个示例代码片段,可以帮助您继续前进。

答案 1 :(得分:1)

当您需要将文本渲染为纹理时,您应该像Adam建议的那样将渲染设置为纹理,以实际渲染一些文本,您可以执行此操作

创建字体和精灵

D3DX10CreateFont(device, 16, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Verdana", &font);
D3DX10CreateSprite(device, 256, &sprite);

并渲染

hr = sprite->Begin(0);
left = L"Some text to render";
RECT r;
r.top = 0;
r.bottom = window->height;
r.left = 0;
r.right = window->width;
hr = font->DrawTextW(sprite, left.c_str(), -1, &r, DT_LEFT | DT_TOP | DT_CALCRECT, D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f));
hr = font->DrawTextW(sprite, left.c_str(), -1, &r, DT_LEFT | DT_TOP, D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f));
//hr = sprite->Flush();
hr = sprite->End();
device->OMSetBlendState(NULL, 0, 0xffffffff);

请注意,精灵渲染会更改混合状态,因此请务必将其设置为默认值。如果您只需要“普通表面上的文字”(网格上没有纹理贴图),您可以将精灵渲染到主场景而不是纹理。