我正在尝试将文本绘制到带纹理的网格对象上。网格基本上是一个立方体,已粘贴到屏幕的前面。(总的来说,我的目标是菜单系统)。经过一番谷歌搜索后,我发现关于如何将文本绘制到纹理的信息非常少。我读过它应该像制作纹理一样简单,将其设置为渲染源然后绘制到它,但我无法弄清楚这一点。
任何想法、建议或带有必要函数调用的骨架代码让我快速开始?
我正在尝试将文本绘制到带纹理的网格对象上。网格基本上是一个立方体,已粘贴到屏幕的前面。(总的来说,我的目标是菜单系统)。经过一番谷歌搜索后,我发现关于如何将文本绘制到纹理的信息非常少。我读过它应该像制作纹理一样简单,将其设置为渲染源然后绘制到它,但我无法弄清楚这一点。
任何想法、建议或带有必要函数调用的骨架代码让我快速开始?
有关一些非常有用的文档,请参阅创建纹理资源中的“渲染到纹理”部分。这提供了几个示例代码片段,可以帮助您上路。
当您需要将文本渲染到纹理时,您应该按照 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);
请注意,精灵渲染会更改混合状态,因此请务必将其设置为默认值。如果您只需要“平面上的文本”(网格上没有纹理映射),您可以将精灵渲染到主场景而不是纹理。