public synchronized void dots(){

			// clear image and z-buffer
			for (int i = pixels.length-1; i >= 0; i--)  {
				pixels[i] = 0;
				pixelsZ[i] = 1000;
			}
			{
				for (int row=0; row<height-1; row++){
					for (int col=0; col<width-1; col++){
						int i = row*width + col;

						PlotVal p0 = plotList[i];
						if (p0 != null) {
							int c0 = (lutNr == ORIGINAL) ? p0.color : getLutColor(p0);

							p0.z = p0.lumf - 128;
							tr.transform(p0);
							int x = tr.X, y = tr.Y, z = tr.Z;


							if ((x & ~511) == 0 && (y & ~511) == 0) { // only for w = h = 512
								int pos = (y<<9) | x;  // only for w = 512 !!!

								if (z < pixelsZ[pos]) {
									pixelsZ[pos] = z;

									if (light > 0) {
										tr.x   =  p0.dx;
										tr.y   =  p0.dy;
										tr.z   =  p0.dz;
										tr.xyzPos_();

										float l = light*(-tr.X/(float)p0.len) + 1 ;

										int r = (int)Math.min(255,l*((c0 >> 16)& 0xff));
										int g = (int)Math.min(255,l*((c0 >> 8 )& 0xff));
										int b = (int)Math.min(255,l*( c0       & 0xff));
										pixels[pos] = 0xff000000 | (r << 16) | (g << 8) | b;
									}
									else
										pixels[pos] = c0;
								}
							}
						}
					}
				}
			}

			image = Toolkit.getDefaultToolkit().createImage(source);
			imageRegion.setImage(image);
		}