我剛開始使用着色器使用XNA,並且遇到了幾乎不能立即理解的行爲。是否有需要在着色器之間重置的狀態
我創建了一個簡單的場景帶有紋理箱和一些地面爲它坐,使用重複的紋理單一紋理四組成(所以我的紋理座標,其中來自0,0 10,10,使其重複10倍)。最初這兩個都使用BasicEffect類。
然後我按照教程創建了我的第一個着色器,並將其用於多維數據集 - 沒有什麼比使用着色器能夠在座標座標處返回紋理的顏色,併爲我提供與之前相同的紋理多維數據集。
然而奇怪的事情發生 - 突然地面幾乎全是純色2個模糊的邊緣和角落裏的適當紋理的一個實例。紋理不再重複。我改變了我繪製立方體和地面的順序,只是對立方體解決問題發表評論。
然後我看着在我的shader代碼,大多隻是從教程複製,並認爲這指明線夾AddressU和AddressV。改變這種包裝固定了一切,但仍然給我一個問題 - 爲什麼一個着色器的紋理環繞邏輯會影響基本着色器?這是一個正常的行爲,是否有某種我需要做的狀態保存,或者這是否表明我的代碼中可能有另一個錯誤?
groundEffect.View = camera1.View; // BasicEffect
groundEffect.Projection = projection;
groundEffect.World = Matrix.CreateTranslation(0, -1.5f, 0);
groundEffect.TextureEnabled = true;
groundEffect.Texture = groundTexture;
GraphicsDevice.Indices = groundIndexBuffer;
GraphicsDevice.SetVertexBuffer(groundVertexBuffer);
foreach (EffectPass pass in groundEffect.CurrentTechnique.Passes)
{
pass.Apply();
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, groundVertexBuffer.VertexCount, 0, groundIndexBuffer.IndexCount/3);
}
shaderEffect.Parameters["View"].SetValue(camera1.View);
shaderEffect.Parameters["Projection"].SetValue(projection);
shaderEffect.Parameters["World"].SetValue(modelPosition);
shaderEffect.Parameters["ModelTexture"].SetValue(boxTexture);
GraphicsDevice.Indices = model.IndexBuffer;
GraphicsDevice.SetVertexBuffer(model.VertexBuffer);
foreach (EffectPass pass in shaderEffect.CurrentTechnique.Passes)
{
pass.Apply();
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, model.VertexBuffer.VertexCount, 0, model.IndexBuffer.IndexCount/3);
}