« Return to Thread: Stereo vision interlaced or page flipping by j3d. Help me!

Re: Stereo vision interlaced or page flipping by j3d. Help me!

by java3d-interest :: Rate this Message:

Reply to Author | View in Thread

Excuse me if  I am boring, but I'm looking for some examples to see a interlaced image in stereo mode.
I now enable the graphics card to display the stereo, but the interlaced image (constructed of rows of the left image and with the odd rows of the right image) not seen with stereo glasses, but I see it like without glasses.
This is my code, it is the class for stereo vision:
(The image is the interlaced image)

import java.awt.Color;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;

import javax.media.j3d.Appearance;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.GraphicsConfigTemplate3D;
import javax.media.j3d.GraphicsContext3D;
import javax.media.j3d.J3DGraphics2D;
import javax.media.j3d.View;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import com.sun.j3d.utils.universe.SimpleUniverse;


public class StereoView extends JFrame implements Runnable {
        private SimpleUniverse univ = null;
        private Canvas3D canvas;
        private GraphicsContext3D gc = null;
        private J3DGraphics2D g2d = null;
        private BufferedImage image3d = null;
       private int xSize = 0;  
       private int ySize = 0;
       // Set this to true when the graphics card use shared z buffer
       // in stereo mode.
       public static String defaultSharedStereoZbuffer = Boolean.TRUE.toString();
       private boolean sharedStereoZbuffer;
       private boolean stereoSupport;  
       

        //
        // Renders a single frame by clearing the canvas, drawing the
        // geometry, and swapping the draw and display buffer.
        //
        public void render() {
                if (gc == null) {
                        // Set up Graphics context
                        gc = canvas.getGraphicsContext3D();
                        gc.setAppearance(new Appearance());
                        gc.setBufferOverride(true);
                }
                if (stereoSupport) {    
                        if (!sharedStereoZbuffer) {
                            gc.setStereoMode(GraphicsContext3D.STEREO_BOTH);    
                            // This clear both left and right buffers, we
                            // must set STEREO_BOTH before it. Otherwise
                            // it only clear LEFT or RIGHT buffer unless
                            // this is invoke twice for each buffer.
                            gc.clear();
                        }
                }
                gc.clear();
                if (g2d == null)
                        g2d = canvas.getGraphics2D();
                g2d.drawImage(image3d, (xSize-image3d.getWidth())/2, (ySize-image3d.getHeight())/2,
                                (xSize-image3d.getWidth())/2+image3d.getWidth(), (ySize-image3d.getHeight())/2+image3d.getHeight(),
                                0, 0, image3d.getWidth(), image3d.getHeight(), this);
                g2d.flush(false);
                canvas.swap();
        }

        //
        // Run method for our immediate mode rendering thread.
        //
        public void run() {
                System.out.println("SterioView.run: starting main loop");
                while (true) {
                        render();
                        Thread.yield();
                }
        }


        private void createUniverse() {
                // Get the preferred graphics configuration for the default screen
                GraphicsConfigTemplate3D gct = new GraphicsConfigTemplate3D();
        gct.setStereo(GraphicsConfigTemplate3D.PREFERRED);
        GraphicsConfiguration config =
            GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getBestConfiguration(gct);
                // Create a Canvas3D using the preferred configuration
                canvas = new Canvas3D(config);
                stereoSupport = canvas.getStereoAvailable();
                if (stereoSupport)
                {
                        System.out.println("This machine support stereo");
                        String str = System.getProperty("j3d.sharedstereozbuffer",
                                        defaultSharedStereoZbuffer);
                        sharedStereoZbuffer = (new Boolean(str)).booleanValue();
                }
                else
                {
                        JOptionPane.showMessageDialog(null, "Stereo is not support","Attenzione",JOptionPane.WARNING_MESSAGE);
                }

                if (!canvas.getDoubleBufferAvailable())
                {
                    System.out.println("Double buffer is not support !");
                }
                canvas.setBackground(Color.black);
        canvas.addKeyListener(new KeyAdapter(){
        public void keyPressed(KeyEvent e)
        {
        if (e.getKeyCode()==KeyEvent.VK_ESCAPE)
        {
        dispose();
        }
        }
        });
                canvas.stopRenderer();
                // Create simple universe with view branch
                univ = new SimpleUniverse(canvas);

                // This will move the ViewPlatform back a bit so the
                // objects in the scene can be viewed.
                univ.getViewingPlatform().setNominalViewingTransform();

                // Ensure at least 5 msec per frame (i.e., < 200Hz)
                univ.getViewer().getView().setMinimumFrameCycleTime(5);
        }

       
        public StereoView(BufferedImage image3d) {
                this.image3d = image3d;
                // Initialize the GUI components
                initComponents();

                // Create Canvas3D and SimpleUniverse; add canvas to JFrame
                createUniverse();
                this.add(canvas);
       
                // Start a new thread that will continuously render
                new Thread(this).start();
        }

        private void initComponents() {
        this.setUndecorated(true);
        Toolkit tk = Toolkit.getDefaultToolkit();  
        xSize = ((int) tk.getScreenSize().getWidth());  
        ySize = ((int) tk.getScreenSize().getHeight());  
        this.setSize(xSize,ySize);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
}
 
Can you suggest me any trick?
[Message sent by forum member 'raffaele1983' (raffaele1983)]

http://forums.java.net/jive/thread.jspa?messageID=353265

---------------------------------------------------------------------
To unsubscribe, e-mail: interest-unsubscribe@...
For additional commands, e-mail: interest-help@...

 « Return to Thread: Stereo vision interlaced or page flipping by j3d. Help me!