1

I was beginning with coding in Processing when I encountered an error which I can't find a solution for.

**DISCLAIMER: I'm new to coding, so I'm having trouble understanding how it works lol

I was attempting to use processing to write a code for a kinect program that would create a ripple effect, but I can't figure out how to define two variables.

Code:

// A simple ripple effect. Click on the image to produce a ripple
// Author: radio79
// Code adapted from http://www.neilwallis.com/java/water.html
// Code adapted from https://forum.processing.org/two/discussion/25348/can-i-apply-ripple-effect-to-kinect

import org.openkinect.processing.*;

Kinect kinect;


PImage img;
Ripple ripple;

void setup() {
  size(1920, 1080);
  kinect = new Kinect(this);
  kinect.initVideo();
 
  img = new PImage(kinect.colorWidth, kinect.colorHeight);

  ripple = new Ripple();
  //frameRate(60);
}

void draw() {

  image(kinect.getVideoImage(), 0, 0);

  img.loadPixels();

  for (int loc = 0; loc < Kinect.colorWidth * Kinect.colorHeight; loc++) {
    img.pixels[loc] = ripple.col[loc];
  }


  img.updatePixels();
  ripple.newframe();
}

class Ripple {
  int i, a, b;
  int oldind, newind, mapind;
  short ripplemap[]; // the height map
  int col[]; // the actual pixels
  int riprad;
  int rwidth, rheight;
  int ttexture[];
  int ssize;

  Ripple() {
    // constructor
    riprad = 3;
    rwidth = width >> 1;
    rheight = height >> 1;
    ssize = width * (height + 2) * 2;
    ripplemap = new short[ssize];
    col = new int[width * height];
    ttexture = new int[width * height];
    oldind = width;
    newind = width * (height + 3);
  }



  void newframe() {
    // update the height map and the image
    i = oldind;
    oldind = newind;
    newind = i;

    i = 0;
    mapind = oldind;
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++) {
        short data = (short)((ripplemap[mapind - width] + ripplemap[mapind + width] + 
          ripplemap[mapind - 1] + ripplemap[mapind + 1]) >> 1);
        data -= ripplemap[newind + i];
        data -= data >> 5;
        if (x == 0 || y == 0) // avoid the wraparound effect
          ripplemap[newind + i] = 0;
        else
          ripplemap[newind + i] = data;

        // where data = 0 then still, where data > 0 then wave
        data = (short)(1024 - data);

        // offsets
        a = ((x - rwidth) * data / 1024) + rwidth;
        b = ((y - rheight) * data / 1024) + rheight;

        //bounds check
        if (a >= width) 
          a = width - 1;
        if (a < 0) 
          a = 0;
        if (b >= height) 
          b = height-1;
        if (b < 0) 
          b=0;

        col[i] = img.pixels[a + (b * width)];
        mapind++;
        i++;
      }
    }
  }
}

void mouseDragged() {
  for (int j = mouseY - ripple.riprad; j < mouseY + ripple.riprad; j++) {
    for (int k = mouseX - ripple.riprad; k < mouseX + ripple.riprad; k++) {
      if (j >= 0 && j < height && k>= 0 && k < width) {
        ripple.ripplemap[ripple.oldind + (j * width) + k] += 512;
      }
    }
  }
}

The error is: 'The global variable "x" does not exist', 'The global variable "y" does not exist' and so forth. Please help.

The variables I need help defining appear on line 18 for the first time, they are colorWidth and colorHeight

The line reads:

  img = new PImage(kinect.colorWidth, kinect.colorHeight);

The colorWidth and colorHeight are underlined in red.

I have tried using this method:

public 
 float colorWidth;
 float colorHeight;

But, only the second line appears to be defined properly. The first line emits the message "colorWidth cannot be resolved or is not a field" when the program runs, or "illegal modifier for parameter colorWidth; only final is permitted" when the underline is clicked. Picture of what the program shows after the public code

PLEASE HELP!!! Thank you!

1 Answers1

0

The keyword public here just means nothing, it must be said of a function or variable. And you just don't need it. So removing it should fix the problem!

nanto
  • 1
  • 4