2014-07-24 5 views
1

XNA에서 작업하고 있는데 문제가 있습니다. 기본적인 문제이지만 아 !!! 바다, 기본 바다, 그냥 비행기, 파란색과 투명 그려 싶습니다. 그냥 비행기. 모델과 텍스처로 Vertex를 사용해 보았습니다. 그 알파 채널은 XNA에서 어떻게 작동합니까? StencilState, DepthBuffer, 아무것도 작동하지 않습니다. 이 작업을 수행하는 방법을 설명 할 수 있습니까? VertexPositionColor를 충분히 사용 하시겠습니까? 실례 합니다만, 오랫동안 찾고 있습니다.[XNA] 간단한 투명 평면 그리기

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; 
    } 

} 

}

+0

코드는 '효과'를 사용합니다. 당신의 효과에 발생할 수있는 문제를 제거하기 위해서'BasicEffect'를 사용해보십시오. 'BasicEffect'로 렌더링 한 다음,'Effect'로 시도해보십시오. –

+0

시도한 횟수는 5 번이지만 :/ – user3761048

답변

0

당신이 바다를 렌더링 할 BasicEffect를 사용하는 경우, 다음 BasicEffect는 투명성에 영향을주는 알파 속성이 있습니다. 여기를 참조하십시오 : http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.basiceffect.alpha.aspx

BasicEffect를 사용하여 모델 렌더링에 사용하는 방식으로 투명도를 만들 수 있습니다.

+0

이 옵션을 시도했지만 결과가 없습니다./ – user3761048

+0

BasicEffect가 작동합니다. 코드를 게시하십시오. 어쩌면 효과를 올바르게 적용하지 못했을 수도 있습니다. 내가 도울 수 있다고 확신한다. XNA에 대한 폭 넓은 경험이있다. – SKleanthous