Эффект рисования XNA с несколькими текстурами

В Xna я хотел бы нарисовать свою модель с пользовательским эффектом.. ТАК Я хотел бы получить текстуры из сетки.

 foreach (ModelMesh mesh in model.Meshes)
            {

                foreach (ModelMeshPart part in mesh.MeshParts)
                {
                    

                    effect.Parameters["World"].SetValue(World );
                    effect.Parameters["View"].SetValue(View);
                    effect.Parameters["Projection"].SetValue(Projection);
                    effect.Parameters["TextureEnabled"].SetValue(true);

                    
                    
                    var basicEffect = part.Effect as BasicEffect;
                    if (basicEffect != null)
                    {
                        Texture2D texName = basicEffect.Texture;
                        effect.Parameters["Texture"].SetValue(texName);

                    }

                    part.Effect = effect;

                }
                mesh.Draw();

            }

модель черная, если я запускаю этот код ... но если я удаляю if (basicEffect != null), он отображается правильно для 1 кадра, но затем появляется исключение Null.

Спасибо


person lopata    schedule 15.02.2015    source источник


Ответы (1)


Наконец-то я смог сделать это правильно, изменив код на это:

        Texture2D[] texts =  new Texture2D[40000];
        bool bol = true;
        public void DrawModel( camera cam)
        {

           

            int i = 0;
            foreach (ModelMesh mesh in model.Meshes)
            {

                foreach (ModelMeshPart part in mesh.MeshParts)
                {
                    effect.Parameters["World"].SetValue(World );
                    effect.Parameters["View"].SetValue(View);
                    effect.Parameters["Projection"].SetValue(Projection);
                    effect.Parameters["TextureEnabled"].SetValue(true);


                    
                    var basicEffect = part.Effect as BasicEffect;
                    if (bol && basicEffect != null)
                    {
                        texts[i] = basicEffect.Texture;
                    }

                    
                    effect.Parameters["Texture"].SetValue(texts[i]);
                    i++;

                    part.Effect = effect;
                }
                mesh.Draw();

            }
            bol = false;
        }

person lopata    schedule 15.02.2015