Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C#XNAKinect
hello everyone, thx in advance for your help Smile | :) .
 
The problem that i have is about rendering in xna4 and kinect, when i got a colorframe from kinect, i copy it to a texture2D and then render it to a rendertarget, but my render target has more resolution. that's not a problem since I dont need to fill the whole screen, but i need the sorrounding parts to be transparent ...
 
I obviously make a
graphicsdevice.clear(color.transparent)
, but it renders purple ... testing and testing i got that if i render it slowly (i make a check for the colorframe ready), the render target transparency works fine "sometimes", since the purple parts appears like blinking.
 
any idea what is happening?,
 

 
my code for rendering:
 
GraphicsDevice.SetRenderTarget(Full);//junta las capas
            //renderiza todo lo que haya en la lista ...
            if (SystemElementList.OpenedFileList.Count > 0)
            {
                GraphicsDevice.Clear(Color.White); //fondo blanco
                for (int i = SystemElementList.OpenedFileList[SystemElementList.actualFile].LayerList.Count - 1; i > -1; i--)
                {
                    Layer Lay = SystemElementList.OpenedFileList[SystemElementList.actualFile].LayerList[i];
                    if (Lay.Update && Lay.Visible) //para que renderize solo si es necesario y además si esta visible -> cada vez que se ejecuta bahave hay que revisar si es necesario actualizar ...
                    {
                        if (Lay.renderedLayer == null) Lay.renderedLayer = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height); //chequea que el rendertarget este creado 

                        GraphicsDevice.SetRenderTarget(Lay.renderedLayer); //se selecciona solo la capa como renderTarget
                        GraphicsDevice.Clear(Color.Transparent);
 
                        sprite.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
                        if (Lay.HasBackground)//renderizar background del tamaño exacto de la vista, si es que lo tiene ...
                        {
                            sprite.Draw(Lay.Background, Vector2.Zero, new Rectangle(0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), Color.White);
                        }
                        foreach (ObjetoRenderizable Obj in Lay.RenderList)
                        {
                              Obj.render2D(GraphicsDevice, ref sprite); //here i render the kinect layer with other objects of course ... the other objects works fine with the transparency ...
                        }
                        if (Lay.Cleanable)
                        {
                            //sprite.Draw(Lay.Eraser, Vector2.Zero, new Rectangle(0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height), Color.White);
                        }
                        sprite.End();
                        Lay.Update = false;
                    }
                    if (Lay.Visible && Lay.renderedLayer != null)
                    {
                        GraphicsDevice.SetRenderTarget(Full);//renderiza la capa en el pass final ... solo si es visible, tiene elementos y ademas hay que actualizarla
                        sprite.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
                        sprite.Draw(Lay.renderedLayer, Vector2.Zero, Color.White); //se renderiza
                        sprite.End();
                    }
                    Lay = null;
                }
            }
            else
            {
                GraphicsDevice.Clear(Color.Gray); //color de fondo default 
            }
 
            GraphicsDevice.SetRenderTarget(null); //vuelve al render target comun y renderiza el resultado final
            GraphicsDevice.Clear(Color.Gray); //color de fondo default
            sprite.Begin(SpriteSortMode.Immediate, BlendState.Opaque);
            sprite.Draw(Full, Vector2.Zero, Color.White);
            sprite.End();
Posted 16-Nov-12 3:23am

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 545
1 OriginalGriff 312
2 ravikhoda 300
3 Damith Weerasinghe 295
4 Tadit Dash 180
0 Sergey Alexandrovich Kryukov 10,974
1 OriginalGriff 6,667
2 Peter Leow 4,760
3 Abhinav S 3,813
4 Maciej Los 3,565


Advertise | Privacy | Mobile
Web01 | 2.8.140421.2 | Last Updated 16 Nov 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Use
Layout: fixed | fluid