2010-09-21 67 views
1

我來自OpenGL的土地,所以我與glColor函數類似,以及它們如何使用默認GL混合方法輸出的紋理。我似乎無法讓GraphicsDevice.BlendFactor像glColor一樣工作,但我可能沒有使用正確的混合設置。如果不使用着色器,可以在XNA中獲得相同的功能嗎?例如,我想將當前顏色設置爲RGB(1,0,0),並且我希望白色雲在輸出時顯示爲紅色。XNA glColor等效

回答

3

無法在設備上設置顏色。顏色(即使在OpenGL中)是一個頂點的東西。 OpenGL只是讓你設置所有頂點的默認值。

如果您在XNA中使用SpriteBatch,那麼它將使用頂點處理所有魔術,並且其大部分Draw(...)重載都有color參數。

如果您自己發送頂點到卡上,請確保您的頂點格式包含Color組件。 Here's a tutorial關於如何創建自定義頂點格式(儘管它不包含Color組件)。

或者,您可以使用其中一種內置格式,如VertexPositionColorVertexPositionColorTexture

值得指出的是,在XNA中沒有「沒有着色器」。您可以使用BasicEffect(或其他內置效果之一),它可以使用顏色數據完成預期的工作,也就是說,它可以爲您的紋理着色。並且SpriteBatch也在內部使用着色器。

+1

我試圖實現與BasicEffect這種效果。我更願意說沒有'自定義'着色器。看起來你甚至不能在這個設備上自己創建=(..我有一個有數百個多邊形的對象,我需要對顏色和alpha進行脈衝排序,從設備上解除頂點緩衝區對象並重置所有頂點的頂點顏色和alpha對我來說似乎不是那麼好,而BlendFactor似乎對我沒有任何幫助,也許我錯過了一些東西? – Kyle 2010-09-22 01:53:18

+0

啊 - 所以這更多的是關於BasicEffect的一個問題,嘗試一下照明選項,我認爲'AmbientLightColor'會做你想做的(或者如果你的模型被點亮了,那麼就是'DiffuseColor') – 2010-09-22 02:44:41

+0

DiffuseColor絕對有效!使用Alpha給出了整個顏色/ alpha功能,並且這個功能可以與LightingEnabled:false一起使用,所以我相信它也可以保存在一些着色器操作中。感謝您的幫助! – Kyle 2010-09-22 03:15:06

2

您還可以使用BasicEffect(或其他效果)的Fog和Alpha設置以固定的顏色繪製紋理,並仍然使用它們的原始Alpha值(我使用它來設置實體在獲取時閃爍白色被子彈擊中)。

例子:

// Draw a silhouette in solid orange at 75% opacity 
basic_effect.FogColor = new Vector3(1.0f, 0.5f, 0.0f); 
basic_effect.Alpha = 0.75f; 
basic_effect.FogEnabled = true; 
basic_effect.FogStart = 1; 
basic_effect.FogEnd = 0; 
... draw triangles ...