Git Product home page Git Product logo

terminalrenderer's Introduction

TerminalRenderer

The TerminalRenderer library is one that makes it easy to render shapes and images directly in the terminal.

External Libraries

  • Pastel: for custom background and foreground color usage in the terminal
  • ImageSharp: as a cross-platform means of loading, using, or generating images to render in the terminal

Example

Code:

TerminalDisplay display = new();

// create a new pixel with a content of "* "
// this uses the default foreground and background colors (white, black)
TerminalPixel pixel = new TerminalPixel()
{
    BackgroundColor = Color.SteelBlue,
    PixelContent = "* "
};

// change background color
display.Draw(TerminalRectangle.Centered(new Point(0, 0), display.Width, display.Height, new TerminalPixel(Color.SteelBlue)));

// draw the origin point
display.Draw(new TerminalPixel(new Point(0, 0), Color.Red));

// example shapes
display.Draw(TerminalRectangle.Centered(new Point(-13, 10), 12, 6, new TerminalPixel(Color.Coral)));
display.Draw(new TerminalLine(new Point(5, -6), new Point(17, 8), pixel with {ForegroundColor = Color.Chartreuse}));
const int P = -12;
display.Draw(new TerminalPolygon(pixel with {ForegroundColor = Color.Beige}, new Point[]
{
    new (P - 06, P - 08),
    new (P + 06, P - 08),
    new (P + 12, P + 00),
    new (P - 00, P - 04),
    new (P - 12, P + 00),
}));

// clears the console and renders what has been drawn
display.Render();

Console.ReadLine(); // pause execution

Output: The render output

More Advanced Rendering

This library allows and is optimized for rendering more than once, meaning rendering animations is possible. Rainbow spinny thing

terminalrenderer's People

Contributors

firebreak-2 avatar

Stargazers

mammon avatar  avatar Lazarus avatar Avery Business Solutions avatar Jay avatar Billy Middleton avatar Valerio Maggi avatar

Watchers

 avatar

terminalrenderer's Issues

TerminalDisplay.Render() should only write over changed pixels, not all

Writing over everything, whether it changed from the past frame or not, causes stutters in the rendering when doinng ~60 fps simple renders. This is due to having to write over everything from beginning to end, which slows rendering at high rates.

A possible solution is saving the last rendered frame, then when rendering the next frame, comparing the differences. Wherever a pixel has changed, it can then be specifically drawn over. This will lead to faster rendering because the redundant drawing is cut from the process.

Use a different line rendering algorithm

The current implementation sometimes causes stuttery and broken lines, instead of straight continous ones.

Would also be cool to be able to control line thickness.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.