2

使用 DirectX 9 中的固定函数渲染管道,通过执行以下操作很容易设置纹理和渲染顶点:

struct vert { float x, y, z, u, v; };

device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
device->SetTexture(0, MyTexture);

//Draw vertices here

但是,我想为每个顶点添加一个额外的浮点值,然后乘以从纹理输出的结果颜色。(因此该值将介于 0 和 1 之间)

EG(伪代码)Colour = TextureColour(u, v) * CustomFloat

我认为有一种使用方法device->SetTextureStageState,但我不确定该怎么做......有人可以帮助我吗?

4

2 回答 2

2

您可以将一维线性灰度纹理设置为第二个纹理,配置为调制第一个纹理。然后为第二个纹理发送一个纹理坐标(我认为通过为它指定 D3DFVF_TEXCOORDSIZE1 )。在这里推测 - 自己没有尝试过。

解释你的伪代码:Colour = Texture0Colour(u0, v0) * Texture1Colour(u1)

编辑我认为你需要:

device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX2 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE1(1)) 

MSDN 也有类似的例子

于 2011-03-09T16:15:36.460 回答
0

这有望帮助您入门:Per-Vertex Color State (Direct3D 9)

您需要像这样使用 FVF:

D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE

并通过以下方式启用使用顶点颜色:

m_pDevice9->SetRenderState(D3DRS_COLORVERTEX, TRUE);

m_pDevice9->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

这是另一个链接,显示了有关如何设置纹理组合器的更多详细信息。该示例使用 alpha 组合,但将其修改为使用颜色组合器应该很简单。

于 2011-03-09T13:55:08.867 回答