crystal eyes

New Message Reply Date view Thread view Subject view Author view

Fernando D. Mato Mira (matomira++at++lig.di.epfl.ch)
Tue, 11 Apr 95 19:30 MET DST


Salut,

  combien de difference de $ entre a VR glasses set et
un set crystal eyes normal?
  combien ca coute les lunettes tout seules (pas d'emmeteur
infrarouge et ultrasons)
  Je te demande parce que logitech va discontinuer peut-etre
les head trackers et les 3dmice, et ils auraient de stock
a liquider (environ 100 unites).
  Si crystal+lunnetes VR+ logitech deal ca coute le meme
prix, tu es en train d'avoir un pair de lunnettes (normaux)
extra, plus un 3dmouse pour d'autres apps.
  L'emmeteur qui vient avec les crystal VR c'est celui
du 3dmouse. Ce du head tracker c'est la meme chose, avec
un design different (il est facile de le coller au plafond)

  Pour faire la stereo:

#define YMAXSTEREOf ((float) YMAXSTEREO)
#define YMAXSCREENf ((float) YMAXSCREEN)
#define YOFFSETf ((float) YOFFSET)

pfChannel *
make_right_channel(pfPipe *p, pfChannel *left)
{
    pfChannel *right;
    long share;

    /* Set up a single pipe, stereo simulation. */

    right = pfNewChan(p);

    /* Form channel group with left as the "master" */
    pfAttachChan(left, right);
  
    /*
     * Share field of view but not viewport
     * in addition to the default shared attributes.
     */
    share = pfGetChanShare(left);
    pfChanShare(left, (share & ~PFCHAN_VIEWPORT)
| PFCHAN_SCENE
| PFCHAN_EARTHSKY
| PFCHAN_NEARFAR
| PFCHAN_VIEW
| PFCHAN_STRESS
| PFCHAN_LOD
| PFCHAN_CULLFUNC
| PFCHAN_DRAWFUNC);
    return right;
}

float
viewport_fraction(int stereo)
{
    if (stereo)
      return YMAXSTEREOf / YMAXSCREENf;
    else
      return 1.0f;
}

pfChannel *
setup_viewports(pfPipe *p, pfChannel *left, pfChannel *right,
                float horiz_fov,
                int stereo)
{
    static float hprOffsets[3], xyzOffsets[3];
    float v_viewport_frac;
    float vert_fov = -1.0f;

    hprOffsets[PF_P] = 0.0f;
    hprOffsets[PF_R] = 0.0f;
    pfSetVec3(xyzOffsets, 0.0f, 0.0f, 0.0f);

    v_viewport_frac = viewport_fraction(stereo);
  
   /* vertical FOV is matched to window aspect ratio */
    pfChanFOV(left, horiz_fov, vert_fov);

    if (stereo) {
        float horiz_fov, vert_fov;

        if (!right)
            right = make_right_channel(p, left);
     
        /* vertical FOV is multiplied by (1.0 / v_viewport_frac)
           to account for old-style stereo */
        pfGetChanFOV(left, &horiz_fov, &vert_fov);
        pfChanFOV(left, horiz_fov, (1.0 / v_viewport_frac) * vert_fov);
        pfChanFOV(right, horiz_fov, (1.0 / v_viewport_frac) * vert_fov);

        /*
         * Set up viewport and viewing offsets.
         * Note that these are not shared by default.
         */

        pfChanViewport(left, 0.0f, 1.0f,
                       YOFFSETf / YMAXSCREENf,
                       (YOFFSET+YMAXSTEREO) / YMAXSCREENf);
        hprOffsets[PF_H] = 0.0f;
        xyzOffsets[PF_X] = -0.032f;
        pfChanViewOffsets(left, hprOffsets, xyzOffsets);
     
        pfChanViewport(right, 0.0f, 1.0f,
                       0.0f,
                       v_viewport_frac);
        hprOffsets[PF_H] = 0.0f;
        xyzOffsets[PF_X] = 0.032f;
        pfChanViewOffsets(right, hprOffsets, xyzOffsets);
    } else {
        pfChanViewport(left, 0.0f, 1.0f,
                       0.0f,
                       1.0f);
        pfChanViewOffsets(left, hprOffsets, xyzOffsets);
    }

    return right;
}

in main(), eg:

/* Open and configure full screen GL window. */

    pfInitPipe(p, OpenPipeline);
    pfFrameRate(20.0f);

    left = pfNewChan(p);
  
    /* Set FOV of all channels */
    pfMakeSimpleFrust(left, horiz_fov);
    pfChanAutoAspect(left, PFFRUST_CALC_HORIZ);

    right = setup_viewports(p, left, right, horiz_fov, stereo);

/* right is NULL the first time */

You can theoretically call setup_viewports repeatedly
to turn on/off stereo mode, but this will not work
on the Indigo II Extremes (you have to setmon STR_RECT before
running the program - maybe before initing Performer graphics,
in the program, works but I don't remember).
You have to setmon 72Hz after the program finished.
I don't know if the Onyx is OK for setmoning inside the
program, but I would expect so..

The code is a bit hacky, but it's abstracted out a bit
from the man pages, examples, etc.

If you have any questions, just drop me a line..

Fernando D. Mato Mira http://ligwww.epfl.ch/matomira.html
Computer Graphics Lab
Swiss Federal Institute of Technology (EPFL) Phone : +41 (21) 693 - 5248
CH-1015 Lausanne FAX : +41 (21) 693 - 5328
Switzerland E-mail : matomira++at++di.epfl.ch
                                            

"The limits of my language mean the limits of my world" -Ludwig Wittgenstein


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:51:11 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.