Trying to do light refraction and reflection

please format code with </> button * homework policy * asking questions

I am trying to do a light refraction simulation under the waves.
I got the wave code so I can make wavey surface
but I don’t know how to express light on that

this is the wave code

<
float particle;
float particlesSpeed;

float particlesNew;
float particlesSpeedNew;

float particelGain = 0.00999;
float forceGain = 0.999; // Speed

int funberOfPArticles = 100;
float CameraX = 800;
float CameraY = 1500;
float CameraZ = 300;

float CameraMovments = 0;
int CameraMovInt = 0;

float zoom = 1000 / funberOfPArticles;
float offset = 0;

float waveOrNot = -3;

void setup() {
size(1280, 780, P3D);

pixelDensity(2);
particle = new float[funberOfPArticles][funberOfPArticles];
particlesSpeed = new float[funberOfPArticles][funberOfPArticles];
particlesNew = new float[funberOfPArticles][funberOfPArticles];
particlesSpeedNew = new float[funberOfPArticles][funberOfPArticles];

for (int x = 1; x<funberOfPArticles-1; x++) {
for (int y = 1; y<funberOfPArticles-1; y++) {

  particle[x][y] = 0.0;
  particlesNew[x][y] = 0.0;
  particlesSpeed[x][y] = 0.0;
  particlesSpeedNew[x][y] = 0.0;
}

}

noFill();
stroke(255);
}

void draw() {
camera(CameraX, CameraY, CameraZ, 500, 500, 0.0,
0.0, 0.0, -1.0);

directionalLight(126, 126, 126, 0, 0.5, -1);

updateMesh();

background(0);
drawCoorinats();
drawMesh();
println(frameRate);
}

void updateMesh() {

for (int x = 1; x<funberOfPArticles-2; x++) {
for (int y = 1; y<funberOfPArticles-2; y++) {
//under
float force1 = 0.0;
force1 += particle[x-1][y-1] - particle[y];
force1 += particle[x-1][y] - particle[y];
force1 += particle[x-1][y+1] - particle[y];
//over
force1 += particle[x+1][y-1] - particle[y];
force1 += particle[x+1][y] - particle[y];
force1 += particle[x+1][y+1] - particle[y];
//sidene
force1 += particle[y-1] - particle[y];
force1 += particle[y+1] - particle[y];

  force1 -= particle[x][y+1] / 8;
  
  //force1 = constrain(force1, -1, 1);
  
  particlesSpeedNew[x][y] = 0.995 * particlesSpeedNew[x][y] + force1/100;

  particlesNew[x][y] = particle[x][y] + particlesSpeedNew[x][y];
}

}

for (int x = 1; x<funberOfPArticles-1; x++) {
for (int y = 1; y<funberOfPArticles-1; y++) {

  particle[x][y] = particlesNew[x][y];
}

}
if(waveOrNot != 0) {
offset += .1;
int MouseXIndex = 2 + (funberOfPArticles-4) * mouseX / width;
int MouseYIndex = 2 + (funberOfPArticles-4) * mouseY / height;
particlesSpeedNew[MouseXIndex][MouseYIndex] = waveOrNot;
particlesSpeedNew[MouseXIndex+1][MouseYIndex+1] = waveOrNot;
particlesSpeedNew[MouseXIndex+1][MouseYIndex] = waveOrNot;
particlesSpeedNew[MouseXIndex+1][MouseYIndex-1] = waveOrNot;
particlesSpeedNew[MouseXIndex][MouseYIndex-1] = waveOrNot;
particlesSpeedNew[MouseXIndex-1][MouseYIndex+1] = waveOrNot;
particlesSpeedNew[MouseXIndex-1][MouseYIndex] = waveOrNot;
particlesSpeedNew[MouseXIndex-1][MouseYIndex-1] = waveOrNot;

particle[MouseXIndex][MouseYIndex] = waveOrNot10;
particle[MouseXIndex+1][MouseYIndex+1] = waveOrNot
5;
particle[MouseXIndex+1][MouseYIndex] = waveOrNot10;
particle[MouseXIndex+1][MouseYIndex-1] = waveOrNot
5;
particle[MouseXIndex][MouseYIndex-1] = waveOrNot10;
particle[MouseXIndex-1][MouseYIndex+1] = waveOrNot
5;
particle[MouseXIndex-1][MouseYIndex] = waveOrNot10;
particle[MouseXIndex-1][MouseYIndex-1] = waveOrNot
5;

//particlesSpeedNew[40][40] = 100.0 * sin( offset);
}
}

void drawCoorinats() {
strokeWeight(3);
stroke(255, 0, 0);
line(0, 0, 0, 100, 0, 0);

stroke(0, 255, 0);
line(0, 0, 0, 0, 100, 0);
}

void drawMesh() {

strokeWeight(1);
stroke(0, 255, 255);
for (int x = 0; x<funberOfPArticles; x++) {
beginShape();
for (int y = 0; y<funberOfPArticles; y++) {
vertex( (x)*zoom, (y)*zoom, particle[y] );
}
endShape();
}
for (int y = 0; y<funberOfPArticles; y++) {
beginShape();
for (int x = 0; x<funberOfPArticles; x++) {
vertex( (x)*zoom, (y)*zoom, particle[y] );
}
endShape();
}
fill(200);
for (int x = 0; x<funberOfPArticles-1; x++) {

for (int y = 0; y<funberOfPArticles-1; y++) {
  beginShape();
  vertex( (x)*zoom, (y)*zoom, particle[x][y] );
  vertex( (x+1)*zoom, (y)*zoom, particle[x+1][y] );
  vertex( (x+1)*zoom, (y+1)*zoom, particle[x+1][y+1] );
  vertex( (x)*zoom, (y+1)*zoom, particle[x][y+1] );
  endShape();
}

}
}

void keyPressed() {
if (keyCode == UP) {
CameraY -= 100;
} else if (keyCode == DOWN) {
CameraY += 100;
}
if (keyCode == RIGHT) {
CameraX += 100;
} if (keyCode == LEFT) {
CameraX += -100;
}

if (key==’ ') {
if(waveOrNot == 0) {
waveOrNot = -5;
}else{
waveOrNot = 0;
}
}

if (key == ‘a’) {
CameraZ += 100;
} if (key == ‘z’) {
CameraZ += -100;
}
println(" " + CameraX + ", " + CameraY + ", " + CameraZ);
}