开发者

Why are my screenshots only black?

could someone tell me why my screenshots are only black? I am still learning and couldnt find a clue why they are only black.

This is my Utility class

static class XNAUtilities
{
    private static RenderTarget2D ssTexture;
    private static KeyboardState currentState, previousState;
    private static int counter;

    public static void TakeScreenShot(GraphicsDevice device, Keys theKey)
    {
        // Take Screenshot
        currentState = Keyboard.GetState();

        if (currentState.IsKeyDown(theKey) && previousState.IsKeyUp(theKey))
        {
            //device.SetRenderTarget(null);                                                         
            PresentationParameters pparameters = device.PresentationParameters;
            ssTexture = new RenderTarget2D(device, pparameters.BackBufferWidth, pparameters.BackBufferHeight, false, SurfaceFormat.Color, DepthFormat.None); //??
            FileStream fileStream = new System.IO.FileStream(@"Screenshot" + "_" + counter + ".png", System.IO.FileMode.CreateNew);
            ssTexture.SaveAsPng(fileStream, pparameters.BackBufferWidth, pparameters.BackBufferHeight);

            counter++;
        }
        previousState = currentState;
    }
}

}

This is my Update and Draw from Game1.cs

    protected override void Update(GameTime gameTime)
    {
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        myModelRotation += MathHelper.ToRadians(1f);

        // Take a Screenshot
        XNAUtilities.TakeScreenShot(GraphicsDevice, Keys.F8);

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        Matrix[] transforms = new Matrix[myModel.Bones.Count];
        myModel.CopyAbsoluteBoneTransformsTo(transforms);

        foreach (ModelMesh mesh in myModel.Meshes)
        {
            foreach (BasicEffect effects in mesh.Effects)
            {
                effects.EnableDefaultLighting();
                effects.World = transforms[mesh.ParentBone.Index]
                    * Matrix.CreateRotationY(myModelRotation)
                    * Matrix.CreateTranslation(myModelPosition);
                effects.View = Matrix.CreateLookAt(new Vector3(200, 100, 400), Vector3.Zero, Vector3.Up);

                effects.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45f),
                    GraphicsDevice.Viewport.AspectR开发者_开发知识库atio, 1, 5000);
            }
            mesh.Draw();
        }


        smileySprite.DrawSprites(GraphicsDevice, spriteBatch, new Vector2(10,10), Color.White);

        base.Draw(gameTime);
    }


You're not actually rendering to your render target. So you're saving the blank target.

You need to wrap your scene drawing like so:

GraphicsDevice.SetRenderTarget(ssTexture);
// Render your scene here
GraphicsDevice.SetRenderTarget(null);
// Now you can save your render target as a texture
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜