/** * Paint the Canvas in an Image * * @param g * @param buffer * @param width * @param height */ public final void paint(Graphics2D g, int width, int height) { if (highQuality) { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); } background = Color.black; String stereo = getStereoMode(); if ("parallel".equals(stereo)) { final double d = 3 * Math.PI / 180; visualizer3D.rotate(-d, 0); visualizer3D.setScreenDimension(width / 2, height); g.setClip(0, 0, width / 2, height); paintShapes(g); visualizer3D.rotate(d, 0); visualizer3D.rotate(d, 0); visualizer3D.setScreenDimension(width / 2, height); g.setClip(width / 2, 0, width / 2, height); g.translate(width / 2, 0); paintShapes(g); g.translate(-width / 2, 0); g.setClip(null); visualizer3D.rotate(-d, 0); } else if ("interlaced".equals(stereo)) { background = new Color(100, 100, 150); // Point p = getLocationOnScreen(); boolean even = true; // p.x%2==0; // Creates buffer BufferedImage buf = new BufferedImage(width * 2, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = (Graphics2D) buf.getGraphics(); final double d = 1.8 * Math.PI / 180; final double t = -100000000; visualizer3D.getCenterOfRotation().z += t; visualizer3D.rotate(-d, 0); visualizer3D.getCenterOfRotation().z -= t; visualizer3D.setScreenDimension(width, height); paintShapes(g2); visualizer3D.getCenterOfRotation().z += t; visualizer3D.rotate(d, 0); visualizer3D.getCenterOfRotation().z -= t; visualizer3D.getCenterOfRotation().z += t; visualizer3D.rotate(d, 0); visualizer3D.getCenterOfRotation().z -= t; visualizer3D.setScreenDimension(width, height); g2.translate(width, 0); paintShapes(g2); g2.translate(-width, 0); visualizer3D.getCenterOfRotation().z += t; visualizer3D.rotate(-d, 0); visualizer3D.getCenterOfRotation().z -= t; g2.dispose(); // Interlace in g int width2 = 2 * width; // int[] rgb = (int[]) buf.getRaster().getDataElements(0, 0, width2, height, new // int[width2*height]); DataBufferInt b = (DataBufferInt) buf.getRaster().getDataBuffer(); int[] rgb = b.getData(); // System.out.println(b.); // int[] rgb = (int[]) .; // buf.getRGB(0, 0, width2, height, rgb, 0, width2); final int dev = 5; for (int x = 0; x + 1 < width - dev; x += 2) { { int i = x, j = x; for (int y = 0; y < height; y++) { rgb[i] = ((rgb[j] & 0xFEFEFEFE) >> 1) + ((rgb[j + 1] & 0xFEFEFEFE) >> 1); i += width2; j += width2; } } { int i = x + 1, j = width + x + dev; for (int y = 0; y < height; y++) { rgb[i] = ((rgb[j] & 0xFEFEFEFE) >> 1) + ((rgb[j + 1] & 0xFEFEFEFE) >> 1); i += width2; j += width2; } } } // Arrays.fill(rgb, 0xFF); // buf.getRaster().setDataElements(0, 0, width2, height, rgb); // buf.setRGB(0, 0, width2, height, rgb, 0, width2); g.drawImage(buf, even ? 0 : 1, 0, width, height, 0, 0, width - (even ? 0 : 1), height, this); } else { visualizer3D.setScreenDimension(width, height); paintShapes(g); } }