2012-03-31 59 views
2

嗨。我有一個使用directX10和C++的小遊戲。但是,我開始使用meshloaderfromOBJ10直接X樣本,並且剛剛構建它。然而,儘管它們有顏色,但我的物體看起來都是純黑的。DirectX Lighting

我知道這是因爲光,但看起來改變任何代碼做光與這個樣本沒有任何關係。

我想知道是否有人知道一個簡單的(ish)方法來點亮所有東西,就像在任何地方變得明亮一樣。我不關心陰影或反射或任何類似的事情,因爲我正在做的事情沒有必要,但是能夠看到我的對象而不是僅僅是剪影是很好的。

乾杯。

+0

我想通常你可以在HLSL着色器中指定RGB格式的輸出顏色(範圍爲'0.f ... 1.f')。 「剪影」是什麼意思?線框? – phimuemue 2012-03-31 20:28:19

回答

1

但是,我的物體都看起來只是普通的黑色,雖然他們有顏色。

如果着色器需要的紋理進行設置,並從紋理讀取材料的信息,並設置空紋理與質感階段(採樣器或任何它被稱爲在DX10),着色器將來自空紋理讀取黑色。無論使用多少光源,沒有鏡面反射/發射或反射貼圖的黑色材料都會顯示爲黑色。

在沒有紋理的材質/物體上使用白色紋理(假設着色器理解材質顏色並將其與紋理顏色相乘)。或者切換到DX9並使用固定功能管道,將缺失的紋理視爲白色。或者修改着色器以支持沒有紋理的材質。

方法,只是一切事情,如使其光亮到處

您可以使用「全球」環境(這你必須在你的shader增加,因爲D3D10沒有固定的功能管道)。但是,你真的不想要它,因爲

我不關心陰影

你真正關心的陰影只是不知道它。全局環境值將使所有材料均勻着色,無任何漸變。這意味着,如果你有一個沒有紋理的複雜網格,你將無法弄清楚你在看什麼,並且所有紋理都看起來很醜。此外,黑色材料仍然保持黑色。所以要「讓它隨處可見」,你需要「太陽」 - 定向光源或非常大的點光源。