【问题标题】:Draw effect XNA with multiple texture用多个纹理绘制效果 XNA
【发布时间】:2015-04-16 08:22:54
【问题描述】:

在 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 异常。

谢谢

【问题讨论】:

    标签: c# xna hlsl


    【解决方案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;
            }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多