Programming

A Simple 2D Processing Sketch for Beginners

Here’s a simple Processing sketch that renders some 2D graphics. Maybe it’ll inspire or help you if you’re looking to get into 2D graphics using Processing.

As part of my Computer Graphics course, I’m required to write multiple 2D and 3D programs throughout the semester. This was my very first assignment!

You can find more information about the Processing programming language at Processing.org.

Download

Here’s a download of the sketch in: Download Simple_2D.zip

Processing Source Code

Here’s the source by itself:

// Polygon  
PShape polygon1;  // Initialize the polygon's PShape object

// Initialize three explicitly-defined points, used later
// when drawing primitives.
int[] pointOne = new int[2];
int[] pointTwo = new int[2];
int[] pointThree = new int[2];

// directionFlagOne is used for direction switching
// regarding the green square, whose coordinates are based off
// of pointOne.
int directionFlagOne = 1;

// directionFlagOne is used for direction switching
// regarding the yellow rectangle, whose coordinates are based off
// of pointTwo and pointThree.
int directionFlagTwo = 1;

// The int textColor is used in the "hidden text" section of this code
// Initializing the int here.
int textColor = 0;

void setup() {  
  // Set the framerate to 30
  frameRate(30);
  // Create a 500x500 window, sufficient for all requirements
  size(500, 500, P2D); // Uses the Processing 2D Renderer

  // Set up polygon1 - fill color and vertices
  polygon1 = createShape();
  polygon1.beginShape();
  polygon1.fill(255, 255, 255); // polygon1 is white.
  polygon1.noStroke();
  polygon1.vertex(0, 0);
  polygon1.vertex(0, 100);
  polygon1.vertex(50, 50);
  polygon1.vertex(100, 100);
  polygon1.vertex(100, 0); 
  polygon1.endShape();
  // Done setting up polygon1

  // Define initial values for the three explicitly-defined points
  // defined above setup() function.
  pointOne[0] = 25;
  pointOne[1] = 275;
  pointTwo[0] = 25;
  pointTwo[1] = 325;
  pointThree[0] = 475;
  pointThree[1] = 425;
} // End setup call

void draw() {
  background(0); // Background color is black.

  // Green Line Segment
  stroke(0, 255, 0);
  line(10, 10, 10, 250);

  // Turn stroke off for the rest of the shapes
  noStroke();

  // A small, green square that rotates and slides
  // back and forth along the bottom half of the screen. Uses one
  // of the three explicitly-defined points initialized above.
  // Logic (if/else if statements) for direction switching
  if (pointOne[0] >= 475){
    directionFlagOne = -1; // Reverse direction if boundary hit
  }
  else if (pointOne[0] <= 25){
    directionFlagOne = 1;
  }  
  pointOne[0] += 5 * directionFlagOne;
  rectMode(CENTER);
  fill(0, 255, 0);
  rect(pointOne[0], pointOne[1], 25, 25);
  // End code for small, green square

  // The corners of the following yellow rectangle are defined by the
  // explicitly-defined points "pointTwo" and "pointThree."
  // These points change over time.
  rectMode(CORNERS);
  fill(255, 255, 0);
  rect(pointTwo[0], pointTwo[1], pointThree[0], pointThree[1]);
  // The following code changes the coordinates of pointTwo and pointThree.
  // Logic (if/else if statements) for direction switching
  if (pointTwo[0] >= 475){
    directionFlagTwo = -1; // Reverse direction if boundary hit
  }
  else if (pointTwo[0] <= 25){
    directionFlagTwo = 1;
  }  
  // pointTwo and pointThree define the corners of the yellow square
  // The y-coordinates of pointTwo and pointThree are derived from the value
  // of the sin() function.
  pointTwo[0] += 5 * directionFlagTwo;
  pointTwo[1] = 375 - int(50*sin(radians(frameCount%360))); 
  pointThree[0] += 5 * -1 * directionFlagTwo;
  pointThree[1] = 375 + int(10*sin(radians(frameCount%360))); 
  // End code for yellow rectangle

  // Red Rectangle
  rectMode(CORNER);
  fill(255, 0, 0);
  rect(20, 10, 100, 50);

  // Blue Ellipse
  fill(0, 0, 255);
  ellipse(70, 100, 100, 50);

  // 5-sided Polygon
  shape(polygon1, 20, 150);

  // Text
  fill(255, 255, 255);
  String textString1 = "Press the 'g' key to show a fun message!";
  textAlign(CENTER);
  textSize(20);
  text(textString1, 250, 490);

  // "Hidden Text" section  
  // Changes color of text based upon state of "g" key.
  if (key == 'g' || key == 'G') {
    textColor = 255;
  }
  // textColor changes depending on the state of the "g" key
  fill(textColor);
  textAlign(CENTER);
  // textString2 contains the hidden text
  String textString2 = "\"Computer Graphics\" is awesome!";
  // Write the text to the bottom of the screen
  text(textString2, 250, 460);  
  // End "hidden text" section

  // Color-changing rectangles - police-light style!
  // Color changes based on frame count
  rectMode(CORNER);
  fill(255 - frameCount%255, 0, frameCount%255);
  rect(200, 25, 50, 20);
  fill(frameCount%255, 0, 255 - frameCount%255);
  rect(150, 25, 50, 20);

  // Magenta rectangle whose width changes
  rectMode(CENTER);
  fill(255, 0, 255);
  rect(200, 100, frameCount%100, 20);

  // Light blue rectangle whose height changes
  rectMode(CENTER);
  fill(0, 255, 255);
  rect(200, 200, 100, frameCount%20);

} // End draw call

Have a comment?