[XNA]Рисование простой прозрачной плоскости

Я работаю с XNA, и у меня возникла проблема. Основная проблема, но аргх!!! Я хочу нарисовать океан, БАЗОВЫЙ океан, просто самолет, голубой и прозрачный. просто самолет. Пробовал с Vertex, с моделями и текстурами. Как работает альфа-канал в XNA? StencilState, DepthBuffer, ничего не получится. Можете ли вы объяснить, как это сделать? Достаточно использовать VertexPositionColor? Простите, но я долго ищу.

class Ocean
{
    Effect shader0;

    public Vector3 Position;
    GraphicsDevice Graphics;
    Camera camera;
    Model Mesh;


    Texture2D waterTexture;
    Rectangle screen;
    Texture2D test;



    public Ocean(Vector3 pos, int size, GraphicsDevice gra, Camera cam, ContentManager content)
    {

        Graphics = gra;
        shader0 = content.Load<Effect>("Ocean");
        //shader0 = new BasicEffect(this.Graphics);
        waterTexture = content.Load<Texture2D>("Images/shaderUnderwater");


        screen = new Rectangle(0, 0, this.Graphics.Viewport.Width, this.Graphics.Viewport.Height);
        Position = pos;


        Mesh = content.Load<Model>("Models/ocean");

        camera = cam;

        foreach (ModelMesh mesh in this.Mesh.Meshes)
        {
            foreach (ModelMeshPart part in mesh.MeshParts)
            {
                part.Effect = shader0;
            }

        }
    }




    bool underWater;
    Vector3 lightDirection = new Vector3(-1.0f, -1.0f, -1.0f);
    public void Draw(SpriteBatch spriteBatch, Player player)
    {

        Matrix world = Matrix.CreateScale(100f) * Matrix.CreateRotationX(MathHelper.ToRadians(-90f)) * Matrix.CreateTranslation(Position);

        //this.shader0.EnableDefaultLighting();
        this.shader0.Parameters["World"].SetValue(world);
        this.shader0.Parameters["View"].SetValue(player.Camera.View);
        this.shader0.Parameters["Projection"].SetValue(player.Camera.Projection);


       // Dessin du model
        foreach (ModelMesh mesh in this.Mesh.Meshes)
        {
            foreach (Effect effect in mesh.Effects)
            {


                effect.CurrentTechnique = effect.Techniques["Textured"];
                effect.Parameters["DiffuseColor"].SetValue(new Vector4(1f, 0.2f, 0.2f, 1f) ); // a reddish light
                effect.Parameters["DiffuseLightDirection"].SetValue(new Vector3(1, 0, 0) );  // coming along the x-axis
                effect.Parameters["SpecularColor"].SetValue(new Vector4(0, 1, 0 ,1f) ); // with green highlights




                effect.Parameters["World"].SetValue(world);
                effect.Parameters["View"].SetValue(player.Camera.View);
                effect.Parameters["Projection"].SetValue(player.Camera.Projection);

            }
            mesh.Draw();
        }
        this.Graphics.BlendState = BlendState.Opaque;



        //Effet 
        if (camera.Position.Y < Position.Y)
            spriteBatch.Draw(this.waterTexture, this.screen, Color.White);

    }

    public void Update(GameTime gameTime)
    {

    }


    void onWater()
    {
        underWater = true;
    }

}

}


person user3761048    schedule 24.07.2014    source источник
comment
В вашем коде используется Effect. попробуйте использовать BasicEffect только для устранения возможных проблем с вашим эффектом. Как только он отрендерится с BasicEffect, попробуйте его с вашим Effect.   -  person Steve H    schedule 26.07.2014
comment
Пробовал раз 5, но :/   -  person user3761048    schedule 26.07.2014


Ответы (1)


Если вы используете BasicEffect для рендеринга океана, у BasicEffect есть свойство Alpha, влияющее на прозрачность. См. здесь: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.basiceffect.alpha.aspx

Вы можете использовать BasicEffect для создания прозрачности любым способом, который вы используете для рендеринга вашей модели.

person Savvas Kleanthous    schedule 25.07.2014
comment
Я попробовал этот вариант, но безрезультатно :/ - person user3761048; 25.07.2014
comment
BasicEffect, безусловно, работает. Пожалуйста, опубликуйте свой код, возможно, вы не применяете эффект правильно. Я уверен, что смогу вам помочь, у меня большой опыт работы с XNA. - person Savvas Kleanthous; 25.07.2014