Search code examples
javaprocessing

Why does the alpha argument to stroke() cause nothing to be drawn?


When I run the following code, my sketch draws as expected:

void draw() {
    int[] nextColor = getNextColor();
    stroke(nextColor[0], nextColor[1], nextColor[2]);
    float[] nextPoint = getNextLocation();
    point(nextPoint[0], nextPoint[1]);
}

However, if I add the fourth argument for the alpha transparency value to stroke(), nothing is drawn to the canvas at all:

float alpha = 0.8;
void draw() {
  int[] nextColor = getNextColor();
  stroke(nextColor[0], nextColor[1], nextColor[2], alpha);
  float[] nextPoint = getNextLocation();
  point(nextPoint[0], nextPoint[1]);
}

So far I have tried setting the alpha value to 1.0 directly in the argument (rather than using a variable) to be sure that I wasn't accidentally setting it to 0 somewhere. I have also double checked the documentation for stroke() and there is indeed an overridden version matching my arguments.

What am I doing incorrectly?

Here is all of my code in case there is something elsewhere that should be considered. Thank you.

import java.util.Random;

Random generator;
int meanX, stdevX, meanY, stdevY;
int meanR, meanG, meanB, stdevR, stdevG, stdevB;
float alpha = 0.8;

// returns two random numbers (for x, y, coordinates)
float[] getNextLocation() {
  float[] retArr = new float[2];
  retArr[0] = (float) (generator.nextGaussian() * stdevX + meanX);
  retArr[1] = (float) (generator.nextGaussian() * stdevY + meanY);
  return retArr;
}

int[] getNextColor() {
  int[] retArr = new int[3];
  
  retArr[0] = (int) (generator.nextGaussian() * stdevR + meanR);
  retArr[1] = (int) (generator.nextGaussian() * stdevG + meanG);
  retArr[2] = (int) (generator.nextGaussian() * stdevB + meanB);
  
  return retArr;
}

void setup() {
  background(255);
  size(500, 500);
  generator = new Random();
  strokeWeight(10);
  
  // play around with these
  meanX = width/6;
  stdevX = width/8;
  meanY = height/2;
  stdevY = height/30;
  meanR = 224;
  stdevR = 20;
  meanG = 169;
  stdevG = 60;
  meanB = 20;
  stdevB = 5;
  
}

void draw() {
  int[] nextColor = getNextColor();
  stroke(nextColor[0], nextColor[1], nextColor[2]);
  float[] nextPoint = getNextLocation();
  point(nextPoint[0], nextPoint[1]);
}

Solution

  • You are misunderstanding what the value of alpha is.

    Alpha means transparency.

    Alpha values range from 0 to 255, with 0 being completely transparent (i.e., 0% opaque) and 255 completely opaque (i.e., 100% opaque).

    So in your case, when you set your alpha to 0.8, you don't see anything because it's very close to transparent. When you do not set the alpha, it is by default 100% opaque, so you see the drawing.

    Take a look here if interested to know more.