1

我正在使用固定函数管道制作 DirectX 9 C++ 应用程序,给定每个顶点的预计算光照,(不管法线/等)如何将其应用于最终图像?

我目前正在使用带纹理的图元,我正在尝试整体更改颜色(在整个图元上 - 而不是使用渐变),并且由于灯光的数量和设计的应用程序,我必须预先计算照明即使在低端机器上也能获得不错的帧率。(即每盏灯一个通过是一个太多)

我的顶点结构看起来像

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

基本上我想添加一个光照值并使用每个顶点的固定函数管道应用它(不使用实际的“灯光”)

任何帮助将不胜感激...

4

1 回答 1

0

我不再使用固定功能管道,因为我使用的着色器几乎与该领域的其他任何人一样,我已经忘记了细节,因此我无法提供完整且随时可用的答案,但这可能会给你一个开始:

每顶点颜色状态 (Direct3D 9)

您需要像这样使用 FVF:

D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE

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

m_pDevice9->SetRenderState(D3DRS_COLORVERTEX, TRUE);

m_pDevice9->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

如果您不想使用任何照明,一种选择是使用具有黑色漫反射分量和白色环境分量的单一定向光。这样,照明将完全平坦,并且只会使用材质颜色。

也就是说,你真的需要关心固定函数渲染吗?使用着色器很容易实现这一点,你会发现很多人可以给你建议如何做到这一点。

于 2011-03-09T14:03:27.410 回答