public void Render(Viewport viewport, Sprite sprite, Matrix view, Matrix projection, Matrix world, float xScale, float yScale, float rotation) { var image = sprite.CurrentFrame; var position = new Vector(0, 0, 0); var transformedPosition = Vector.Transform(position, world, view); var translatedPosition = Vector.Translate(transformedPosition, projection, viewport.Width, viewport.Height); var z = ((transformedPosition.Z / viewport.View.DepthDivisor) + viewport.View.DepthZero); var depthBufferAdjustedZ = z; var bufferSize = BufferContainer.Stride * BufferContainer.Height; var bufferZ = (UInt32)((1.0f - depthBufferAdjustedZ) * (float)UInt32.MaxValue); if (depthBufferAdjustedZ < 0f || depthBufferAdjustedZ >= 1f) { return; } var xOriginOffset = (int)-((sprite.CurrentFrame.Width / 2f) * xScale); var yOriginOffset = (int)-((sprite.CurrentFrame.Height / 2f) * yScale); var actualX = ((int) translatedPosition.X) + xOriginOffset; var actualY = ((int) translatedPosition.Y) + yOriginOffset; var positionOffset = actualX + (actualY * BufferContainer.Stride); if (xScale != 1f || yScale != 1f) { RenderScaled(viewport, positionOffset, actualX, actualY, sprite.CurrentFrame, translatedPosition, bufferSize, bufferZ, xScale, yScale); } else { RenderUnscaled(viewport, positionOffset, actualX, actualY, sprite.CurrentFrame, translatedPosition, bufferSize, bufferZ); } }
public void Render(IViewport viewport, Sprite sprite, Matrix view, Matrix projection, Matrix world, float xScale, float yScale, float rotation) { var buffer = BufferManager.Instance.Current; var image = sprite.CurrentFrame; var position = new Vector(0, 0, 0); var transformedPosition = Vector.Transform(position, world, view); var translatedPosition = Vector.Translate(transformedPosition, projection, viewport.Width, viewport.Height); var depthBufferAdjustedZ = -transformedPosition.Z / viewport.Camera.DepthDivisor; var positionOffset = (((int)translatedPosition.X)) + (((int)translatedPosition.Y) * buffer.FrameBuffer.Stride); var bufferSize = buffer.FrameBuffer.Stride*buffer.Height; var bufferZ = (UInt32)(depthBufferAdjustedZ * (float)UInt32.MaxValue); if( depthBufferAdjustedZ < 0f || depthBufferAdjustedZ >= 1f) { return; } if( xScale != 1f || yScale != 1f ) { RenderScaled(buffer, positionOffset, sprite.CurrentFrame, translatedPosition, bufferSize, bufferZ, xScale, yScale); } else { RenderUnscaled(buffer,positionOffset,sprite.CurrentFrame,translatedPosition,bufferSize,bufferZ); } }
public override void LoadContent() { var mesh = ContentManager.Load<Mesh>("pumpkin.ASE"); Scene.AddNode(mesh); //mesh.World = Matrix.CreateScale(new Vector(10f, 10f, 10f)); _lightSprite = ContentManager.Load<Sprite>("sun.png"); //Scene.AddNode(_lightSprite); Display.BackgroundColor = Color.FromArgb(0xff, 0, 0, 0); light = new OmniLight(); light.Range = 2.0f; light.Position.X = 0; light.Position.Y = 0; light.Position.Z = -30; light.ColorDiffuse = Color.FromArgb(0xff, 255, 121, 32); light.ColorSpecular = Color.FromArgb(0xff, 0xff, 0xff, 0xff); light.ColorAmbient = Color.FromArgb(0xff, 0x7f, 0x3f, 0x10); Scene.AddNode(light); }
public void Render(IViewport viewport, Sprite sprite, Matrix view, Matrix projection, Matrix world, float xScale, float yScale, float rotation) { }