summaryrefslogtreecommitdiffstats
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/README.md1
-rw-r--r--dev/a1_textrain/a1_textrain.pde159
-rw-r--r--dev/a1_textrain/data/TextRainInput.movbin0 -> 5615074 bytes
-rw-r--r--dev/a1_textrain/data/TextRainInput2.movbin0 -> 7548818 bytes
-rw-r--r--dev/a1_textrain/data/TextRainInput3.movbin0 -> 11075890 bytes
-rw-r--r--dev/a1_textrain/data/TextRainInput4.movbin0 -> 12460114 bytes
6 files changed, 160 insertions, 0 deletions
diff --git a/dev/README.md b/dev/README.md
new file mode 100644
index 0000000..58f4032
--- /dev/null
+++ b/dev/README.md
@@ -0,0 +1 @@
+This directory is for storing sourcecode for software under development, including assignments
diff --git a/dev/a1_textrain/a1_textrain.pde b/dev/a1_textrain/a1_textrain.pde
new file mode 100644
index 0000000..686824c
--- /dev/null
+++ b/dev/a1_textrain/a1_textrain.pde
@@ -0,0 +1,159 @@
+/*
+ * CSci-4611 Assignment #1 Text Rain
+ */
+
+
+/* Note: if Processing's video library does not support your particular combination of webcam and
+ operating system, then the Sketch may hang in the setup() routine when the list of available
+ image capture devices is requestd with "Capture.list()". If this happens, you can skip all of
+ the camera initilization code and just run in movie mode by setting the following global
+ variable to true.
+ */
+boolean forceMovieMode = false;
+
+// Global vars used to access video frames from either a live camera or a prerecorded movie file
+import processing.video.*;
+String[] cameraModes;
+Capture cameraDevice;
+Movie inputMovie;
+boolean initialized = false;
+
+
+// Both modes of input (live camera and movie) will update this same variable with the lastest
+// pixel data each frame. Use this variable to access the new pixel data each frame!
+PImage inputImage;
+
+
+
+// Called automatically by Processing, once when the program starts up
+void setup() {
+ size(1280, 720);
+ inputImage = createImage(width, height, RGB);
+
+ if (!forceMovieMode) {
+ println("Querying avaialble camera modes.");
+ cameraModes = Capture.list();
+ println("Found " + cameraModes.length + " camera modes.");
+ for (int i=0; i<cameraModes.length; i++) {
+ println(" " + i + ". " + cameraModes[i]);
+ }
+ // if no cameras were detected, then run in offline mode
+ if (cameraModes.length == 0) {
+ println("Starting movie mode automatically since no cameras were detected.");
+ initializeMovieMode();
+ }
+ else {
+ println("Press a number key in the Processing window to select the desired camera mode.");
+ }
+ }
+}
+
+
+
+// Called automatically by Processing, once per frame
+void draw() {
+ // start each frame by clearing the screen
+ background(0);
+
+ if (!initialized) {
+ // IF NOT INITIALIZED, DRAW THE INPUT SELECTION MENU
+ drawMenuScreen();
+ }
+ else {
+ // IF WE REACH THIS POINT, WE'RE PAST THE MENU AND THE INPUT MODE HAS BEEN INITIALIZED
+
+
+ // GET THE NEXT FRAME OF INPUT DATA FROM LIVE CAMERA OR MOVIE
+ if ((cameraDevice != null) && (cameraDevice.available())) {
+ // Get image data from cameara and copy it over to the inputImage variable
+ cameraDevice.read();
+ inputImage.copy(cameraDevice, 0,0,cameraDevice.width,cameraDevice.height, 0,0,inputImage.width,inputImage.height);
+ }
+ else if ((inputMovie != null) && (inputMovie.available())) {
+ // Get image data from the movie file and copy it over to the inputImage variable
+ inputMovie.read();
+ inputImage.copy(inputMovie, 0,0,inputMovie.width,inputMovie.height, 0,0,inputImage.width,inputImage.height);
+ }
+
+
+ // DRAW THE INPUTIMAGE ACROSS THE ENTIRE SCREEN
+ // Note, this is like clearing the screen with an image. It will cover up anything drawn before this point.
+ // So, draw your text rain after this!
+ set(0, 0, inputImage);
+
+
+ // DRAW THE TEXT RAIN, ETC.
+ // TODO: Much of your implementation code should go here. At this point, the latest pixel data from the
+ // live camera or movie file will have been copied over to the inputImage variable. So, if you access
+ // the pixel data from the inputImage variable, your code should always work, no matter which mode you run in.
+
+
+
+ }
+}
+
+
+// Called automatically by Processing once per frame
+void keyPressed() {
+ if (!initialized) {
+ // CHECK FOR A NUMBER KEY PRESS ON THE MENU SCREEN
+ if ((key >= '0') && (key <= '9')) {
+ int input = key - '0';
+ if (input == 0) {
+ initializeMovieMode();
+ }
+ else if ((input >= 1) && (input <= 9)) {
+ initializeLiveCameraMode(input);
+ }
+ }
+ }
+ else {
+ // CHECK FOR KEYPRESSES DURING NORMAL OPERATION
+ // TODO: Fill in your code to handle keypresses here..
+ if (key == CODED) {
+ if (keyCode == UP) {
+ // up arrow key pressed
+ }
+ else if (keyCode == DOWN) {
+ // down arrow key pressed
+ }
+ }
+ else if (key == ' ') {
+ // spacebar pressed
+ }
+ }
+}
+
+
+
+// Loads a movie from a file to simulate camera input.
+void initializeMovieMode() {
+ String movieFile = "TextRainInput.mov";
+ println("Simulating camera input using movie file: " + movieFile);
+ inputMovie = new Movie(this, movieFile);
+ inputMovie.loop();
+ initialized = true;
+}
+
+
+// Starts up a webcam to use for input.
+void initializeLiveCameraMode(int cameraMode) {
+ println("Activating camera mode #" + cameraMode + ": " + cameraModes[cameraMode]);
+ cameraDevice = new Capture(this, cameraModes[cameraMode-1]);
+ cameraDevice.start();
+ initialized = true;
+}
+
+
+// Draws a quick text-based menu to the screen
+void drawMenuScreen() {
+ int y=10;
+ text("Press a number key to select an input mode", 20, y);
+ y += 40;
+ text("O: Offline mode, test with TextRainInput.mov movie file instead of live camera feed.", 20, y);
+ y += 40;
+ for (int i = 0; i < min(9,cameraModes.length); i++) {
+ text(i+1 + ": " + cameraModes[i], 20, y);
+ y += 40;
+ }
+}
diff --git a/dev/a1_textrain/data/TextRainInput.mov b/dev/a1_textrain/data/TextRainInput.mov
new file mode 100644
index 0000000..ae45b66
--- /dev/null
+++ b/dev/a1_textrain/data/TextRainInput.mov
Binary files differ
diff --git a/dev/a1_textrain/data/TextRainInput2.mov b/dev/a1_textrain/data/TextRainInput2.mov
new file mode 100644
index 0000000..d8fce10
--- /dev/null
+++ b/dev/a1_textrain/data/TextRainInput2.mov
Binary files differ
diff --git a/dev/a1_textrain/data/TextRainInput3.mov b/dev/a1_textrain/data/TextRainInput3.mov
new file mode 100644
index 0000000..c1e6386
--- /dev/null
+++ b/dev/a1_textrain/data/TextRainInput3.mov
Binary files differ
diff --git a/dev/a1_textrain/data/TextRainInput4.mov b/dev/a1_textrain/data/TextRainInput4.mov
new file mode 100644
index 0000000..9dff13b
--- /dev/null
+++ b/dev/a1_textrain/data/TextRainInput4.mov
Binary files differ