Title: Matlab Class 5 Xiaotao Su, Ph.D. Visual Psychophysicist
1Matlab Class 5Xiaotao Su, Ph.D.Visual
Psychophysicist IT Group LeaderRutgers Center
for Cognitive Science (RuCCS)
2Psychtoolbox Basics
- Computers are perfect for creating and displaying
visual psychophysics stimuli - Programs usually written in a low-level language
(e.g. C or Pascal) to achieve full control of the
hardware for precise stimulus display but are
difficult to program - Interpreted languages like Matlab are abstracted
from hardware details and provide friendlier
development environments - The Psychophysics Toolbox is a software package
that allows Matlab to fully control the hardware
for precise stimulus display while retaining the
flexibility and ease of Matlab.
3Screen drawing and psychtoolbox
Origin
Coordinates are measured in
pixels.
X ----------- Positive -gt
Y
Positive
Max X and Y
4How you typically work with the psychtoolbox
Back Buffer (invisible)
Front Buffer
5How you typically work with the psychtoolbox
Step 1 Draw Shape to the back buffer
Front Buffer
6How you typically work with the psychtoolbox
Step 2 Flip the back buffer to the front buffer
7How you typically work with the psychtoolbox
Back Buffer is automatically cleared
8How you typically work with the psychtoolbox
Now you can continue with your next frame of
animation
9How you typically work with the psychtoolbox
Flip the back buffer to the front buffer
10How you typically work with the psychtoolbox
Back Buffer is automatically cleared
11Basic Display Loop in PsychToolbox (PTB)
- Open Window
- while some condition is true do the following
- draw something
- make some changes
- repeat
- Close screen
12Set up program draw_stuff
- draw_stuff.m
-
- Draws stuff on the screen
13Skip Sync Tests
- Add to your program before opening the new
screenScreen('Preference','SkipSyncTests', 1)
14Initialize the main window
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- which_screen0
15Set up program draw_stuff
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- which_screen0
- window_ptr, screen_dimensions
- Screen(0,'OpenWindow', 0, 0, 0)
0
Vector specifying Screen color
Command issued to the psychtoolbox Screen function
0 is main screen (allows for multiple monitors)
red, green, blue
16Set up program draw_stuff
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- which_screen0
- window_ptr, screen_dimensionsScreen(0,'OpenWind
ow', 0, 0, 0)
Vector x1, y1, x2, y2 Which could be 0, 0,
800, 600 For an 800 X 600 display
x1 0 y1 0
x2 800 y2 600
17Draw shape in back buffer
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- which_screen0
- window_ptr, screen_dimensionsScreen(0,'OpenWind
ow', 0, 0, 0) - shape_dimensions screen_dimensions/2
- Screen(window_ptr, 'FillRect', 0,0,255,
shape_dimensions)
X1, Y1
Front buffer
X2, Y2
Back buffer
18Flip the back buffer to the front buffer
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- which_screen0
- window_ptr, screen_dimensionsScreen(0,'OpenWind
ow', 0, 0, 0) - shape_dimensions screen_dimensions/2
- Screen(window_ptr, 'FillRect', 0,0,255,
shape_dimensions) - Flip the buffers
- Screen(window_ptr,'Flip')
Front buffer
Back buffer
19Clear screen
- ltltltltsnipgtgtgtgt
- clear all
- which_screen0
- window_ptr, screen_dimensionsScreen(0,'OpenWind
ow', 0, 0, 0) - shape_dimensions screen_dimensions/2
- Screen(window_pointer, 'FillRect', 0,0,255,
shape_dimensions) - Copy to main window
- Screen(window,'Flip')
- leave the image up for 5 seconds
- WaitSecs(5)
- Clear screen and return control to matlab
- clear screen
20Task 1 Making a movie
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- which_screen0
- window_ptr, screen_dimensions
- Screen(0,'OpenWindow', 0, 0, 0)
- shape_dimensions screen_dimensions/2
- Screen(window_pointer, 'FillRect',
- 0,0,255, shape_dimensions)
- then loop and increment screen_dimensions at
each turn
21Task 1 Basic Display Loop in PTB (code)
- draw_stuff.m
-
- Draws stuff on the screen
- clear all
- try
- which_screen0
- bg_color 0, 0, 0
- window_ptr, screen_dimensions
- Screen(which_screen, 'OpenWindow',bg_color)
- shape_dimensions screen_dimensions/2
- tic
-
while (toc lt 5) move shape
shape_dimensions shape_dimensions
0,5,0,5 draw shape
Screen(window_ptr, 'FillRect', 0,0,255,
shape_dimensions) flip buffer and
repeat Screen(Flip, window_ptr) end cl
ear Screen catch clear Screen end
22Moving Shapes around the Screen
- Shapes are defined by an array of numbers e.g.
sh1 10, 15, 40, 45 x1, y1, x2, y2 - To move a shape in the x direction by 5 pixels we
need to increment both x coordinates by 5e.g.
sh1(1) sh1(1) 5 sh1(3) sh1(3) 5 or use
another array sh1 sh1 5, 0, 5, 0 - Same for moving in the y direction
- Increment both if you want to move diagonally
23Task 2
Make the rectangle move to the bottom of the
screen at 5 pixels per frame, then move right
when it hits the bottom. When it hits the right,
the program ends
Hint shape_dimensions(1) is x1, (2) is y1, (3)
is x2, 4 is y2
24Task 3
When the rectangle hits the bottom make it change
colors to red
Hint color is a 3 number vector red is
255, 0, 0