Input Interaction and CS 352: Computer Graphics

advertisement
CS 352: Computer Graphics
Input
and
Interaction
Chapter 3 - 2
Interactive Computer Graphics
What good is Computer Graphics?


JS1k canvas examples: 1 2 3 4 5
Games, visual demos…of what value? Is
there a Christian perspective?

Communication of information to the user
Data visualization, simulation, GUI
Even a word processor is an "interactive graphics
program"

Communication between users
"Collaborative environments" are hot (multi-player games?)
Social networking is transforming the world…

Interaction is an essential component
Chapter 3 - 3
Interactive Computer Graphics
Interaction


Much of the fun and utility of graphics is in
interaction: accepting user input that affects
the display
Paint programs, modeling, games, word
processors, spreadsheets, powerpoint …


User initiates input events such as clicking on a
menu or drawing a circle
Computer response by changing graphical display
Chapter 3 - 4
Interactive Computer Graphics
Chapter 3 - 5
Interactive Computer Graphics
Projects 3

Projects 3 will be a paint program


we'll learn 2-D graphics, interaction, event-loop
programming, double-buffering simple animation, basic
image processing
Features:





Pen, line, and rectangle tools
Color, pen size selectors
Image processing (sharpen, blur, detect edges)
Open, save images
Toolbar and menu for controlling application
Chapter 3 - 6
Interactive Computer Graphics
How to set up an application UI?




How
How
How
How
to
to
to
to
make
make
make
make
a menu?
a color picker?
a toolbar?
toolbar buttons pop in and out?
Chapter 3 - 7
Interactive Computer Graphics
How to paint?


How do I make a colored line follow the
mouse or fingertip?
Interactive prog:



Input devices
Event handlers
Event loop
Chapter 3 - 8
Interactive Computer Graphics
Input devices

Interaction requires handling input devices

Physical: mouse, fingertip, keyboard, joystick,
digitizer, accelerometer, head tracker…

Logical:






Text
Locator
Valuator (slider)
Stroke
Color picker
How to read?
Chapter 3 - 9
Interactive Computer Graphics
Input devices

Sample mode


Event mode



Program reads the current state of input device
(frequently)
Each click or motion generates an event that goes
on a queue
Program can process events from queue
HTML?
Chapter 3 - 10
Interactive Computer Graphics
Event-loop programming

Events: button press, slider value change,
menu selection, mouse move, keypress

Event loop:




Poll (or wait) for events
Process events, update state
Update display
(ideally: wait for rest of frame time to elapse)
Chapter 3 - 11
Interactive Computer Graphics
State-driven

Typically, the event loop is driven by a big
state table



e.g. depressing the paintbrush tool releases other
tools, puts me in "paint mode"
Good libraries will handle some of the
bookkeeping for you
You still typically have to handle some state
Chapter 3 - 12
State diagram
Interactive Computer Graphics
Chapter 3 - 13
Interactive Computer Graphics
Event loop in HTML/JS

HTML/JS provides event queue, support for
many basic events (mousedown, mouseup
mouseover, mousemove, keypress, key release,
value change, button click, etc.)


You are on your own for higher-level events,
e.g. clicking on a toolbar tool
It's also possible to set a function to
run every 15 ms, sample input devices
Chapter 3 - 14
Interactive Computer Graphics
Events for painting?

mousedown:




mouseup:


go into paint mode
store mouse position
draw initial dot
exit paint mode
mousemove:

if in paint mode


draw a line from old mouse position to current
set old mouse position to current position
Chapter 3 - 15
Interactive Computer Graphics
Event handling with jQuery

Binding events to functions
$(cpaint.canvas).bind('mousedown', cpaint.drawStart)

Processing events
cpaint.drawStart = function(ev) {
var x, y;
x = ev.pageX - $(cpaint.canvas).offset().left;
y = ev.pageY - $(cpaint.canvas).offset().top;
ev.preventDefault();
cpaint.paintmode = true;
cpaint.oldX = x;
cpaint.oldY = y;
Chapter 3 - 16
Interactive Computer Graphics
Looking neat and spiffy

How to avoid crinkles in your paint strokes?
Chapter 3 - 17
Interactive Computer Graphics
Looking neat and spiffy

How to avoid crinkles in your paint strokes?

Draw connected paths

Or just use line caps
Chapter 3 - 18
Interactive Computer Graphics
Menus

There are many jQuery menu plug-ins…
<ul id="mainmenu">
<li>File
<ul>
<li id="menuNew">New</li>
<li id="menuOpen">Open</li>
<li id="menuSave">Save</li>
------------------------------------$('#menuNew').bind('click', cpaint.clear);
$('#menuOpen').bind('click',cpaint.open);
$('#menuSave').bind('click',cpaint.save);
Chapter 3 - 19
Interactive Computer Graphics
Toolbar

How to make a toolbar?

How should buttons behave?

State diagram?
Chapter 3 - 20
Interactive Computer Graphics
Buttons

Widgets may have several states
State should be evident in visual feedback
E.g. how exactly does a button work? States?

State transition diagram



Most buttons: six states, with six different appearances








neutral
neutral-highlighted
neutral-depressed
selected
selected-highlighted
selected-depressed
Events: mousedown, mouseup, enter, exit
Transitions: what happens in each state under each event?
Chapter 3 - 21
Interactive Computer Graphics
Button state diagram
(buttons selectable, not unselectable)
N
S
NH
SH
N: neutral
H: highlighted
NHD
Press
Move
SHD
(usually mouse over)
S: selected
D: mouse down
Chapter 3 - 22
Interactive Computer Graphics
Other button considerations

Could also consider





Tooltips
Whether button merely clicks and releases or can
be selected
Whether button can be unselected
(e.g. B/I/U vs. Left, Center, Right)
Want consistent appearance, behavior over
whole program – or whole computer
Really need a library implementation and a
strict set of UI guidelines…
Chapter 3 - 23
Interactive Computer Graphics
4-State toolbar buttons: CSS
.toolbarCell {
background-color:#ddd; width:20pt; height:20pt;
border: solid #eee 2px;
box-shadow: 2px 2px 2px #666; }
#markerButton { background: url(img/paintbrush.png)
no-repeat center center; }
.selected { box-shadow: inset 2px 2px 2px #666; }
.toolbarCell:hover { border:solid #555 2px; }
Chapter 3 - 24
Interactive Computer Graphics
4-State toolbar buttons: JS
$('#markerButton').bind('click', {tool:"marker"},
cpaint.selectTool);
-------------------
cpaint.selectTool = function(ev) {
cpaint.tool = ev.data.tool;
// get tool name
$('.toolbarCell').each(function(index) { // unselect
$(this).removeClass('selected');
// others
});
var tool = '#' + cpaint.tool + 'Button'; // get ID
$(tool).addClass('selected');
// select
}
Chapter 3 - 25
Interactive Computer Graphics
Paintbrush size selector

How?
Chapter 3 - 26
Interactive Computer Graphics
Color picker

Google "jQuery color picker"…

<input type=“color”> works in some browsers
Chapter 3 - 27
Interactive Computer Graphics
How draw a line?

What kind of feedback is normal?


Rubber Banding
Events and actions?
Chapter 3 - 28
Interactive Computer Graphics
Save & restore



Create your own off-screen canvas
Copy it back on each mouse movement
Events and actions?
Chapter 3 - 29
Interactive Computer Graphics
Save & Restore event handling

Mousedown





Mousemove



enter line mode
remember mouse position as startx, starty
save screen
draw initial dot
paste saved screen
draw line from startx, starty to current mouse pos
Mouseup

exit line mode
Chapter 3 - 30
Interactive Computer Graphics
Analysis

Drawbacks?

slow – eats memory bandwidth for breakfast


copy smallest possible rectangle? Only points from line?
possible flickering

use double buffering?
Chapter 3 - 31
Interactive Computer Graphics
Double buffering







Have two frame buffers, "front" and "back"
Draw into back buffer
At vertical retrace time, swap buffers
This is a fundamental graphics technique…
…not built into canvas…
…though, some drawing aggregation seems
to happen automatically, behind the scenes;
…not usually necessary in canvas, but
browser dependent
Chapter 3 - 32
Interactive Computer Graphics
Fake Double Buffering in Canvas

Create off-screen canvas
canvasBuffer = document.createElement('canvas');
canvasBuffer.width = canvas.width;
canvasBuffer.height= canvas.height;
canvasBufferContext= canvasBuffer.getContext('2d');

Draw into off-screen canvas
canvasBufferContext.[drawSomeStuff…]

Copy onto display canvas
context.drawImage(canvasBuffer, 0, 0);
Chapter 3 - 33
Interactive Computer Graphics
How to erase?

Draw background color…
Chapter 3 - 34
Interactive Computer Graphics
Save, Load?

Save


Copy pixels to an image so users can right-click,
save-as
Load





What are the security risks?
Can only load files from the same server
Can use a file chooser if it's a local app
Security policies are not entirely in place
Consider chrome option
--allow-file-access-from-files
Chapter 3 - 35
Interactive Computer Graphics
Resizing


How would you allow the user to shrink,
expand image?
What would happen to image resolution?
Chapter 3 - 36
Interactive Computer Graphics
Store drawing commands

Realistically, to redraw effectively, you have
to save all drawing commands
pen color red
fill color blue
line width 5
circle 5 10 12
textfont Times 12
text 10 10 "hello world"



Replay commands to redraw scene
Could store commands in a file (e.g. Mac PICT file)
For some kinds of drawings, files are smaller and
more accurate than bitmaps
Chapter 3 - 37
Interactive Computer Graphics
Other toolkits






HTML offers basic UI capabilities in a crossplatform context
Writing your own UI extensions is tedious
jQuery plugins extend capabilities
Ideally, all UI elements ought to be built in
In the real world, they come in platformspecific 'toolkits' or 'windowing libraries'
E.g. MFC, QT, OpenLook, Cocoa …
Chapter 3 - 38
Interactive Computer Graphics
Image processing

Image processing examples:









blur, sharpen
detect edges
enhance contrast
noise reduction
posterize
fisheye
redeye reduction
find faces
…
Chapter 3 - 39
Interactive Computer Graphics
How to fade an image?


Could average pixel colors with white
Or just decrease alpha…
Chapter 3 - 40
Interactive Computer Graphics
How to blur an image?
Chapter 3 - 41
Interactive Computer Graphics
How to blur an image?






Blurring is an averaging process
Convolution: apply a convolution kernel, e.g.
1/9
1/9
1/9
1/9
1/9
1/9
1/9
1/9
1/9
Center kernel on pixel of interest
Multiply each kernel value by color value underneath
Add results
Gaussian smoothing
Chapter 3 - 42
Interactive Computer Graphics
Gaussian smoothing
Chapter 3 - 43
Interactive Computer Graphics
Chapter 3 - 44
Interactive Computer Graphics
How to sharpen an image?


It's a differentiation process
What's Unsharp Masking?
Chapter 3 - 45
Interactive Computer Graphics
How to sharpen an image?




It's a differentiation process
What's Unsharp Masking?
Subtract blurred version from original
Add back to original
Chapter 3 - 46
Interactive Computer Graphics
Sharpening




Subtract neighbors
Like subtracting a blurred version of the
image
Unsharp Masking
E.g. convolve with a kernel like one of these:
Chapter 3 - 47
Interactive Computer Graphics
Edge detection?
Wikipedia
Chapter 3 - 48
Interactive Computer Graphics
Sobel Edge Operators



Look for horizontal and vertical variation
1
2
1
-1
0
1
0
0
0
-2
0
2
-1
-2
-1
-1
0
1
Could do this at different sales or resolutions
Note: results maybe positive or negative
numbers; must normalize
Chapter 3 - 49
Interactive Computer Graphics
Image Compression



What if you created say six different lowerresolution images and only stored the
difference at each resolution?
Note: most of the data is in the highestfrequency component
An early image compression technique
Chapter 3 - 50
Interactive Computer Graphics
Fourier Transform
Chapter 3 - 51
Interactive Computer Graphics
The alg that changed imagery…


Discrete cosine
transform (DCT)
(Wikipedia)
Chapter 3 - 52
Interactive Computer Graphics
JPEG image compression




DCT to convert to frequency domain
Perceptual modeling
Coefficient quantization
Entropy coding
Chapter 3 - 53
Interactive Computer Graphics
Research in image processing
and computer vision


How would you clear up a blurry
photograph?
How would you recognize a face in a
photograph?
Chapter 3 - 54
Interactive Computer Graphics
Face recognition


One approach: statistically derive a set of
“standardized face ingredients” from many
examples, resulting in
“eigenfaces”
Represent each face as
linear combination
of eigenfaces
Chapter 3 - 55
Interactive Computer Graphics
Summary








Event loop programming
Interaction and event handling in HTML
State diagrams
Painting
Rubber banding
Double buffering
Basic image processing and convolutions
"Photoshop Nano"
Download