Текстурирование ландшафта приводит к сбою Windows Phone (без исключения) или модели не отображаются - PullRequest
0 голосов
/ 20 ноября 2011

Я вызываю этот метод на LoadContent () - после загрузки текстуры heightMap:

    private void setEffect(Texture2D heightMap)
    {
        m_BasicEffect = new BasicEffect(this.GraphicsDevice);
        m_BasicEffect.EnableDefaultLighting();
        m_BasicEffect.FogEnabled = true;
        m_BasicEffect.FogStart = 300f;
        m_BasicEffect.FogEnd = 1000f;
        m_BasicEffect.FogColor = Color.Black.ToVector3();
        m_BasicEffect.TextureEnabled = true;         
        m_BasicEffect.World = Matrix.Identity;
        m_BasicEffect.Texture = heightMap;
    }

Теперь, если я изменю «m_BasicEffect.TextureEnabled = true;» to "m_BasicEffect.TextureEnabled = false;" это работает, но текстура (конечно) не показывает.

Метод Draw выглядит следующим образом:

    public override void Draw(Microsoft.Xna.Framework.GameTime i_GameTime)
    {
        Matrix worldMatrix = Matrix.CreateTranslation(-m_TerrainWidth / 2.0f, 0, m_TerrainHeight / 2.0f) * Matrix.CreateRotationY(m_Angle);

        m_BasicEffect.View = MyCamera.View;
        m_BasicEffect.Projection = MyCamera.Projection;
        m_BasicEffect.World = worldMatrix;

        foreach (EffectPass pass in m_BasicEffect.CurrentTechnique.Passes)
        {
            pass.Apply();
            Game.GraphicsDevice.Indices = myIndexBuffer;
            Game.GraphicsDevice.SetVertexBuffer(myVertexBuffer);
            Game.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, m_VerticesNormalLength, 0, m_IndicesLength / 3);               
        }
    }

Более того, если я попытаюсь нарисовать Модели после слов, это вызовет исключение: «Текущее объявление вершины не включает в себя все элементы, необходимые текущему вершинному шейдеру». То, как я пытаюсь нарисовать модели:

    public override void Draw(GameTime i_GameTime)
    {
        Matrix[] transforms = new Matrix[MyModel.Bones.Count];
        MyModel.CopyAbsoluteBoneTransformsTo(transforms);
        foreach (ModelMesh mesh in MyModel.Meshes)
        {               
            foreach (BasicEffect be in mesh.Effects)
            {
                be.EnableDefaultLighting();
                be.Projection = MyCamera.Projection;
                be.View = MyCamera.View;                    
                be.World = GetWorld() * mesh.ParentBone.Transform;
            }                
            mesh.Draw();
        }
    }

Что вы думаете об этом? Заранее спасибо.

...