DirectX9中的每个顶点预先计算的照明使用固定功能渲染管道

时间:2011-02-13 07:05:31

标签: c++ lighting directx-9

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

我目前正在使用纹理基元,我正在尝试整体改变颜色(在整个基元上 - 而不是使用渐变)我必须预先计算灯光,因为灯的数量和应用被设计为即使在低端机器上也能获得不错的帧速率。 (IE每次通过一次通过太多了)

我的顶点结构看起来像

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

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

非常感谢任何帮助......

1 个答案:

答案 0 :(得分: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);

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

那就是说,你真的需要关注固定功能渲染吗?使用着色器可以很容易地实现这一点,你可以找到很多人能够给你建议如何做到这一点。