【问题标题】:DirectX LightingDirectX 照明
【发布时间】:2012-03-31 12:15:49
【问题描述】:

嗨。我有一个使用 directX10 和 C++ 的小游戏。但是,我开始使用来自 OBJ10 的直接 X 示例的 meshloader 来制作它,并且我一直在构建它。然而,我的对象虽然有颜色,但看起来都只是纯黑色。

我知道这是因为灯光,但似乎更改任何与灯光有关的代码在此示例中没有任何作用。

我想知道是否有人知道一种简单(ish)的方法来照亮所有东西,比如让它到处都亮。我不关心阴影或反射或类似的东西,因为我正在做的事情没有必要,但很高兴看到我的对象而不仅仅是剪影。

干杯。

【问题讨论】:

  • 我认为通常您可以在 HLSL 着色器中指定 RGB 格式的输出颜色(范围 0.f ... 1.f)。 “剪影”是什么意思?线框?

标签: directx lighting


【解决方案1】:

但是,我的对象虽然有颜色,但看起来都只是纯黑色。

如果着色器希望设置纹理并从该纹理读取材质信息,并且您将空纹理设置为相应的纹理阶段(采样器或 DX10 中调用的任何东西),着色器将从该空纹理读取黑色。而没有镜面反射/自发光或反射贴图的黑色材质,无论您使用多少灯,都将始终看起来是黑色的。

在没有纹理的材质/对象上使用白色纹理(假设您的着色器了解材质颜色并将其与纹理颜色相乘)。或者切换到 DX9 并使用将丢失的纹理视为白色的固定功能管道。或者修改着色器以支持没有纹理的材质。

只照亮所有东西的方法,比如让它到处都亮

您可以使用“全局”环境(您必须在着色器中添加它,因为 D3D10 没有固定功能管道)。然而,你并不是真的想要它,因为

我不在乎阴影

您实际上关心阴影只是还不知道。全局环境值将使所有材质均匀着色,没有任何渐变。这意味着如果你有一个无纹理的复杂网格,你将无法弄清楚你在看什么,所有有纹理的东西都会看起来很丑。此外,黑色材料仍将保持黑色。所以要“让它无处不在”,你需要“太阳”——定向光源或一个非常大的点光源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多