Sunday, March 22, 2009

Computer graphics, Intro

I started a business after coming back from Hong Kong last year. It's called FriendlyComputers and we have a website at FriendlyComputers.ca. I started it with a friend of mine (Ted) in July 2008 and we hoped to have an online presence at least by October/November. The business is to sell computer products and services online. The goal is to create enough clientele that by the time we had sufficient funds (and a feasible business supply/demand) then we would move the business to a physical location (preferably in the Mississauga/Etobicoke area).





Unfortunately our plans didn't come to fruition. We've experienced delays and my personal apathy for creating more work for myself. However in the back of my mind the work was there (the seed was there, it just needed to be watered). Well, Ted did his part. The proof is in the current site. We intended to build a flyer and begin manual advertising (pamplets, etc.). That was my job. But I struggled with it. Reason being is that I wasn't comfortable with the tools for creating/designing pamplets, etc. Or I'm just lazy. But I honestly feel that drawing with a mouse is just wrong. So long story short, I bought a Tablet PC recently (Mar 19, 2009).





I picked up a IBM/Lenovo X41 Tablet. It's got a Pentium M Centrino 1.5 GHz processor, 1.56 GB of RAM, 60 GB Hard drive, Intel GMA 905 graphics. I love it already. Keyboard is excellent. Writing, via the stylus, is fun but more importantly it's natural. The stylus is a natural aparatus to use to create images. Even better would be my finger but a stylus is the next best thing. Someday, with the new multi-touch technology coming out on new tablets, one day I'll be able to use my finger.





Which leads me to the topic of the day. Computer graphics. I find this field funny because the reading material for it is so disparate that it's hard for me to find my way around. Eg. Computer graphics in universities start from math. We learn algebra and geometry and talk about vostroms and translation, etc. That's all fine. Another eg. Image processing. An image in essence can be nothing more than an array of pixels or a description of a vector path. However, the primary tools to manipulate images is Adobe Photoshop and vectors with Adobe Illustrator. The problem I find is that there is a gap between the theory and the practice. So theoretically I can learn Computer graphics in school and then take it to a Game design shop or a 3D graphics design shop. No problem there. But if I want to learn about theory about image processing what we get is alot of math or click here and click there as in Photoshop/Illustrator classes/online tutorials, etc. In other words, there isn't a decent theoretical treatment to the workflow and tools available for the image processing applications, i.e. Photoshop/Illustrator.





So I'd like to write my own. Some of my goals are as follows. I'd like to create images/scenes from photographs captured from a digital camera. Since capturing an image is easier than creating images from scratch I think it would be good to have an efficient workflow to design images. I want to convert these raster images (from the camera) into vector images. I've learned that Illustrator (CS2) contains a trace function which will build vectors images from raster images. And then through editing, storing, retrieving objects I learn the fine art of designing images. So whereas a course in Photoshop/Illustrator for instance would start the same way that the tutorial books would, i.e. here is the workspace, canvas, tools, colour, etc., I want to start documenting from a theoretical standpoint. Eg. Graphics programming with Perl describes it from a logical point of view (from a programmer's point of view). And image is a canvas. A canvas can be made up of one or more canvas. A primitive is a point. Elements are polygons, circles, squares, curves. By building it up this way it's easier to grasp that a layer (in Photoshop speak) is nothing more than a canvas. A point/handle is an anchor. A filter should be a function over a 2d object. All primitives are objects. A layer is an object. So as you can see by my description, when we use a filter or a channel I will know what it means (from a logical point of view).

More later.