matlab class 5 xiaotao su, ph.d. visual psychophysicist & it group leader rutgers center for...

Post on 14-Dec-2015

217 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Matlab Class 5

Xiaotao Su, Ph.D.Visual Psychophysicist & IT Group Leader

Rutgers Center for Cognitive Science (RuCCS)

RuCCS

Psychtoolbox 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.

RuCCS

Screen drawing and psychtoolbox

Screen Geometry

X ----------- Positive ->

Y

Positive

Origin

Max X and Y

Coordinates are measured in pixels.

RuCCS

How you typically work with the psychtoolbox

Back Buffer(invisible)

Front Buffer

RuCCS

How you typically work with the psychtoolbox

Front Buffer

Step 1: DrawShape to the back buffer

RuCCS

How you typically work with the psychtoolbox

Step 2:Flip the back bufferto the front buffer

RuCCS

How you typically work with the psychtoolbox

Back Buffer is automatically cleared

RuCCS

How you typically work with the psychtoolbox

Now you can continue with your next frame of animation

RuCCS

How you typically work with the psychtoolbox

Flip the back bufferto the front buffer

RuCCS

How you typically work with the psychtoolbox

Back Buffer is automatically cleared

RuCCS

Basic Display Loop in PsychToolbox (PTB)

% Open Window

% while some condition is true do the following

% draw something

% make some changes

% repeat

% Close screen

RuCCS

Set up program draw_stuff

% draw_stuff.m

%

% Draws stuff on the screen

RuCCS

Skip Sync Tests

• Add to your program before opening the new screen

Screen('Preference','SkipSyncTests', 1);

RuCCS

Initialize the main window

% draw_stuff.m%% Draws stuff on the screenclear all;which_screen=0;

RuCCS

Set up program draw_stuff

% draw_stuff.m%% Draws stuff on the screenclear all;which_screen=0;

[window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]);

0 is main screen (allows for multiple monitors)

Command issued to the psychtoolbox Screen function

[red, green, blue]

Vector specifyingScreen color

0

RuCCS

Set up program draw_stuff

% draw_stuff.m%% Draws stuff on the screenclear all;which_screen=0;[window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]);

Vector [x1, y1, x2, y2]Which could be:[0, 0, 800, 600]For an 800 X 600 display

x1= 0y1 = 0

x2= 800 y2 = 600

RuCCS

Draw shape in back buffer% draw_stuff.m%% Draws stuff on the screenclear all;which_screen=0;[window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]);

shape_dimensions = screen_dimensions/2;Screen(window_ptr, 'FillRect', [0,0,255], shape_dimensions);

X1, Y1

X2, Y2Front buffer

Back buffer

RuCCS

% draw_stuff.m%% Draws stuff on the screenclear all;which_screen=0;[window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]);shape_dimensions = screen_dimensions/2;Screen(window_ptr, 'FillRect', [0,0,255], shape_dimensions);%Flip the buffersScreen(window_ptr,'Flip');

Back buffer

Flip the back buffer to the front buffer

Front buffer

RuCCS

Clear screen<<<<snip>>>>clear all;which_screen=0;[window_ptr, screen_dimensions]=Screen(0,'OpenWindow', [0, 0, 0]);

shape_dimensions = screen_dimensions/2;Screen(window_pointer, 'FillRect', [0,0,255], shape_dimensions);%Copy to main windowScreen(window,'Flip');%leave the image up for 5 secondsWaitSecs(5);%Clear screen and return control to matlabclear screen;

RuCCS

Task 1: Making a movie% draw_stuff.m%% Draws stuff on the screenclear all;which_screen=0;[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

RuCCS

Task 1: Basic Display Loop in PTB (code)

% draw_stuff.m%% Draws stuff on the screenclear all;try

which_screen=0;bg_color = [0, 0, 0];[window_ptr, screen_dimensions]= …

Screen(which_screen, …

'OpenWindow',bg_color);shape_dimensions = … screen_dimensions/2;tic;

while (toc < 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);endclear Screen;

catch

clear Screen;

end

RuCCS

Moving 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

RuCCS

Task 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

RuCCS

Task 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]

top related