View Single Post
Old 04-28-2012, 10:40 PM   #12
geekmaster
Всё гениальное просто.
geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.geekmaster ought to be getting tired of karma fortunes by now.
 
geekmaster's Avatar
 
Posts: 5,066
Karma: 6789001
Join Date: Nov 2011
Location: Щедрость не имеет пределов.
Device: *.*
The list of numbers in sv[0] is called in the computer graphics industry a "display list". It contains commands and data that render an image when the list is "executed". The display list used in this newtrix demo only implements commands for "move", "line-to", and "exit". The value zero is an "escape" which can be followed by a command. This simple version only implements an "exit" command (a second value zero). Any command does an implicit "pen-up", and in this code any non-zero value after a zero is assumed to be a "line-to" with implicit "pen-down" AFTER the command executes.

You can think of a display list as a simple "machine language" executed by a software "graphics processor". The display list "language" can contain graphics commands that define one or more objects built from graphics primitives (2D: dot, line, circle, XY position, velocity, acceleration, 3D: sphere, tube, cube, XYZ position, velocity, acceleration, and you even define things like texture, transparency, and reflectivity). Display lists can also contain "subroutines" that display complex objects, and can be told to draw their object in different size, orientation, color, texture, and more. Display list subroutines can control animation using collision detection and particle physics (like gravity in the hoser demos). It is a custom language you define, so you can add what you want to it. When you add a new command to the display list language, you need to add code to the display list interpreter code to process that new command. You are only limited by your imagination. You could even script a feature length "animated motion picture" defined completely by a display list commands, which would give HUGE compression (a feature film in only a few KB, for example, but would grow a lot as you replace simple algorithmic textures and motion with detailed texture and motion capture).

At the end of the sv[] table you can see three zeros. The first zero is "command" (and pen-up), which is followed by a second zero "exit". The third zero is for segfault prevention when modifying the display list driver. A little farther up in the table you can see a solitary zero, which behaves as a "pen-up" command, used to cross the letter "t" in the touchscreen-captured "geekmaster" signature.

The "pen" draws with the same "shaded tubes" as the "hoser" demo, with tube diameter proportional to the same scale factor as the the signature dimensions. For those who have not watched it, the signature "scalable vector graphic" is displayed in the final "goodbye" demo after its animation has been running for awhile, starting so small it is barely visible at first, slowly growing until it covers a large part of the display. Because the background is doing continuous "color palette animation", and the signature is rendered on top of every background frame just before calling the eink update, the signature appears to "hover" above the animated background image while it slowly grows in size. You really need to see this effect. Perhaps I should post just the final stage of this demo, which I created specifically for a final "wow" effect for this program (close the show with a "bang").

EDIT: I added some links to external web pages. I recommend clicking the underlined links above and reading at least a little of the linked pages. Good stuff!

I have unfinished code that converts these display lists into "Hershey code" variant so that it can be rendered by my (also unfinished) "Hershey vector fonts" code. That way the above table can be converted into a simple character string, and rendered by the vector font code.

I also have some unfinished "Z-Buffer Device" code.



Last edited by geekmaster; 04-29-2012 at 12:43 PM.
geekmaster is online now   Reply With Quote