gpt4 book ai didi

c++ - 使用固定功能渲染管道在 DirectX9 中按顶点预计算光照

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:45 24 4
gpt4 key购买 nike

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

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

我的顶点结构看起来像

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

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

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

最佳答案

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

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);

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

也就是说,您真的需要关注固定函数渲染吗?使用着色器可以很容易地实现这一点,并且您会发现很多人能够为您提供如何实现的建议。

关于c++ - 使用固定功能渲染管道在 DirectX9 中按顶点预计算光照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com