您好。我有一个使用directX10和C ++的小游戏。但是,我开始使用meshloaderfromOBJ10直接X样本制作它,我刚刚在它上面构建。然而,我的物体看起来都是纯黑色的,尽管它们有颜色。
我知道这是因为光线,但似乎改变任何与光线有关的代码都不会对此示例产生任何影响。
我想知道是否有人知道一种简单的(ish)方法来点亮一切,就像在任何地方都让它变得明亮一样。我不关心阴影或反射或类似的东西,因为我正在做的事情没有必要,但看到我的物体而不仅仅是轮廓会很好。
干杯。
答案 0 :(得分:1)
然而,我的物品看起来都是纯黑色的,但是它们有颜色。
如果着色器需要设置纹理并从该纹理中读取材质信息,并将空纹理设置为相应的纹理阶段(采样器或DX10中调用的任何内容),则着色器将从该空纹理中读取黑色。无论使用多少个灯光,没有镜面反射/发光或反射贴图的黑色材料总是看起来是黑色的。
在没有纹理的材质/对象上使用白色纹理(假设着色器了解材质颜色并将其与纹理颜色相乘)。或者切换到DX9并使用固定功能管道将缺失的纹理视为白色。或者修改着色器以支持没有纹理的材质。
只需点亮所有内容的方法,就像让它变得光明一样
您可以使用“全局”环境(您必须在着色器中添加它,因为D3D10没有固定的功能管道)。但是,你真的不想要它,因为
我不关心阴影
你真的关心阴影,但还不知道。全局环境值将使所有材料均匀着色,没有任何渐变。这意味着如果你有一个无纹理的复杂网格,你将无法弄清楚你正在看什么,纹理的一切看起来都很难看。此外,黑色材料仍将保持黑色。因此,要“让它变得光明无比”,你需要“太阳” - 定向光源或非常大的光源。